VBA comparaison et affectation de données excel
Résolu/Fermé
A voir également:
- VBA comparaison et affectation de données excel
- Si et excel - Guide
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
- Excel compter cellule couleur sans vba - Guide
2 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
4 mai 2015 à 11:32
4 mai 2015 à 11:32
Bonjour
quels sont les colonnes dans tes 2 fichiers
lemieux serait de mettre un extrait des 2 dans un zip
mettre le zip sans données confidentielles en pièce jointe sur https://www.cjoint.com/
et coller le lien proposé dans le message de réponse
Dans l'attente
quels sont les colonnes dans tes 2 fichiers
lemieux serait de mettre un extrait des 2 dans un zip
mettre le zip sans données confidentielles en pièce jointe sur https://www.cjoint.com/
et coller le lien proposé dans le message de réponse
Dans l'attente
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
4 mai 2015 à 14:42
4 mai 2015 à 14:42
ci dessous code proposé
Sub completer_data()
Dim Derlig As Integer, T_book1
Dim Idx As Integer, Lig As Integer
'-----initialisation
Application.ScreenUpdating = False
With ThisWorkbook.Sheets(1)
Derlig = .Columns("A").Find("*", , , , , xlPrevious).Row
T_book1 = .Range("A2:F" & Derlig)
End With
Workbooks.Open Filename:="D:\docus\Book2.xlsx" ' A ADAPTER AU CONTEXTE
'-----report des données book2 ---> book1
With ActiveWorkbook.Sheets(1)
For Idx = 1 To UBound(T_book1)
On Error GoTo err_inconnu
Lig = Columns("A").Find(T_book1(Idx, 1), .Range("A1"), xlValues).Row
T_book1(Idx, 4) = .Cells(Lig, "C")
T_book1(Idx, 6) = .Cells(Lig, "E")
Next
End With
'----restitution book1
ThisWorkbook.Sheets(1).Range("A2:F" & Derlig) = T_book1
Exit Sub
err_inconnu:
MsgBox T_book1(Idx, 1) & " est inconnu dans le classeur book2"
End Sub
J'ai toujours un problème avec le code, c'est que dans mon fichier original le colonne nom du fichier 1 et la colonne nom du fichier 2 ne sont pas au même endroit et ça fausse tous et je n'arrive pas à rectifier ça. Quand j'essaie de modifier les paramètre ça me supprime des colonne ou me décale tous.
Dans le fichier original, l'ordre des colonnes sont :
fichier 1 :
Site : colonne B
Nom : colonne E
Login : colonne AD
Fichier 2 :
Site : colonne K
Nom : colonne E
Login : colonne AH
Merci encore pour ton aide :)
Dans le fichier original, l'ordre des colonnes sont :
fichier 1 :
Site : colonne B
Nom : colonne E
Login : colonne AD
Fichier 2 :
Site : colonne K
Nom : colonne E
Login : colonne AH
Merci encore pour ton aide :)
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
>
Utilisateur anonyme
Modifié par michel_m le 5/05/2015 à 10:06
Modifié par michel_m le 5/05/2015 à 10:06
bonjour
hier, j'ai du faire une fausse manip car je pensais avoir posté le code commenté. le voici
quant à tes indications tardives sur la position des colonnes, pourquoi ne pas les communiquer dès ma demande de joindre le fichier et donc, tu m'as communiqué de faux renseignements
Compte tenu des écarts de colonnes E-->AD et E----<AH, je t'aurais proposé 2 variables-tableaux E-K et AD; il faudrait donc que je re-aménage la procédure
Il faut bien te rendre compte que ce que tu demandes n'est pas forcément facile et que personne ne veut passer parfois plusieurs heures à essayer de résoudre un problème bénévolement pour se voir dire après coup : "en fait , dans la réalité..."
Désolé, bonne continuation
hier, j'ai du faire une fausse manip car je pensais avoir posté le code commenté. le voici
Sub completer_data()
Dim Derlig As Integer, T_book1
Dim Idx As Integer, Lig As Integer
'-----initialisation
Application.ScreenUpdating = False 'fige le défilement de l'écran pour confort et rapidité
With ThisWorkbook.Sheets(1)
'Mémorise les données en RAM rapidité évite le va et vient entre les Classeurs
Derlig = .Columns("A").Find("*", , , , , xlPrevious).Row
T_book1 = .Range("A2:F" & Derlig) 'cration d'une variable tableau en RAM
End With
Workbooks.Open Filename:="D:\docus\Book2.xlsx" ' A ADAPTER AU CONTEXTE
'-----report des données book2 ---> book1
With ActiveWorkbook.Sheets(1)
For Idx = 1 To UBound(T_book1) 'nom de l'agent
On Error GoTo err_inconnu
'si le nom est inconnu appel du gestionnaire d'erreurs
'dans la colonneA ,trouve la ligne du nom après la cellule A1
Lig = Columns("A").Find(T_book1(Idx, 1), .Range("A1"), xlValues).Row
' recopie dans le tableau t_book1 les valeurs trouvé à la ligne du nom
T_book1(Idx, 4) = .Cells(Lig, "C")
T_book1(Idx, 6) = .Cells(Lig, "E")
Next
End With
'peut-^tre fermer le book2 mais je ne pouvais pas savoir ce que tu voulais faire avec Book2
'----restitution book1
With ThisWorkbook.Sheets(1)
.Range("A2:F" & Derlig) = T_book1
.Activate 'oublié 1° livraison on montre le résultat des courses
End With
Exit Sub
'-------gestionnaire d'erreur
'principe Algo: toute sortie de la procédure doit être activée en fin de procédure
err_inconnu:
MsgBox T_book1(Idx, 1) & " est inconnu dans le classeur book2"
End Sub
quant à tes indications tardives sur la position des colonnes, pourquoi ne pas les communiquer dès ma demande de joindre le fichier et donc, tu m'as communiqué de faux renseignements
Compte tenu des écarts de colonnes E-->AD et E----<AH, je t'aurais proposé 2 variables-tableaux E-K et AD; il faudrait donc que je re-aménage la procédure
Il faut bien te rendre compte que ce que tu demandes n'est pas forcément facile et que personne ne veut passer parfois plusieurs heures à essayer de résoudre un problème bénévolement pour se voir dire après coup : "en fait , dans la réalité..."
Désolé, bonne continuation
Bonjour,
Je m'excuse pour les mauvaises informations que je t'ai indiquées hier, étant débutant je ne pensais pas que l'ordre des colonnes aurait eu un tel impact et je m'en re excuse.
Cependant, je te remercie pour l'aide précieuse que tu m'as fourni qui m'a été très utile d'un point de vue gain de temps et apprentissage. Ce code m'a d'ailleurs été très utile pour un autre fichier dont les colonnes étaient dans le bon ordre.
Je m'excuse pour les mauvaises informations que je t'ai indiquées hier, étant débutant je ne pensais pas que l'ordre des colonnes aurait eu un tel impact et je m'en re excuse.
Cependant, je te remercie pour l'aide précieuse que tu m'as fourni qui m'a été très utile d'un point de vue gain de temps et apprentissage. Ce code m'a d'ailleurs été très utile pour un autre fichier dont les colonnes étaient dans le bon ordre.
4 mai 2015 à 11:43
Etant stagiaire se sont des documents confidentiels que je ne peux partager, j'ai donc joins un exemple très court du fichier avec des informations incohérentes. Cependant le principe reste le meme ;)
http://cjoint.com/?0Eel2oVABcN
4 mai 2015 à 11:53
Ce lien est plus adéquat, car dans l'autre les informations sont à la suite. Or dans mes fichiers excel, il peut y avoir des données qui ne me servent pas mais qui sont présents
Merci encore,
4 mai 2015 à 12:24
4 mai 2015 à 13:31