Comparaison de 2 fichiers
Fermé
cnw
Messages postés
19
Date d'inscription
samedi 14 décembre 2013
Statut
Membre
Dernière intervention
15 décembre 2013
-
14 déc. 2013 à 22:33
cnw Messages postés 19 Date d'inscription samedi 14 décembre 2013 Statut Membre Dernière intervention 15 décembre 2013 - 15 déc. 2013 à 20:35
cnw Messages postés 19 Date d'inscription samedi 14 décembre 2013 Statut Membre Dernière intervention 15 décembre 2013 - 15 déc. 2013 à 20:35
A voir également:
- Comparaison de 2 fichiers
- Wetransfer gratuit fichiers lourd - Guide
- Explorateur de fichiers - Guide
- Word numéro de page 1/2 - Guide
- Renommer plusieurs fichiers en même temps - Guide
- Fusionner 2 fichiers excel - Guide
14 réponses
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
Modifié par Polux31 le 15/12/2013 à 10:09
Modifié par Polux31 le 15/12/2013 à 10:09
Bonjour,
Quelques questions:
- Il y a t'il un titre dans tes colonnes E du fichier 1 et I du fichier 2 ?
- Dans quel fichier se trouve la macro que tu veux faire ?
- Qu'est ce qui déclenche la macro ?
A+
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
Quelques questions:
- Il y a t'il un titre dans tes colonnes E du fichier 1 et I du fichier 2 ?
- Dans quel fichier se trouve la macro que tu veux faire ?
- Qu'est ce qui déclenche la macro ?
A+
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
cnw
Messages postés
19
Date d'inscription
samedi 14 décembre 2013
Statut
Membre
Dernière intervention
15 décembre 2013
15 déc. 2013 à 10:48
15 déc. 2013 à 10:48
Bonjour,
Merci d'avance pour votre aide.
-Les deux colonnes s'appellent Matricule dans les deux fichiers.
-LA Macro doit être sur le fichier principal (fichier 1).
-Le declancheur peut-être à l'ouverture du fichier prencipal ou bien dans une feuille avec un bouton.
Merci encore.
Martin.
Merci d'avance pour votre aide.
-Les deux colonnes s'appellent Matricule dans les deux fichiers.
-LA Macro doit être sur le fichier principal (fichier 1).
-Le declancheur peut-être à l'ouverture du fichier prencipal ou bien dans une feuille avec un bouton.
Merci encore.
Martin.
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
Modifié par Polux31 le 15/12/2013 à 12:19
Modifié par Polux31 le 15/12/2013 à 12:19
Re
Copier le code ci dessous dans un module et affecter la fonction au déclancheur:
;0)
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
Copier le code ci dessous dans un module et affecter la fonction au déclancheur:
Option Explicit '-- /!\ NE PAS OUBLIER DE COCHER LA REFERENCE Microsoft ActiveX Data Object xx Library Public Sub CompareChampMatricule() Dim Cn As ADODB.Connection Dim Rst As ADODB.Recordset Dim Cd As ADODB.Command Dim fichier As String Dim feuille As String Dim wk As Workbook Dim ws As Worksheet Dim ligne As Long Dim newLigne As Long '--- Initialisation --- Set Cn = New ADODB.Connection Set wk = ThisWorkbook Set ws = wk.Worksheets("Feuil1") 'A adapter ... fichier = "D:\CCM\monFichier2.xlsx" 'A adapter ... feuille = "Feuil1" ligne = 2 '------------------ '--- Connexion au fichier source --- With Cn .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _ & fichier & ";Extended Properties=""Excel 12.0;HDR=YES;""" .Open End With '----------------- '--- Traitement ----- While ws.Range("E" & ligne).Value <> "" Set Cd = New ADODB.Command Cd.ActiveConnection = Cn Set Rst = New ADODB.Recordset Cd.CommandText = "SELECT Matricule FROM [" & feuille & "$] WHERE Matricule = '" & ws.Range("E" & ligne).Value & "'" Rst.Open Cd, , adOpenKeyset, adLockOptimistic Rst.MoveFirst If Rst.RecordCount > 0 Then Rst.MoveLast newLigne = ws.Range("A" & Rows.Count).End(xlUp).Row ws.Range("A" & newLigne + 1).CopyFromRecordset Rst Set Rst = Nothing Set Cd = Nothing Query = "" End If ligne = ligne + 1 Wend '----------- '--- Libération des objets et de la mémoire Set wk = Nothing Set ws = Nothing Cn.Close Set Cn = Nothing '------------------------- End Sub
;0)
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
cnw
Messages postés
19
Date d'inscription
samedi 14 décembre 2013
Statut
Membre
Dernière intervention
15 décembre 2013
15 déc. 2013 à 12:29
15 déc. 2013 à 12:29
Bonjour,
Merci pour votre aide,
comment faire cette action ?
'-- /!\ NE PAS OUBLIER DE COCHER LA REFERENCE Microsoft ActiveX Data Object xx Library
Martin
Merci pour votre aide,
comment faire cette action ?
'-- /!\ NE PAS OUBLIER DE COCHER LA REFERENCE Microsoft ActiveX Data Object xx Library
Martin
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
15 déc. 2013 à 12:36
15 déc. 2013 à 12:36
Dans l'éditeur VB -> Outils -> Références ... chercher dans la liste et cocher la référence.
;0)
;0)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
cnw
Messages postés
19
Date d'inscription
samedi 14 décembre 2013
Statut
Membre
Dernière intervention
15 décembre 2013
15 déc. 2013 à 12:42
15 déc. 2013 à 12:42
Bonjour,
Après des recherches sur le NET j'ai fini par trouvé.
Au lancement du VBA, j'ai eu une erreur sur une variable non initialisée:
Erreur de compilation : variable non définie :
(ligne Query = "")
Martin
Après des recherches sur le NET j'ai fini par trouvé.
Au lancement du VBA, j'ai eu une erreur sur une variable non initialisée:
Erreur de compilation : variable non définie :
(ligne Query = "")
Martin
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
15 déc. 2013 à 12:43
15 déc. 2013 à 12:43
Oups !!! c'est une erreur de ma part ... tu peux suprimer cette ligne
cnw
Messages postés
19
Date d'inscription
samedi 14 décembre 2013
Statut
Membre
Dernière intervention
15 décembre 2013
15 déc. 2013 à 13:03
15 déc. 2013 à 13:03
Bonjour,
Erreur d'exécution:
-2147217904 (80040e10)
Erreur Automation
je ne comprends rien !!
Martin
Erreur d'exécution:
-2147217904 (80040e10)
Erreur Automation
je ne comprends rien !!
Martin
cnw
Messages postés
19
Date d'inscription
samedi 14 décembre 2013
Statut
Membre
Dernière intervention
15 décembre 2013
15 déc. 2013 à 13:07
15 déc. 2013 à 13:07
Bonjour,
Je viens de faire du pas-à-pas et ça bloque à la ligne :
Rst.MoveFirst
Martin
Je viens de faire du pas-à-pas et ça bloque à la ligne :
Rst.MoveFirst
Martin
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
Modifié par Polux31 le 15/12/2013 à 13:12
Modifié par Polux31 le 15/12/2013 à 13:12
Tu as modifié les 2 lignes :
Assures toi de l'extension du fichier Excel ...
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
Set ws = wk.Worksheets("Feuil1") 'A adapter ... fichier = "D:\CCM\monFichier2.xlsx" 'A adapter ...
Assures toi de l'extension du fichier Excel ...
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
cnw
Messages postés
19
Date d'inscription
samedi 14 décembre 2013
Statut
Membre
Dernière intervention
15 décembre 2013
15 déc. 2013 à 13:22
15 déc. 2013 à 13:22
Bonjour,
Oui j'ai bien changé les valeurs :
Martin
Oui j'ai bien changé les valeurs :
Set ws = wk.Worksheets("Suivi") 'A adapter ...
fichier = "Liste mensuelle des effectifs en 10_13.xlsx" 'A adapter ...
feuille = "Base mensuelle"
Martin
cnw
Messages postés
19
Date d'inscription
samedi 14 décembre 2013
Statut
Membre
Dernière intervention
15 décembre 2013
15 déc. 2013 à 13:24
15 déc. 2013 à 13:24
Bonjour,
Pouvez-vous l'expliquer les deux lignes suivantes SVP ?
Martin
Pouvez-vous l'expliquer les deux lignes suivantes SVP ?
newLigne = ws.Range("A" & Rows.Count).End(xlUp).Row ws.Range("A" & newLigne + 1).CopyFromRecordset Rst
Martin
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
15 déc. 2013 à 13:30
15 déc. 2013 à 13:30
Ca permet de copier le contenu de la colonne I du fichier 2 dans la colonne A du fichier 1 ...
Je viens de voir que j'ai mal interperté la demande ...
Quel est l'entête de la colonne A dans le Fichier 2 ?
Il faut mettre le chemin complet ici :
Je viens de voir que j'ai mal interperté la demande ...
Quel est l'entête de la colonne A dans le Fichier 2 ?
Il faut mettre le chemin complet ici :
fichier = "Liste mensuelle des effectifs en 10_13.xlsx" 'Par exemple : "C:\MonDossier\MonRepertoire\Liste mensuelle des effectifs en 10_13.xlsx"
cnw
Messages postés
19
Date d'inscription
samedi 14 décembre 2013
Statut
Membre
Dernière intervention
15 décembre 2013
15 déc. 2013 à 13:37
15 déc. 2013 à 13:37
Le fichier 2 est un fichier mensuel qui permettra de mettre à jour le fichier 1.
Exemple :
Dans le fichier 2 je peux avoir plusieurs lignes du même matricule (mois m-1, m-2, ...etc) et je dois parser le fichier pour prendre la valeur (colonne A) du mois m dans le fichier 1 colonne A.
Je mets à jour et je test
Marin
Exemple :
Dans le fichier 2 je peux avoir plusieurs lignes du même matricule (mois m-1, m-2, ...etc) et je dois parser le fichier pour prendre la valeur (colonne A) du mois m dans le fichier 1 colonne A.
Je mets à jour et je test
Marin
cnw
Messages postés
19
Date d'inscription
samedi 14 décembre 2013
Statut
Membre
Dernière intervention
15 décembre 2013
15 déc. 2013 à 13:43
15 déc. 2013 à 13:43
Bonjour,
Pour être sûr que mon fichier 2 est bien sélectionné, j'ai modifié la ligne :
en
toujours la même erreur :
-2147217904 (80040e10)
Erreur Automation
Martin
Pour être sûr que mon fichier 2 est bien sélectionné, j'ai modifié la ligne :
fichier = "C:\Users\mmeguellati\Downloads\VBA-natacha\Liste mensuelle des effectifs en 10_13.xlsx" 'A adapter ...
en
fichier = Application.GetOpenFilename("Fichiers Excels, *.xls*")
toujours la même erreur :
-2147217904 (80040e10)
Erreur Automation
Martin
cnw
Messages postés
19
Date d'inscription
samedi 14 décembre 2013
Statut
Membre
Dernière intervention
15 décembre 2013
15 déc. 2013 à 13:48
15 déc. 2013 à 13:48
l'erreur vient de cette ligne :
entre Cd et la seconde virgule j'ai un vide . Est-ce normal ?
Martin
Rst.Open Cd, ,adOpenKeyset, adLockOptimistic
entre Cd et la seconde virgule j'ai un vide . Est-ce normal ?
Martin
cnw
Messages postés
19
Date d'inscription
samedi 14 décembre 2013
Statut
Membre
Dernière intervention
15 décembre 2013
15 déc. 2013 à 15:02
15 déc. 2013 à 15:02
Faudrait-il pas ajouter Cn dans Cd,[ICI] , ?
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
15 déc. 2013 à 14:18
15 déc. 2013 à 14:18
Tu as cocher quelle référence ?
Et il me faudrait l'entête de la colonne A du fichier 2 !!!
Et il me faudrait l'entête de la colonne A du fichier 2 !!!
cnw
Messages postés
19
Date d'inscription
samedi 14 décembre 2013
Statut
Membre
Dernière intervention
15 décembre 2013
15 déc. 2013 à 14:24
15 déc. 2013 à 14:24
J'ai mis Microsoft ActiveX Data Objects 6.1 Library;
l'entête de la colonne A du fichier 2 est Date_de_naissance
Martin
l'entête de la colonne A du fichier 2 est Date_de_naissance
Martin
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
15 déc. 2013 à 15:04
15 déc. 2013 à 15:04
Tu as quelle version d'Excel ? J'ai 2007 et ça fonctionne chez moi. J'ignore s'il y a des modif au niveau du Provider ...
Remplace :
Par
Remplace :
Cd.CommandText = "SELECT Matricule FROM [" & feuille & "$] WHERE Matricule = '" & ws.Range("E" & ligne).Value & "'"
Par
Cd.CommandText = "SELECT Date_de_naissance FROM [" & feuille & "$] WHERE Matricule = '" & ws.Range("E" & ligne).Value & "'"
cnw
Messages postés
19
Date d'inscription
samedi 14 décembre 2013
Statut
Membre
Dernière intervention
15 décembre 2013
15 déc. 2013 à 15:33
15 déc. 2013 à 15:33
J'ai la version 2010
toujours la même erreur !
Martin
toujours la même erreur !
Martin
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
15 déc. 2013 à 15:39
15 déc. 2013 à 15:39
J'ai trouvé ça concernant le provider : https://www.connectionstrings.com/excel-2013/
cnw
Messages postés
19
Date d'inscription
samedi 14 décembre 2013
Statut
Membre
Dernière intervention
15 décembre 2013
15 déc. 2013 à 20:35
15 déc. 2013 à 20:35
Je dois faire quelque chose ? une conf à modifier ?
Martin
Martin
cnw
Messages postés
19
Date d'inscription
samedi 14 décembre 2013
Statut
Membre
Dernière intervention
15 décembre 2013
15 déc. 2013 à 15:37
15 déc. 2013 à 15:37
Bonjour,
J'essaie de faire une macro qui fait la même chose que le votre mais ça bloque :
J'ai une erreur de compilation :
référence de validation de contrôle
J'essaie de faire une macro qui fait la même chose que le votre mais ça bloque :
Option Explicit Sub ImporterColonnes() Dim Fichier, WbkCopy As Workbook, WbkColle As Workbook Dim Colonnes(), col As Integer, Resultat As Variant Dim NWbkColle As Integer, MWbkCopy As Integer, DWbkColle As Integer 'On attribue à la variable WbkColle le fichier actuel (celui qui contient la macro) Set WbkColle = ThisWorkbook 'A adapter : Nom des entêtes de colonnes à importer Colonnes = Array("Matricule") 'Sélection du fichier Fichier = Application.GetOpenFilename("Fichiers Excels, *.xls*") 'En cas de clic sur "ANNULER" If Fichier <> False Then 'On ouvre le fichier en question Set WbkCopy = Workbooks.Open(Fichier) With WbkCopy.Sheets("Base mensuelle") '==> ADAPTER NOM de la feuille 'Boucle sur toutes les entêtes des colonnes For col = 2 To .Cells(2, .Cells.Columns.Count).End(xlToLeft).Column 'teste si l'entête correspond à un des noms des colonnes à copier Resultat = Application.Match(.Cells(2, col), Colonnes, 0) 'Si l'entête est trouvée (colonne à copier) If Not IsError(Resultat) Then 'Copié - Collé ==> ADAPTER NOM de la feuille ou coller ("TRUC" à remplacer) '.Columns(Col).Copy WbkColle.Sheets("COLLER").Cells(1, Cells.Columns.Count).End(xlToLeft).Offset(0, 1) 'impression pop-up les colonnes Matricule sont bien là End If ' si l'entête existe bien Next col 'rechercher avec mise-à-jour correspendance valeur For NWbkColle = 4 To WbkColle.Sheets("Suivi").Range("E65536").End(xlUp).Row For MWbkCopy = 4 To WbkCopy.Sheets("Base mensuelle").Range("I65536").End(xlUp).Row For DWbkColle = 4 To WbkColle.Sheets("Suivi").Range("M65536").End(xlUp).Row If InStr(WbkCopy.Sheets("Base mensuelle").Range("I" & MWbkCopy), WbkColle.Sheets("Suivi").Range("E" & NWbkColle)) <> 0 Then 'Copié - collé WbkCopy.Sheets("Base mensuelle").Range("I" & MWbkCopy).Copy WbkColle.Sheets("Suivi").Range("M" & DWbkColle) End If Next NWbkColle Next MWbkCopy Next DWbkColle End With WbkCopy.Close End If Set WbkCopy = Nothing Set WbkColle = Nothing End Sub
J'ai une erreur de compilation :
référence de validation de contrôle
cnw
Messages postés
19
Date d'inscription
samedi 14 décembre 2013
Statut
Membre
Dernière intervention
15 décembre 2013
15 déc. 2013 à 15:38
15 déc. 2013 à 15:38
J'ai une erreur de compilation :
référence de validation de contrôle incorrecte dans Next ; Next NWbkColle
référence de validation de contrôle incorrecte dans Next ; Next NWbkColle