VBA comparaison et affectation de données excel

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
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.

2 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. Utilisateur anonyme
       
      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
    2. Utilisateur anonyme
       
      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
    3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Mon ordi ne lit pas les .rar mais les .zip
      0
    4. Utilisateur anonyme
       
      http://cjoint.com/?0EenTMxkfFw
      0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. Utilisateur anonyme
       
      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
    2. Utilisateur anonyme
       
      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
      1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320 > Utilisateur anonyme
         
        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
    3. Utilisateur anonyme
       
      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