VBA comparaison et affectation de données excel

Résolu/Fermé
Utilisateur anonyme - 4 mai 2015 à 10:51
 Utilisateur anonyme - 5 mai 2015 à 11:06
Bonjour,

Je suis en train de créer une macro qui me permet par rapport à un fichier Excel externe d'importer certaine informations qui m'est utile.
Débutant dans ce language j'ai dû mal à le créer.

Le process de ma macro est simple à dire mais un peu plus compliquer à faire ^^

J'ai un fichier A qui contient différentes colonnes dont le nom, prénom, un lieu, etc mais sans informations.
Dans un fichier B j'ai la même chose mais complètement dans le désordre (les noms sont pas dans l'ordre et les colonnes pareil) mais contrairement au fichier "a" celui-ci contient les informations.

l'algo de ma macro est en gros celui-ci :
compare nom du fichier "a" avec nom du fichier "b";
si (nom du fichier "a" == nom du fichier "b")
on copie le log du fichier b dans le log du fichier a, lieu du fichier b dans le lieu du fichier a, etc.

J'ai vraiment besoin d'aide pour savoir comment réaliser une macro comme celui-ci.

Voici la macro que j'ai trouvé :

Sub Find_Matches()
Dim CompareRange As Variant, x As Variant, y As Variant
' Set CompareRange equal to the range to which you will compare the selection.
Set CompareRange = Workbooks("02_postes agents"). _
Worksheets("Feuil1").Range("E2:E700")
' NOTE: If the compare range is located on another workbook
' or worksheet, use the following syntax.
' Set CompareRange = Workbooks("Book2"). _
' Worksheets("Sheet2").Range("C1:C5")
'Set CompareRange = Range("C1:C5")

' Loop through each cell in the selection and compare it to
' each cell in CompareRange.

Range(Cells(2, 5), Cells(700, 5)).Select
For Each x In Selection
For Each y In CompareRange
If x = y Then x.Offset(0, 1) = x
Next y
Next x
End Sub

Merci d'avance pour vos réponses.
A voir également:

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
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


0
Utilisateur anonyme
4 mai 2015 à 11:43
Merci pour ta réponse,

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
0
Utilisateur anonyme
4 mai 2015 à 11:53
https://www.cjoint.com/c/EEemgKHN8Cg

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,
0
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 à 12:24
Mon ordi ne lit pas les .rar mais les .zip
0
Utilisateur anonyme
4 mai 2015 à 13:31
http://cjoint.com/?0EenTMxkfFw
0
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
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

0
Utilisateur anonyme
4 mai 2015 à 16:32
Je te remercie pour le code que tu m'a proposé et je suis en train de l'étudier. Je voulais juste savoir si ça ne te dérange pas pouvoir m'aider un peux, me mettre des petits commentaires pour pouvoir comprendre un peu le code s'il te plait.
0
Utilisateur anonyme
4 mai 2015 à 23:16
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 :)
0
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
bonjour
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
0
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.
0