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 :

Comparaison de deux tableaux de string


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Comparaison de deux tableaux de string
    Bonjour,

    Je suis actuellement en train de développer un outils pour Excel permettant de mettre à jour automatique une liste de liens hypertexts en les comparant à une base de données existante.
    Arrive donc le moment où je dois comparer mes deux tableaux (attention, un tableau au sens array, pas en temps que feuille Excel) et pour le faire, j'utilise ce morceau de 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Private Sub ComparaisonTableau()
     
    Dim BdD() As String
    Dim TaC() As String
    Dim InString() As String
     
    Dim i As Integer
     
    'Définition de la taille des tableaux
     
    ReDim BdD(10)
    ReDim TaC(10)
    ReDim InString(10)
     
    'Définition du tableau post scan
     
    TaC(1) = "paul"
    TaC(2) = "dany"
    TaC(3) = "leandro"
    TaC(4) = "simon"
    TaC(5) = "hubert"
    TaC(6) = "roberto"
    TaC(7) = "baptiste"
     
    'definition du tableau de la base de donnés
     
    BdD(6) = "paul"
    BdD(1) = "leandro"
    BdD(2) = "baptiste"
    BdD(3) = "hubert"
    BdD(4) = "simon"
    BdD(5) = "dany"
     
    'boucle pour tester tous les membres du tableau postscan
    For i = 0 To UBound(TaC)
     
        InString = Filter(BdD, TaC(i), True)
     
        If (UBound(InString) <> 0) Then
            MsgBox ("Ceci n'existe pas dans la base de données : " & TaC(i))
            'Debug.Print InString(i)
        End If
     
     
     
    Next i
     
    End Sub
    Mais là, j'ai un souci. Quand je compile et je que fais tourner le code, je devrais n'avoir qu'une fenêtre qui s'ouvre avec écrit dedans "Ceci n'existe pas dans la base de données : roberto" or j'ai en plus 4 fenêtre qui s'ouvre en cascade (une avant le bon message et 3 après) avec juste écrit "Ceci n'existe pas dans la base de données :".

    J'ai essayé d'affiné la définition de la taille de mes tableaux, mais même avec TaC comprennant que 7 variables, j'ai une fenêtre qui s'ouvre quand même avant la bonne ( les 3 après ne s'affiche plus, ce qui est logique). C'est n'est pas un réel problème en soit, sauf que je vais avoir un très grand nombre de variables pour mes tableaux TaC et BdD, il n'est donc pas envisageable d'avoir à appuyer une bonne centaine de fois sur Ok à chaque fois qu'on lance la routine.
    Voilà donc ma première question, quelqu'un a-t-il une solution pour régler ce problème.

    Pour la deuxième question, pense avoir la réponse mais j'espère me tromper, est-il possible de garder mes tableaux en dynamique (donc sans avoir à initialiser le nombre de variables à l'intérieur) car je vais avoir un grand nombre de données, et ce nombres est variable ?

    Merci d'avance pour l'aider qu'il est possible d'apporter à un novice du VBA comme moi.

    Cordialement,
    Truc machin chose

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Points : 251
    Points
    251
    Par défaut
    La première qui s'affiche, ça doit être parce que tes tableaux sont indicés à partir de 0.
    C'est d'ailleurs implicite dans ta boucle puisque tu la fais partir de 'i=0' et qu'apparemment ça ne lève pas d'exception du style "l'indice n'appartient pas à la sélection".

    Afin de ne pas se faire avoir, le mieux est de se fixer une règle dès le départ. En haut du module (avant la déclaration de la procédure):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Option Base 0    'indice à partir de 0
    'ou
    Option Base 1    'indice à partir de 1
    Tu peux également éviter les ambigüités dans le redimensionnement en précisant les bornes:


  3. #3
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 816
    Points : 2 954
    Points
    2 954
    Billets dans le blog
    10
    Par défaut
    Bonjour,
    Voyons déjà les deux premiers points...
    Pour tes 4 msgbox vides, tu as bien compris que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ReDim TaC(10)
    '.......
    TaC(1) = "paul"
    TaC(2) = "dany"
    TaC(3) = "leandro"
    TaC(4) = "simon"
    TaC(5) = "hubert"
    TaC(6) = "roberto"
    TaC(7) = "baptiste"
    For i = 0 To UBound(TaC)
    TaC(i) pour i = 0 ou 8 ou 9 ou 10 va te donner un message puisque ces données (vides) ne se trouvent effectivement pas dans BdD...

    1ère question, tu voudrais voir s'afficher dans le MsgBox, la liste des éléments ne correspondants pas entre tes 2 tableaux, mais pas les éléments un par un.
    Pour cela, tu peux passer par une variable de type String intermédiaire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim Liste As String
    Liste = ""
    For i = 0 To UBound(TaC)
        InString = Filter(BdD, TaC(i), True)
        If (UBound(InString) <> 0) Then
            Liste = TaC(i) & " ; " & Liste
        End If 
    Next i
    MsgBox ("Ceci n'existe pas dans la base de données : " & Liste)
    2ème question, bien sur que tes variables tableaux peuvent rester dynamiques, voir du côté des instructions reDim et Preserve lors de leur remplissage...
    Un petit tuto???
    Cordialement,
    Franck

  4. #4
    Candidat au Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Remerciement
    Bonjour,

    Je tiens à vous remercier tous les deux, Sclarkone et Pijaku Pour l'aide que vous m'avez apporté et surtout pour la vitesse de la réponse. Beau Boulot.
    Merci aussi à Pierre Fauconnier d'avoir corrigé mon oubli de balise.

    Encore une fois merci à vous tous. je n'espère pas à bientôt, ça impliquerait que j'ai encore un souci . Ce fut un plaisir.

    Truc M-C

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. PL/SQL COMPARAISON DE DEUX TABLEAUX APRES BULK
    Par mimi_été dans le forum PL/SQL
    Réponses: 5
    Dernier message: 30/06/2009, 12h14
  2. Comparer deux tableaux de String
    Par ziad.shady dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 09/09/2008, 09h44
  3. Comparaison de deux tableaux en VB6
    Par taille50 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 10/08/2007, 10h28
  4. Comparaison de deux tableaux
    Par solorac dans le forum Excel
    Réponses: 7
    Dernier message: 03/08/2007, 08h49
  5. Comparaison de deux tableaux
    Par siaoly dans le forum Langage
    Réponses: 5
    Dernier message: 27/06/2006, 19h40

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