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


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 98
    Points : 48
    Points
    48
    Par défaut Comparaison de deux tableaux
    Bonjour,
    Je cherche à faire la comparaison de deux feuilles dans excel d'un même classeur

    Dans un premier temps je veux récupérer les lignes de ma feuille 1 (bdd) donc le num de commande est le même que celui de ma feuille 2 (copie-save) et les copier dans une troisième feuille (sortie-reliquat) (Sa c'est ok j'y suis arrivée)
    Ensuite je veux récupérer les ligne de ma feuille 1 (bdd) qui ne son pas dans ma feuille 2 (copie-save) et les copier dans ma feuille 3 (sortie-reliquat), c'est la que j'arrive pas a faire cette étape

    Pour faire ma comparaison je me base sur la colonne B de ma feuille 1 (bdd) et sur la colonne C de ma feuille 2 (Copie-save) qui est le num de commande

    Mon premier For me sert juste a copier les entêtes pour la mise en page
    Mon 2ème For me sert a copier les lignes qui sont dans mes deux feuille 1 et 2
    Mon 3 ème For ne marche pas, il ne me copie pas les lignes qui sont dans la feuille 1 et qui ne sont pas dans la feuille 2

    en faite pour expliquer le but de mon tableau, j'extrait de la base de données sur laquelle je travaille toutes les commandes client qui sont en reliquat. tous les jours on doit faire un suivit des ces commandes. Voir celles qui sont toujours en reliquat, et ajouter les nouvelles. C'est l'ajout de ces nouvelle commandes qui se trouve dans ma feuille 1 (bdd) et toujours en fin de feuille1, dans ma feuille 2 (Copie-save) que je n'arrive pas a faire

    quelqu'un aurait il une solution svp?

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    Sub comparaison()
    'comparaison entre la feuille copie_save et la feuille bdd
    Dim wsh1 As Worksheet, wsh2 As Worksheet, wsh3 As Worksheet
    Dim ligne As Long, LastLig1 As Long, LastLig3 As Long, LastLig2 As Long, result As Long
    Dim C As Range
    Dim i As Integer, j As Integer
     
     
    Set wsh1 = Worksheets("bdd")
    Set wsh2 = Worksheets("Copie-save")
    Set wsh3 = Worksheets("sortie-reliquat")
    LastLig1 = wsh1.Cells(Rows.Count, "A").End(xlUp).Row 'calclul le nombre de ligne max de la feuille bdd
    LastLig2 = wsh2.Cells(Rows.Count, "A").End(xlUp).Row 'calclul le nombre de ligne max de la feuille copie-save
    LastLig3 = wsh3.Cells(Rows.Count, "A").End(xlUp).Row 'calclul le nombre de ligne max de la feuille sortie-reliquat
     
    result = Application.WorksheetFunction.Max(LastLig1, LastLig2)
     
    For i = 0 To 2 Step 1 'copie des trois premieres ligne d'en-tête
     
        wsh2.Rows(i + 1).Copy _
            Destination:=wsh3.Rows(LastLig3 + i)
    Next i
     
    For ligne = 4 To result Step 1
        Set C = wsh1.Columns("B").Find(wsh2.Cells(ligne, "C").Value, LookIn:=xlValues, lookat:=xlWhole)
     
          If Not C Is Nothing Then 'si ref commande trouvé
            LastLig3 = wsh3.Cells(Rows.Count, "A").End(xlUp).Row 'calclul le nombre de ligne max de la feuille sortie-reliquat
            wsh2.Rows(ligne).Copy _
                Destination:=wsh3.Rows(LastLig3 + 1)
            LastLig3 = 0
          End If
     
     
     
    Next ligne
    ligne = 0
     
    For ligne = 2 To result Step 1
        For j = 4 To result Step 1
            Set C = wsh1.Cells(ligne, "B").Find(wsh2.Cells(j, "C").Value, LookIn:=xlValues, lookat:=xlWhole)
            'lig = ligne
            If C Is Nothing Then  'si pas trouvé ref commande
            MsgBox (j)
                LastLig3 = wsh3.Cells(Rows.Count, "A").End(xlUp).Row 'calclul le nombre de ligne max de la feuille sortie-reliquat
                wsh1.Rows(ligne).Copy _
                    Destination:=wsh3.Rows(LastLig3 + 1)
                LastLig3 = 0
            End If
        Next j
    Next ligne
     
    ligne = 0
     
     
    Set wsh1 = Nothing
    Set wsh2 = Nothing
    Set wsh3 = Nothing
    Set C = Nothing
     
    End Sub
    Je vous joint les trois feuilles en pièce jointe

    ++
    Elwy
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 814
    Points : 28 717
    Points
    28 717
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ce que tu souhaites faire, c'est exporter les lignes d'une liste de données qui répondent à un ou plusieurs critères.
    Que les listes que tu compares soient sur la même feuille, le même classeur importe peu.

    La méthode la plus simple à mettre en place en lieu et place de boucle est l'utilisation de la méthode AdvancedFilter de l'objet Range (filtre avancé d'excel)
    A lire Les filtres avancés ou élaborés dans Excel
    Ensuite il faut définir les critères. La lecture de ce billet Comment comparer (matcher) des données dans Excel

    Finalement la lecture de ce billet Exporter les données comparées (« Matchées ») t'apportera la réponse en mode manuel. Il te suffira de la traduite en VBA avec la méthode AdvancedFilter
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre du Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 98
    Points : 48
    Points
    48
    Par défaut
    Mes deux tableaux n'ont pas les mêmes noms d'en-tête de colonnes. Sa va pas poser problème?

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 814
    Points : 28 717
    Points
    28 717
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Effectivement les étiquettes à comparer et à exporter doivent avoir la même orthographe mais rien ne t'empêche de les renommer le temps du traitement. Ce sera nettement moins lourd que d'utiliser une ou plusieurs boucles.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre du Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 98
    Points : 48
    Points
    48
    Par défaut
    J'ai commencé a lire les liens donnés. Mais je pense que cette méthode ne marchera pas avec mes tableaux. Je cherche a faire une comparaison entre deux tableaux grâce à une colonne (se trouvant dans les deux tableaux) contenant des valeurs Num commande.

    Avec la méthode des filtres avancés je n'ai aucun critères sur lesquels me baser. je cherche juste a savoir:

    1) si le num de commande de la feuille 1 est dans la feuille 2, si ou copier dans la feuille 3
    2) si le num de commande de la feuille 1 n'est pas dans la feuille 2, si oui copier dans la feuille 3

    ce qui me laisse le cas des num de commande qui ne sont pas dans la feuille 1 mais dans la feuille 2, ceux la j'en fait rien

    Je ne vois vraiment pas comment je peux faire sa avec les filtres avancés.

  6. #6
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonjour,

    par exemple avec la fonction de feuille de calculs   EQUIV   combinée à   ESTNUM  
    juste en testant dans une colonne temporaire …

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 814
    Points : 28 717
    Points
    28 717
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai commencé a lire les liens donnés. Mais je pense que cette méthode ne marchera pas avec mes tableaux. Je cherche a faire une comparaison entre deux tableaux grâce à une colonne (se trouvant dans les deux tableaux) contenant des valeurs Num commande.
    Il me semble pourtant que c'est exactement le cas que j'ai illustré dans mon billet Exporter les données comparées (« Matchées ») et pour comprendre le critère il faut avoir lu le billet qui précède cet article Comment comparer (matcher) des données dans Excel
    Les deux cas sont commentés.
    1. Les mêmes références sont présentes dans les deux tableaux
    2. les références ne sont pas présentes dans l'autre tableau
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Membre du Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 98
    Points : 48
    Points
    48
    Par défaut
    Merci pour ta piste de recherche mais j'ai pas réussi a voir comment faire avec.

    Du coup apres m'être fait des noeuds au cerveau j'ai trouvé comment faire autrement et tout marche bien

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    Sub conparaison()
    'comparaison entre la feuille copie_save et la feuille bdd
    Dim wsh1 As Worksheet, wsh2 As Worksheet, wsh3 As Worksheet
    Dim ligne As Long, LastLig1 As Long, LastLig3 As Long, LastLig2 As Long, lig As Long
    Dim C As Range, V As Range
    Dim plage As Range, plage2 As Range, cellule As Range, cellule2 As Range
    Dim i As Integer, j As Integer
     
     
    Set wsh1 = Worksheets("bdd")
    Set wsh2 = Worksheets("Copie-save")
    Set wsh3 = Worksheets("sortie-reliquat")
     
     
    LastLig1 = wsh1.Cells(Rows.Count, "A").End(xlUp).Row 'calclul le nombre de ligne max de la feuille bdd
    LastLig2 = wsh2.Cells(Rows.Count, "A").End(xlUp).Row 'calclul le nombre de ligne max de la feuille copie-save
    LastLig3 = wsh3.Cells(Rows.Count, "A").End(xlUp).Row 'calclul le nombre de ligne max de la feuille sortie-reliquat
     
     
    For i = 0 To 2 Step 1 'copie des trois premieres ligne d'en-tête
     
        wsh2.Rows(i + 1).Copy _
            Destination:=wsh3.Rows(LastLig3 + i)
    Next i
     
    Set plage = wsh1.Range("B2:B" & CStr(LastLig1))
     
    For ligne = 4 To LastLig2 Step 1
        Set cellule = wsh2.Range("C" & ligne)
        Set C = plage.Find(cellule.Value, LookIn:=xlValues, lookat:=xlWhole)
     
          If Not C Is Nothing Then 'si trouvé
            LastLig3 = wsh3.Cells(Rows.Count, "A").End(xlUp).Row 'calclul le nombre de ligne max de la feuille sortie-reliquat
            wsh2.Rows(ligne).Copy _
                Destination:=wsh3.Rows(LastLig3 + 1)
            LastLig3 = 0
          Else 'si pas trouvé
            LastLig2 = wsh2.Cells(Rows.Count, "A").End(xlUp).Row 'calclul le nombre de ligne max de la feuille copie-save
            Set plage2 = wsh2.Range("C2:C" & CStr(LastLig2))
     
               For j = 2 To LastLig1 Step 1
                    Set cellule2 = wsh1.Range("B" & j)
                    Set V = plage2.Find(cellule2.Value, LookIn:=xlValues, lookat:=xlWhole)
                        If V Is Nothing Then
                             LastLig3 = wsh3.Cells(Rows.Count, "A").End(xlUp).Row 'calclul le nombre de ligne max de la feuille sortie-reliquat
                             wsh1.Rows(j).Copy _
                                Destination:=wsh3.Rows(LastLig3 + 1)
                             LastLig3 = 0
                        End If
               Next j
     
          End If
    Next ligne
     
    Set wsh1 = Nothing
    Set wsh2 = Nothing
    Set wsh3 = Nothing
    Set C = Nothing
    Set V = Nothing
     
    End Sub

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. Comparaison de deux tableaux
    Par tibss dans le forum Excel
    Réponses: 1
    Dernier message: 06/05/2009, 21h30
  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