IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA-E] Bug dans la concaténation de String


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 10
    Par défaut [VBA-E] Bug dans la concaténation de String
    Bonjour à tous,
    Je cherche un work-around pour un probleme apparaissant dans la concaténation de chaine. Le code suivant construit itérativement une chaine de caracteres. Seul les 255 premiers caracteres sont lu dans le résultat. La mesure de la taille de la chaine retourne pourtant une valeur supérieur (fonction Len). Il semblerait que ce soit dans les operation d'acces a la valeur de la chaine qu'il y un probleme, plus que dans la concatenation elle meme. J'ai essaye d'utiliser Left pour lire la chaine autrement, mais cela ne corrige pas le probleme.

    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    Function SelectDataSeriesFromCategory(columnSerie As Range, selectColumn As Range, value As Variant) As String
        Dim RetString As String
        Dim cell As Range
        first = True
        For Each cell In columnSerie
            If (selectColumn.Cells(cell.Row) = value) Then
                If (first) Then
                    RetString = CellR1C1AdressString(cell)
                    first = False
                Else
                    RetString = RetString & "," & CellR1C1AdressString(cell)
                End If
            End If
        Next cell
        SelectDataSeriesFromCategory = Left(RetString, Len(RetString))
    End Function
     
    Private Function CellR1C1AdressString(cell As Range) As String
        CellR1C1AdressString = cell.Parent.Name & "R" & cell.Row & "C" & cell.Column
    End Function
    A noter si j'utilise la fonction dans une cellule, le probleme ne se pose pas.
    J'aimerai trouver un autre Work around que celui d'utiliser une cellule pour evaluer la fonction (je n'ai pas encore pleinement tester ceci d'ailleurs).

    Quelqu'un a t-il déja rencontre ce type de probleme et si oui, existe-t-il une solution ?

    En passant, ce sont les premieres lignes de code que j'ecris en VBA pour XL... Pas joyeux...

  2. #2
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 10
    Par défaut En utilisant la fonction Join, cela ne marche pas non plus.
    Voila un autre essais... En passant par un array de String et en les concaténant avec la fonction Join. Cela ne fonctionne pas non plus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Function SelectDataSeriesFromCategory(columnSerie As Range, selectColumn As Range, value As Variant) As String
        Dim RetString() As String
        Dim cell As Range
        i = 1
        For Each cell In columnSerie
            If (selectColumn.Cells(cell.Row) = value) Then
                ReDim Preserve RetString(1 To i) As String
                RetString(i) = CellR1C1AdressString(cell)
                i = i + 1
            End If
        Next cell
        Let SelectDataSeriesFromCategory = Join(RetString, ",")
    End Function

  3. #3
    Expert confirmé
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Par défaut
    est-il possible que tu ais de caractères nuls dans tes strings ?

  4. #4
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 10
    Par défaut
    Non, elles sont toutes calculés par la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function CellR1C1AdressString(cell As Range) As String
        CellR1C1AdressString = cell.Parent.Name & "R" & cell.Row & "C" & cell.Column
    End Function
    J'ai remplacé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function CellR1C1AdressString(cell As Range) As String
        CellR1C1AdressString = "Sheet1!R255C1"
    End Function
    et j'obtiens toujours la même erreur.

  5. #5
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 10
    Par défaut
    Bon, je crois avoir trouvé.

    Le débeugueur (Watch) tronque l'affichage de la chaine de caractère.
    Le problème était dans l'affectation du résultat de l'appel de la fonction vers :
    ActiveChart.SeriesCollection(1).XValues qui n'accepte pas lui de longue expression de définition de Range sous la forme d'une chaine.

    D'après mes premiers tests je devrais pouvoir lui affecter un array de valeurs plutôt que la definition du Range.

  6. #6
    Membre émérite
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Par défaut
    Bonjour,

    Juste une question : dans quel but définis-tu cet ensemble de cellules ?

    +

    Théo

  7. #7
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 10
    Par défaut
    Pour tracer un graphe XYScatter pour montrer la distribution géographique (en coordonnées x, y) d'un ensemble de membre de sous catégorie d'une population.

    Je souhaite visualiser chaque membre par un point en aasociant une représentation graphique unique pour chaque membre d'une catégorie.

    Pour cela j'ajoute sur le diagramme une série par catégorie. La fonction que je cherche a écrire devait me retourner les adresses des cellules pour chacune des catégories.

    Les données sont sous la forme :
    X | Y | Catégorie

    J'ai plusieurs centaines d'éléments dans la population totale.

Discussions similaires

  1. Bug dans une ligne de code VBA
    Par orlacit dans le forum VBA Access
    Réponses: 5
    Dernier message: 08/11/2007, 15h25
  2. [VBA-Excel] Bug dans Import de boite de dialogue incompréhensible
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/07/2007, 17h15
  3. [Vba-E]Bug dans mon code
    Par antoinelavigne dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 19/06/2006, 14h55
  4. [VBA-E] guillements dans une variable string
    Par repié dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 10/03/2006, 13h42
  5. [VBA] Un caractère dans un string
    Par Neilos dans le forum Access
    Réponses: 5
    Dernier message: 23/06/2005, 14h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo