Vba Comparaison 2 Fichiers Excel

Navigation

Inscrivez-vous gratuitementpour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  • Vous n'êtes pas encore inscrit sur Developpez.com ? Inscrivez-vous gratuitement !
  • Recherche avancée
  • Accueil
  • Forum
  • Logiciels
  • Microsoft Office
  • Excel
  • Macros et VBA Excel
  • vba comparaison 2 fichiers excel
+ Répondre à la discussion Macros et VBA Excel Discussion : vba comparaison 2 fichiers excel Sujet :

Macros et VBA Excel

  • Outils de la discussion
    • Afficher une version imprimable
    • S'abonner à cette discussion…
  • Affichage
    • Mode linéaire
    • Choisir le mode hybride
    • Choisir le mode arborescent
  1. 12/05/2013, 19h32 #1 Furil Furil est déconnecté Membre averti Homme Profil pro ÉtudiantInscrit enJanvier 2012Messages41Détails du profilInformations personnelles :Sexe : HommeLocalisation : FranceInformations professionnelles :Activité : ÉtudiantInformations forums :Inscription : Janvier 2012Messages : 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
    123456789101112131415161718192021222324252627282930313233 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.
    Répondre avec citation Répondre avec citation 0 0
  2. 12/05/2013, 19h38 #2 SfJ5Rpw8 SfJ5Rpw8 est déconnecté Expert éminent Profil pro Inscrit enJuin 2003Messages14 008Détails du profilInformations personnelles :Localisation : FranceInformations forums :Inscription : Juin 2003Messages : 14 008 Par défaut
    bonjour, gros fichier ? combien de ligne ?
    Répondre avec citation Répondre avec citation 0 0
  3. 12/05/2013, 20h27 #3 Marc-L Marc-L est déconnecté Expert éminent Avatar de Marc-L Homme Profil pro Développeur informatiqueInscrit enAvril 2013Messages9 468Détails du profilInformations personnelles :Sexe : HommeLocalisation : France, Hauts de Seine (Île de France)Informations professionnelles :Activité : Développeur informatiqueSecteur : High Tech - Éditeur de logicielsInformations forums :Inscription : Avril 2013Messages : 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 !
    Répondre avec citation Répondre avec citation 1 0
  4. 12/05/2013, 21h23 #4 SfJ5Rpw8 SfJ5Rpw8 est déconnecté Expert éminent Profil pro Inscrit enJuin 2003Messages14 008Détails du profilInformations personnelles :Localisation : FranceInformations forums :Inscription : Juin 2003Messages : 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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Option Explicit cela permet d'éviter grand nombre de bugs !!
    Répondre avec citation Répondre avec citation 1 0
  5. 12/05/2013, 21h25 #5 Furil Furil est déconnecté Membre averti Homme Profil pro ÉtudiantInscrit enJanvier 2012Messages41Détails du profilInformations personnelles :Sexe : HommeLocalisation : FranceInformations professionnelles :Activité : ÉtudiantInformations forums :Inscription : Janvier 2012Messages : 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 <> ""
    Répondre avec citation Répondre avec citation 0 0
  6. 12/05/2013, 21h33 #6 SfJ5Rpw8 SfJ5Rpw8 est déconnecté Expert éminent Profil pro Inscrit enJuin 2003Messages14 008Détails du profilInformations personnelles :Localisation : FranceInformations forums :Inscription : Juin 2003Messages : 14 008 Par défaut
    tu as rajouté en haut de tes page de codes la ligne OBLIGATOIRE (surtout pour les débutants) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    12 Option Explicit
    Répondre avec citation Répondre avec citation 1 0
  7. 12/05/2013, 22h31 #7 Furil Furil est déconnecté Membre averti Homme Profil pro ÉtudiantInscrit enJanvier 2012Messages41Détails du profilInformations personnelles :Sexe : HommeLocalisation : FranceInformations professionnelles :Activité : ÉtudiantInformations forums :Inscription : Janvier 2012Messages : 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 avec citation Répondre avec citation 0 0
  8. 12/05/2013, 22h52 #8 BlueMonkey BlueMonkey est déconnecté Membre Expert Homme Profil pro Inscrit enDécembre 2011Messages1 186Détails du profilInformations personnelles :Sexe : HommeLocalisation : FranceInformations forums :Inscription : Décembre 2011Messages : 1 186 Par défaut
    Bonsoir, En VBA opérateur & ne fait pas la même chose qu'en C ou d'autres languages. En effet, seul, il sert à faire de la concaténation de chaînes de caractères. (même en C ça serait && pour l'opérateur logique) Donc la ligne suivante ne fait pas ce que tu crois.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    While (Workbooks("test2.xlsm" ).Sheets(1).Cells(j, 3).Value <> Null) & (Trouve = 0) Ce que tu veux c'est en fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    While (Workbooks("test2.xlsm" ).Sheets(1).Cells(j, 3).Value <> "") And (Trouve = 0) [Edit] Avec cette correction, tu peux remettre les Dim.
    Répondre avec citation Répondre avec citation 1 0
  9. 12/05/2013, 22h54 #9 SfJ5Rpw8 SfJ5Rpw8 est déconnecté Expert éminent Profil pro Inscrit enJuin 2003Messages14 008Détails du profilInformations personnelles :Localisation : FranceInformations forums :Inscription : Juin 2003Messages : 14 008 Par défaut
    Enleve le null et remet le <>"". J'avais pas remarqué ton & ... en Vb il faut utiliser And .
    Répondre avec citation Répondre avec citation 1 0
  10. 13/05/2013, 02h14 #10 Marc-L Marc-L est déconnecté Expert éminent Avatar de Marc-L Homme Profil pro Développeur informatiqueInscrit enAvril 2013Messages9 468Détails du profilInformations personnelles :Sexe : HommeLocalisation : France, Hauts de Seine (Île de France)Informations professionnelles :Activité : Développeur informatiqueSecteur : High Tech - Éditeur de logicielsInformations forums :Inscription : Avril 2013Messages : 9 468 Par défaut
    Les variables i & j ne devraient pas être en Integer ! Car même en mettant en commentaire les Dim , plus d'erreur si dépassement des 32767 lignes, si ?! ____________________________________________________________________ Ikéa est le meilleur prénom pour une femme : suédoise, bon marché, à emmener aussitôt chez soi et facile à monter !
    Répondre avec citation Répondre avec citation 0 0
  11. 13/05/2013, 19h50 #11 Furil Furil est déconnecté Membre averti Homme Profil pro ÉtudiantInscrit enJanvier 2012Messages41Détails du profilInformations personnelles :Sexe : HommeLocalisation : FranceInformations professionnelles :Activité : ÉtudiantInformations forums :Inscription : Janvier 2012Messages : 41 Par défaut
    Grand merci à tous, ça venait bien du "&" et ça passe avec les doubles quotes maintenant, je met le code pour ceux qui en auront éventuellement besoin dans le future :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1234567891011121314151617181920212223242526272829303132333435363738 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 <> "") And (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 test2 Else j = j + 1 End If Wend i = i + 1 Wend End Sub
    A savoir qu'avant d’exécuter cette macro, il faut veiller à ouvrir les 2 fichiers concerné. Voilà donc encore merci et bonne soirée.
    Répondre avec citation Répondre avec citation 0 0
+ Répondre à la discussion Cette discussion est résolue.
ActualitésFAQs OFFICETUTORIELS OFFICELIVRES OFFICESOURCES VBAOFFICE 2010
  • Accueil
  • Forum
  • Logiciels
  • Microsoft Office
  • Excel
  • Macros et VBA Excel
  • vba comparaison 2 fichiers excel
« Discussion précédente | Discussion suivante »

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, 10h55
  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, 17h13
  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, 18h22
  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, 17h24
  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, 10h07

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

Tag » Code Vba Pour Comparer Deux Fichiers Excel