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 :

vba comparaison 2 fichiers excel


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
    Janvier 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 41
    Par défaut vba comparaison 2 fichiers excel
    Bonjour à tous, voilà on a 2 fichiers l'un s'appelant test et l'autre test2, mon fichier test est mis a jour régulièrement mais il a besoin d'une donnée particulière dans le fichier test2.


    contenu du fichier test.xls :



    contenu du fichier test2.xls :



    On peut identifier les utilisateur de façon unique avec leur "id" présent dans chacun des fichiers, on voudrais dans le cas où on parle du même utilisateur ajouter les données de la colonne "code" de test2 aux utilisateurs correspondants dans test.
    A savoir que ce sont bien sûr 2 fichiers excel et que je dois répéter plusieurs fois cette action car en réalité il y a des milliers d'utilisateurs.


    Voilà un code fonctionnel pour cet exemple mais j'obtiens l'erreur "dépassement de capacité" pour les plus gros fichiers :

    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
     
    Sub comparaison()
    'Evite de voir les opérations intermédiaire sur les fichiers
    Application.ScreenUpdating = False
    'déclarations des variables
    Dim i As Integer
    Dim j As Integer
    Dim Trouve As Integer
        i = 2 'initialisation du compteur à 2 car la ligne 1 contient l'en-tête de chaque donnée
        While (Workbooks("test.xlsm" ).Sheets(1).Cells(i, 2).Value <> "" )  ' tant que dans le fichier test la cellule en (ligne i, colonne B) n'est pas vide
            j = 2
            Trouve = 0 'cette variable sert d'indicateur si c'est à 0 on a rien trouvé ou 1 on a trouvé la cellule correspondante
     
     
            While (Workbooks("test2.xlsm" ).Sheets(1).Cells(j, 3).Value <> Null) & (Trouve = 0)
     
                'si la cellule du fichier test2 correspond à celle de test alors
                If (Workbooks("test2.xlsm" ).Sheets(1).Cells(j, 3).Value = _
                Workbooks("test.xlsm" ).Sheets(1).Cells(i, 2).Value) Then
                Trouve = 1
                'On copie le code à la ligne actuelle dans une nouvelle colonne
                   Workbooks("test.xlsm" ).Sheets(1).Cells(i, 3).Value = _
                    Workbooks("test2.xlsm" ).Sheets(1).Cells(j, 2).Value
                'sinon on passe à la ligne suivante de icatfiltre
                Else
     
                j = j + 1
     
                End If
            Wend
     
            i = i + 1
        Wend
    On m'a conseillé d'utiliser la méthode Find mais j'avoue ne pas savoir comment l'adapter à ce code.
    A savoir que la version d'office que j'utilise est la 2007.

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    bonjour,

    gros fichier ? combien de ligne ?

  3. #3
    Expert éminent
    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
    Par défaut

    Je lui ai effectivement conseillé la méthode Find, aussi de vérifier les types des variables ou mettre en commentaire les lignes des Dim
    mais surtout l'inutilité d'un code VBA car avec la colonne Id en première dans le fichier test2,
    une simple formule RECHERCHEV dans une cellule du fichier test s'acquitte de la récupération de la donnée !


  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    ... ou mettre en commentaire les lignes des Dim...

    arf ... Vade rétro satanas .... il ne faut pas supprimer les Dim .. il faut déclarer toutes les variables !!! et rajouter en haut de toutes les pages de code la ligne :
    cela permet d'éviter grand nombre de bugs !!

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 41
    Par défaut
    Alors pour le nombre de lignes ce serait de 1300 lignes. J'aimerai pouvoir réutiliser le code car je devrais faire la même chose pour un autre fichier mais copier cette fois plusieurs champs au lieu d'un seul lors d'une correspondance de l'id des utilisateurs.
    Ensuite concernant le recherchev je crains que ce ne soit inutile car la/les personnes mettant à jour le fichier le copie sur le partage et donc écrase directement le fichier modifié ce qui voudrait dire qu'à chaque fois je devrais bouger la colonne id donc ce n'est pas la bonne solution :/

    Puis je viens de mettre en commentaire les dim et j'obtiens l'erreur "Erreur définit par l'application ou par l'objet".

    Enfin je ne sais pas pourquoi mais il me marque "incompatibilité de type" sur la deuxième boucle lorsque je met la double quote au lieu de Null:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    While (Workbooks("test2.xlsm" ).Sheets(1).Cells(j, 3).Value <> ""

  6. #6
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    tu as rajouté en haut de tes page de codes la ligne OBLIGATOIRE (surtout pour les débutants) :


  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 41
    Par défaut
    Oui j'ai bien mis Option Explicit, dans mon exemple ça fonctionne mais dans le fichier de 1300 lignes, j'obtient ce message : "dépassement de capacité".

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

Discussions similaires

  1. [VBA-E] Enregistrement fichier Excel
    Par mulanzia2003 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/08/2006, 09h55
  2. [VBA-E]ouvrir fichier excel + boite dialogue VBA
    Par dananounette dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/05/2006, 16h13
  3. [VBA-E]Création fichier EXCEL et détection cellule vide
    Par benoue dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 24/02/2006, 17h22
  4. [VBA]Envoyer un fichier excel avec OutLook
    Par Sunchaser dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/02/2006, 16h24
  5. [VBA]Lien entre fichiers excel : Update en VBA
    Par criocaps dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/01/2006, 09h07

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