Importation d'informations

Résolu
Sandrine -  
 Sandrine -
Bonjour,

Je vous explique ma situation.
J'ai un document A et un document B.
Qui sont pour la forme identique.
Donc le ficher A est un ficher récent et le B plus anciens. J'ai besoin de compléter mon fichier A par le B. Dans ma colonne A j'ai mes ITM (référence produit).
Je veux que chaque cellule, de mon fichier A, de ma colonne A soit recherché dans mon fichier B ( dans la colonne A aussi) et si il y a correspondance copier les cellule de cette ligne en (K,L,M,N,O) et les colles dans mon ficher A. Donc j'aurai un fichier complet.

Voila mon début de code:
Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim NL As Long 'déclare la variable NL (Nombre de Lignes)
Dim NC As Integer 'déclare la variable NC (Nombre de colonnes)

Set CD = ThisWorkbook 'définit la classeur destination CD
With Application.FileDialog(msoFileDialogOpen) 'prend en compte la boîte de dialogue permettant l'ouverture d'un fichier
    .Show 'ouverture
    On Error GoTo fin 'en cas d'erreur, va à l'étiquette "fin"
    Workbooks.Open (.SelectedItems(1)) 'ouvre le premier fichier sélectionné et ferme la boîte de dialogue (génère une erreur si bouton [Annuler])
End With 'fin de la prise en compte de la boîte de dialogue permettant l'ouverture d'un fichier
Set CS = ActiveWorkbook 
TV = Range("A1").CurrentRegion 
NL = UBound(TV, 1)
NC = UBound(TV, 2)


End Sub


MERci

1 réponse

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    quelques modifs de votre code et des lignes en plus

    Sub Macro1()
        Dim Dico_Data As Object, PlageA, PlageB, derlig1, x, Fin
        
        'Application.ScreenUpdating = False
        'fichier A
        Set Dico_Data = CreateObject("Scripting.Dictionary")
        With Worksheets("feuil1")
            derlig1 = .Range("A" & Rows.Count).End(xlUp).Row   'derniere cellule non vide colonne A
            PlageA = .Range("A2:A" & derlig1)                               'mise en memoire
        End With
        'boucle sur plage
        Fin = UBound(PlageA, 1)      'longueur table
        For x = 1 To Fin
            Dico_Data(PlageA(x, 1)) = x + 1   'mise en memoire ref et ligne ref dans dictionnaire---->x+1 pour ligne 2
        Next x
        'ouverture et recup fichier B
        Application.FileDialog(msoFileDialogOpen).Filters.Add "Excel files (*.xlsx)", "*.xlsx", 1 'prend en compte la boîte de dialogue permettant l'ouverture d'un fichier
        If Not (Application.FileDialog(msoFileDialogOpen).Show) Then
            MsgBox "Pas de fichier selectionne !!!!!.", vbExclamation, "PAS BIEN !!!!!!!!"
            Application.ScreenUpdating = True
            Exit Sub
        End If
        With Application.FileDialog(msoFileDialogOpen)
            Workbooks.Open (.SelectedItems(1)) 'ouvre le premier fichier sélectionné et ferme la boîte de dialogue (génère une erreur si bouton [Annuler])
            nom_Fichier = Right(.SelectedItems(1), Len(.SelectedItems(1)) - InStrRev(.SelectedItems(1), "\"))   'nom de fichier avec extention
        End With
        With Workbooks(nom_Fichier).Worksheets("feuil1")
            derlig1 = .Range("A" & Rows.Count).End(xlUp).Row   'derniere cellule non vide colonne A
            PlageB = .Range("A2:O" & derlig1)                               'mise en memoire plage de cellules fichier B
        End With
        Fin = UBound(PlageB)    'nombre de "ligne"
        Workbooks(nom_Fichier).Close False
        'retour fichier A
        With Worksheets("feuil1")
            For x = 1 To Fin
                If Dico_Data.exists(PlageB(x, 1)) Then      'ref existe en A et B
                    Lg = Dico_Data(PlageB(x, 1))                'ligne ref fichier A
                    .Range("K" & Lg) = PlageB(x, 11)          'ecriture des infos
                    .Range("L" & Lg) = PlageB(x, 12)
                    .Range("M" & Lg) = PlageB(x, 13)
                    .Range("N" & Lg) = PlageB(x, 14)
                    .Range("O" & Lg) = PlageB(x, 15)
                End If
            Next x
        End With
        Application.ScreenUpdating = True
    End Sub
    0
    1. Sandrine
       
      C'est parfait merci beaucoup =)
      0