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 :

Comparer 2 tableaux et ajouter une valeur si difference


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 123
    Par défaut Comparer 2 tableaux et ajouter une valeur si difference
    Bonjour,

    Je pensais qu'avec 2 boucles et 1 ou 2 conditions IF il me serait possible de résoudre ce problème, mais je n'y arrive pas. Je fais donc appel à votre aide.

    Ainsi, j'ai 2 tableaux d'une colonne, T1 et T2. Je voudrais que toute valeur de T2 ne figurant pas dans T1, soit ajoutée en bas de T1.

    Mes tatonnements m'ont amené à ce bout 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
    sub t1t2()
     
    Dim v_p As Range
    Dim v_p2 As Range
    Dim v_compteur2 As Integer
    Dim v_compteur As Integer
     
    Sheets("p2").Select
    Set v_p2 = Range("a1").CurrentRegion
     
    Sheets("p").Select
    Set v_p = Range("b2").CurrentRegion
     
    For v_compteur = 2 To v_p.Rows.Count
        For v_compteur2 = 2 To v_p2.Rows.Count
     
    If v_p2.Cells(v_compteur2, 1) = v_p.Cells(v_compteur, 1) Then
    Next
    'ici ça coince : j'ai un NEXT sans FOR ?
    'ensuite je ne sais pas quoi faire
     
    Else
     
    Next
     
    end sub
    ------------

    Suis-je sur la bonne voie ou utiliseriez vous une autre méthodee ?

    Merci

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    1)le currentregion designe un range contenant toutes les cellules non vide a proximité, tu ne dois pas l'utiliser pour trouver le derniere ligne. pour ceci, tu as un post dans" vos contributions" fait par ouskelnor qui resumes les differentes manieres d'y arriver ou bien tu tapes derniere ligne dans la recherche
    2)le chiffre 1 represente ta colonne, et la tu veux comparer une cellule de la colonne 1 sur une de la colonne 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If v_p2.Cells(v_compteur2, 1) = v_p.Cells(v_compteur, 1) Then
    
    3)next sans for parce que tu a placer le next au milieu de la boucle if
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for vcompteur = 1 to x
     for vcompteur2 = 2 to y
       if cellule (x,1) = cellule(y,2) then
       action
       end if
    next vcompteur2
    next vcompteur1

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Citation Envoyé par jerem7w Voir le message
    Suis-je sur la bonne voie ou utiliseriez vous une autre méthodee ?
    Bonjour, jerem7w,

    Je m'arrête en ce qui me concerne à cette simple question, sans préjudice du reste (la justesse de ton code) dont alsimbad t'a déjà dit l'essentiel.

    Tu es sur la bonne voie si tes 2 "tableaux" sont de petite taille.
    Si, par contre ils sont de grande taille, une telle méthode sera assez gourmande en temps, par rapport au traitement sur deux listboxes alimentées par les données de tes 2 tableaux et gérées (par utilisation de la fonction SendMessage de l'Api de Windows) par une seule boucle For ... to ... next et non par deux boucles imbriquées dont la seconde aura pour effet, à chaque tour de la première, de reprendre la totalité des articles de l'autre "tableau".
    Le gain de temps par cette deuxième méthode sera insignifiant sur des tableaux de petites tailles mais énorme (pouvant aller jusqu'à 400 fois moins) sur des tableaux de grande taille.
    C'est là ma réponse à la question que tu as posée et que j'ai reprise en citation.

    EDIT : tu peux même éviter l'utilisation de la fonction SendMessage en alimentant deux comboboxes au lieu de deux ListBoxes. ce sera un tout petit peux moins rapide qu'avec SendMessage, mais beaucoup plus rapide que deux boucles imbriquées. (valable - une autre fois - si tes deux "tableaux" sont de grande taille. Si non : cet effort-là n'est pas vraiment nécessaire).

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 123
    Par défaut
    serait-ce plus intelligent avec la fonction find...que je ne connais pas encore ?

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Citation Envoyé par jerem7w Voir le message
    serait-ce plus intelligent avec la fonction find...que je ne connais pas encore ?
    Je n'en ai pas fait l'essai, mais suis enclin à penser que ce serait plus rapide que deux boucles imbriquées... (Je suis à ce propos presque prêt à parier que la fonction Find D'Excel utilise la fonction SendMessage de l'Api de Windows ...... mais ce n'est que mon avis ...)

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

Discussions similaires

  1. [Tableaux] Tableau : ajouter une key+valeur a chaque ligne
    Par Joe Le Mort dans le forum Langage
    Réponses: 2
    Dernier message: 10/04/2007, 13h08
  2. Ajouter une valeur dans un listview
    Par aliwassem dans le forum Composants VCL
    Réponses: 1
    Dernier message: 25/01/2006, 22h15
  3. VBA : ajouter une valeur dans une liste déroulante
    Par remi59 dans le forum Access
    Réponses: 4
    Dernier message: 22/12/2005, 10h01
  4. ajouter une valeur dans une combobox
    Par decour dans le forum Access
    Réponses: 1
    Dernier message: 17/10/2005, 10h58
  5. Popup ajoutant une valeur a un champ
    Par kalan dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/09/2005, 15h39

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