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 deux fichiers excel à l'aide d'une macro VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 17
    Par défaut Comparer deux fichiers excel à l'aide d'une macro VBA
    Bonjour,

    Étant novice sur le langage VBA, j'aimerais savoir si quelqu'un parmi vous pourrait m'aider à mettre en place une macro qui me permettrait de comparer deux colonnes sur deux fichiers Excel distincts et compléter d'autres colonnes sur le fichier de destination, quand la condition est vérifiée ( quand les valeurs des cellules comparées sont identiques ) .

    Par avance merci de votre aide !

  2. #2
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,
    tu est à quelle étape de ton problème ?
    quelle est la difficulté par étape ?

    a) liaison des fichier
    b) comparaison des colonnes

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 17
    Par défaut
    Bonjour,

    Je suis vraiment à la phase initiale.

    En résumé, j'aimerais comparer les valeurs de la colonne B du fichier A avec les valeurs de la colonne F du fichier B, si les valeurs sont identiques, il faudrait remplir d'autres colonnes sur le fichier B en se basant sur le fichier A.

    Merci pour ton aide !

    Nom : Capture fichier A.PNG
Affichages : 241
Taille : 176,7 Ko

    Nom : Capture fichier B.PNG
Affichages : 239
Taille : 171,6 Ko

  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
    13 166
    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 : 13 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si j'ai bien compris les valeurs à comparer dans la colonne F du classeur B sont les 4 derniers caractères de la colonne B du classeur A.
    Pour faire ce genre de chose, j'utilise la fonction EQUIV (MATCH pour la version anglaise et en VBA)

    A lire éventuellement ces deux billets sur ce sujet
    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 extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,
    voila un début de liaison entre 2 classeur OUVERT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private LigneNB_A As Double
    Private LigneNB_B As Double
     
    Private Sub CommandButton1_Click()
        '----- nombre de lignes des colonnes
        'classeur_A (celui la)
        LigneNB_A = Workbooks("Classeur_A.xlsm").Sheets("Feuil1").Range("B2").End(xlDown).Row
        'classeur_B (l'autre)
        LigneNB_B = Workbooks("Classeur_B.xlsm").Sheets("Feuil1").Range("F2").End(xlDown).Row
        MsgBox LigneNB_A & " et " & LigneNB_B
    End Sub
    ce bout de code donne le nombre de ligne des 2 zones jaunes
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 17
    Par défaut
    Bonjour @mjpmjp,

    Merci pour ta réponse.

    En effet, je souhaiterais comparer deux fichiers Excel A et B et effectuer quelques manips quand la condition est vérifiée ou pas :

    1 - On compare la colonne B du fichier A avec la colonne F du fichier B, si les cellules sont identiques :

    --> On remplit les colonnes vertes du fichier B avec les données correspondantes, contenues dans les colonnes vertes du fichier A.

    Autre manip supplémentaire :

    - Si on s’aperçoit qu'il existe des données sur la colonne B du fichier A mais pas dans la colonne F du fichier B, on ajoute la ligne avec les données correspondantes contenues dans les colonnes vertes du fichier A.

    Voici le lien vers les fichiers en question : https://www.cjoint.com/c/LBpkdSUlJrz

  7. #7
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,
    on vat procéder par petit bout

    la colonne F de B ne contient qu'une partie (la partie droite 4) de la colonne B de A

    oups ... il y a des trous dans les colonnes !!!

    du coup , on change de méthode :
    pour avoir le nombre de ligne exact (avec les trous) on part du bas de la feuille !!!

    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
     
    Private LigneNB_A As Double 'nombre de ligne max du fichier A colonne B
    Private LigneNB_B As Double 'nombre de ligne max du fichier B colonne F
    Private LigneExcelNB As Double 'nombre de ligne totale de la feuille excel sur un PC (65635 à 1048576)
    Private DataFichAColB As String 'contenu de la colonne B du fichier A
     
    Public Sub Cmd1()
        '----- nombre de lignes d'une feuille Excel
        'classeur_A (celui la)
        LigneExcelNB = Workbooks("Classeur_A.xlsm").Sheets("Feuil1").Range("BZ1").End(xlDown).Row
        '----- nombre de lignes des colonnes
        'classeur_A (celui la)
        LigneNB_A = Workbooks("Classeur_A.xlsm").Sheets("Feuil1").Range("B" & LigneExcelNB).End(xlUp).Row
        'classeur_B (l'autre)
        LigneNB_B = Workbooks("Classeur_B.xlsm").Sheets("Feuil1").Range("F" & LigneExcelNB).End(xlUp).Row
        '----- boucle du fichier A colonne B
        For n = 2 To 2 'LigneNB_A
            DataFichAColB = Right(Workbooks("Classeur_A.xlsm").Sheets("Feuil1").Range("B" & n).Value, 4)
        MsgBox DataFichAColB
        Next n
    End Sub
    et on garde que la partie droite de la colonne B

    Nom : Capture d’écran 2022-02-15 143615.png
Affichages : 221
Taille : 17,3 Ko

    pour le moment , voila le code principal avec la comparaison et les emplacement (libre) pour le traitement du résultat

    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
     
    Private LigneNB_A As Double 'nombre de ligne max du fichier A colonne B
    Private LigneNB_B As Double 'nombre de ligne max du fichier B colonne F
    Private LigneExcelNB As Double 'nombre de ligne totale de la feuille excel sur un PC (65635 à 1048576)
    Private DataFichAColB As String 'contenu de la colonne B du fichier A
    Private DataFichBColF As String 'contenu de la colonne F du fichier B
    Private DataExiste As Boolean 'si false ajouter le data
     
    Public Sub Cmd1()
        '----- nombre de lignes d'une feuille Excel
        'classeur_A (celui la)
        LigneExcelNB = Workbooks("Classeur_A.xlsm").Sheets("Feuil1").Range("BZ1").End(xlDown).Row
        '----- nombre de lignes des colonnes
        'classeur_A (celui la)
        LigneNB_A = Workbooks("Classeur_A.xlsm").Sheets("Feuil1").Range("B" & LigneExcelNB).End(xlUp).Row
        'classeur_B (l'autre)
        LigneNB_B = Workbooks("Classeur_B.xlsm").Sheets("Feuil1").Range("F" & LigneExcelNB).End(xlUp).Row
        '----- boucle du fichier A colonne B
        For n = 2 To LigneNB_A
            'au début de la recherche le data n'a pas été trouvé
            DataExiste = False
            'lecture de la cellule
            DataFichAColB = Workbooks("Classeur_A.xlsm").Sheets("Feuil1").Range("B" & n).Value
            'un trou ?
            If DataFichAColB <> "" Then
                DataFichAColB = Right(Workbooks("Classeur_A.xlsm").Sheets("Feuil1").Range("B" & n).Value, 4)
                '----- boucle du fichier B colonne F
                For i = 2 To LigneNB_B
                    DataFichBColF = Workbooks("Classeur_B.xlsm").Sheets("Feuil1").Range("F" & i).Value
                    'un trou ?
                    If DataFichBColF <> "" Then
                        If DataFichAColB = DataFichBColF Then
                            'le data a été trouvé
                            DataExiste = True
                            'completer avec colonne
                        End If
                    End If
                Next i
            End If
            'le data a t il été trouvé
            If DataExiste = False Then
                'ajouter le data dans le fichier B
            End If
        Next n
    End Sub
    à plus tard
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

Discussions similaires

  1. "Sauvegarder sous" un fichier Excel à l'aide d'une macro
    Par toitoine-II dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 25/01/2019, 14h10
  2. [XL-2016] VBA-comparer deux fichiers excel sur une colonne et ajouter des lignes d'un fichier vers l'autre
    Par axel.loiacono dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/05/2017, 16h26
  3. [XL-2010] Sauvegarder un fichier excel à l'aide d'une macro en xlsx
    Par Gorillo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/07/2015, 17h01
  4. Comparer deux fichiers Excel
    Par ptalal dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 17/03/2009, 16h31
  5. Comparer deux fichiers pbl à l'aide de Clearcase
    Par pedromario dans le forum Powerbuilder
    Réponses: 0
    Dernier message: 10/09/2007, 17h36

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