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 :

Boucle VBA por comparaison entre colonnes [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Juillet 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Juillet 2018
    Messages : 5
    Par défaut Boucle VBA por comparaison entre colonnes
    Bonjour,

    Voilà quelques semaines que je me creuse la tête et que je parcours les forum mais j'ai beaucoup de difficultés sur une programmation qui me fait perdre du temps sur ma mission.
    En effet,
    J'ai un fichier excel qui rassemble des données extraites de deux "logiciels".
    - fichierA (feuil1) avec une colonne A avec les numéros de commande et une colonne B avec une référence
    - fichierB (feuil2) avec une colonne A avec les numéros de commande et une colonne B avec une référence
    (Les numéros de commandes peuvent être de différentes formes (avec tirets, lettres). Et les références par exemple il en existe 10 qui peuvent s'appliquer FRxxx.
    Le fichier A comporte plus de données que le fichier B).

    Déjà j'aurais voulu voir apparaitre dans la feuille "comparaison" en colonne A les numéros de commandes de mon fichier A qu'on retrouve également dans le fichier B uniquement.
    Puis, chaque commande est soumise à une "référence", et je voudrai faire apparaitre (à coté des données identiques) en colonne B feuille comparaison:
    si la référence est la même: OK (en vert)
    si la référence est différente: Problème (en rouge)

    dans mon exemple fichier ci joint, par exemple:
    La commande numéro 001-002 se retrouve sur les deux fichier A et B, donc je veux la voir apparaitre dans la feuille comparaison. cependant la référence est différente donc je veux voir à coté "Probleme".

    (Le fichier comporte 40 000 entrées, avec déjà plusieurs programmes que j'ai fait pour réunir toutes ces données ensemble, le but étant de trouver les problèmes de commande mal référencées). Je précise également que je débute sur VBA (3 semaines max) et que j'ai pas forcement la logique VBA.. Ce n'est pas mon domaine mais je dois y arriver pour traiter mon sujet. L'exemple permet de bien comprendre le problème, impossible pour moi de joindre quelque chose de plus réel, ce sont des données confidentielles.

    Si vous pourriez m'aider...
    je vous remercie par avance,

    AR
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Bonjour,

    Déjà j'aurais voulu voir apparaitre dans la feuille "comparaison" en colonne A les numéros de commandes de mon fichier A qu'on retrouve également dans le fichier B uniquement.
    Je te conseille l'utilisation des filtres avancés: https://philippetulliez.developpez.c...dvancedfilter/

    Puis, chaque commande est soumise à une "référence", et je voudrai faire apparaitre (à coté des données identiques) en colonne B feuille comparaison:
    si la référence est la même: OK (en vert)
    si la référence est différente: Problème (en rouge)
    Via une MFC par formule: =RECHERCHEV(A2;Feuil2!A:B;2;0)=B2Avec en A tes numéros de commande et en B tes référence

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2018
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 21
    Par défaut
    Bonjour,

    Sinon si tu veux vraiment le faire par VBA, moi j’utilise les collections quand il faut comparer des listes.

    Je te mets mon 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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    Option Explicit
    Option Base 1
     
    Sub Comparaison()
     
    'Variables
     
        'Compteurs
        Dim i As Double
     
        'Adresse
        Dim LastRowA As Double
        Dim LastRowB As Double
        Dim RowCompare As Double
        Dim LastRowCompare As Double
     
        'Tableaux
        Dim ArrayA As Variant
        Dim ArrayB As Variant
        Dim ArrayCompare As Variant
     
        'Collections
        Dim CollectA As New Collection
        Dim CollectB As New Collection
        Dim CollectCompare As New Collection
        'Divers
        Dim Var As String
     
    'Chargement des Données des feuilles "FichierA" et "FichierB"
     
        LastRowA = Sheets("FichierA").Cells(1, 1).End(xlDown).Row
        LastRowB = Sheets("FichierB").Cells(1, 1).End(xlDown).Row
        ArrayA = Sheets("FichierA").Range(Sheets("FichierA").Cells(1, 1), Sheets("FichierA").Cells(LastRowA, 2))
        ArrayB = Sheets("FichierB").Range(Sheets("FichierB").Cells(1, 1), Sheets("FichierB").Cells(LastRowB, 2))
     
    'Charge les Numéros de commande dans les collections
     
        'i commence à 2 si tu as tes en-têtes (N°cde,Références) sinon met le à 1
     
        'Fichier A
        For i = 2 To LastRowA
            CollectA.Add Item:=ArrayA(i, 1), Key:=CStr(ArrayA(i, 1))
        Next i
     
        'Fichier B
        For i = 2 To LastRowB
            CollectB.Add Item:=ArrayB(i, 1), Key:=CStr(ArrayB(i, 1))
        Next i
     
    'Isole les Données du Fichier A qui sont identiques au Fichier B
     
        ReDim ArrayCompare(LastRowA, 2)
        RowCompare = 1
        On Error Resume Next
        For i = 1 To LastRowA
            Var = ""
            Var = CollectB.Item(CStr(CollectA.Item(i)))
            If Var <> "" Then
                ArrayCompare(RowCompare, 1) = CollectA.Item(i)
                RowCompare = RowCompare + 1
            End If
        Next i
        On Error GoTo 0
     
        LastRowCompare = RowCompare - 1
     
    'Charge les Références dans les collections
     
        Set CollectA = New Collection
        Set CollectB = New Collection
     
        'Fichier A
        For i = 2 To LastRowA
            CollectA.Add Item:=ArrayA(i, 2), Key:=CStr(ArrayA(i, 1))
        Next i
     
        'Fichier B
        For i = 2 To LastRowB
            CollectB.Add Item:=ArrayB(i, 2), Key:=CStr(ArrayB(i, 1))
        Next i
     
        'Données Identiques des Fichier A et B
        For i = 1 To LastRowCompare
            CollectCompare.Add Item:=ArrayCompare(i, 1), Key:=CStr(ArrayCompare(i, 1))
        Next i
     
    'Analyse des Références
     
        For i = 1 To LastRowCompare
            If CollectA.Item(CStr(CollectCompare(i))) = CollectB.Item(CStr(CollectCompare(i))) Then
                ArrayCompare(i, 2) = "OK"
            Else
                ArrayCompare(i, 2) = "PROBLEME"
            End If
        Next i
     
    'Ecriture de la comparaison sur la feuille "Comparaison
     
        Sheets("Comparaison").Range(Sheets("Comparaison").Cells(2, 1), Sheets("Comparaison").Cells(LastRowCompare + 1, 2)) = ArrayCompare
     
    'Met de la couleur
     
        For i = 2 To LastRowCompare + 1
            If Sheets("Comparaison").Cells(i, 2) = "PROBLEME" Then
                Sheets("Comparaison").Cells(i, 2).Interior.Color = 255
            ElseIf Sheets("Comparaison").Cells(i, 2) = "OK" Then
                Sheets("Comparaison").Cells(i, 2).Interior.Color = 5287936
            End If
        Next i
     
    End Sub


    Concernant la dernière partie pour les couleurs, si tu as beaucoup de données cela risque de prendre beaucoup de temps car la mise en forme et VBA ce n’est pas le top 😊, du coup je te conseille de mettre des mises en forme conditionnelles directement sur ta feuille « Comparaison ».

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Citation Envoyé par Shooter422 Voir le message
    Je te mets mon code (désolé je suis nouveau je ne sais pas comment l’insérer dans un cadre déroulant) :
    Il faut utiliser les balises code (bouton #)
    N'hésite pas à éditer ton post c'est assez illisible un gros pavé sans balise.

    j’utilise les collections quand il faut comparer des listes.
    Le filtre avancé à l'avantage de se passer des boucles, ce qui peux être un gain de temps considérable si tes listes sont longues.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2018
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 21
    Par défaut
    Citation Envoyé par halaster08 Voir le message
    Il faut utiliser les balises code (bouton #)
    N'hésite pas à éditer ton post c'est assez illisible un gros pavé sans balise.
    Oui effectivement, c'est mieux comme ça merci

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Juillet 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Juillet 2018
    Messages : 5
    Par défaut
    Concernant les fonctions oui ca me semble compliqué avec plus de 40 000 lignes de données!
    Super, je regarde tout ça dans l'après-midi et merci pour vos conseils. Je vous remercie !

    AR

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

Discussions similaires

  1. [VBA-E]Problème de comparaison entre plusieurs colonnes
    Par JeanMikael dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 09/07/2007, 17h29
  2. [VBA EXCEL] Comparaison d'entête de colonne
    Par Keitarokun dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 26/06/2007, 16h53
  3. Macro VBA Excel : Comparaison des deux 1ères colonnes de 2 fichiers Excel
    Par techneric dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/01/2007, 10h00
  4. VBA-E comparaison colonnes
    Par bernard38 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 12/10/2006, 11h18
  5. [VBA-E] PROBLEME de recherche entre colonnes
    Par july92 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/02/2006, 09h35

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