Recherche copier coller VBA

Résolu/Fermé
Murielle - Modifié par Murielle le 22/06/2016 à 11:37
 Murielle - 22 juin 2016 à 15:11
Bonjour,

Je vous explique, j'ai un ficher avec plusieurs onglet nommé différemment. Mon problème est que je veux remplir tout ces onglets de manière automatisé. Chercher dans un ficher B le nom de chaque onglet (en appliquant un filtre par exemple) qui est noté dans la colonne C (de ce fichier) et copier toutes les lignes correspondantes dans mon fichier A dans l'onglet donné.

Je remercie toute personne pouvant m'aider...

Bien à vous,

2 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
22 juin 2016 à 14:32
Bonjour Murielle, bonjour le forum,

Si les données du fichier B se trouvent dans le premier onglet de celui-ci et commencent dans la cellule A1, le code ci-dessous devrait convenir. Tu dois le placer dans le fichier A. Le code demande à l'utilisateur d'ouvrir le fichier B via une boîte de dialogue puis agit. À la fin, le fichier B est fermé...

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 OS As Worksheet 'déclare la variable OS (Onglet 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)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim L As Long 'déclare la variable L (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

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 'définit la classeur source CS
Set OS = CS.Sheets(1) 'définit l'onglet source OS (ici le premier du classeur source, tu adapteras à ton cas)
TV = OS.Range("A1").CurrentRegion 'définit le tableau de valeurs TV
NL = UBound(TV, 1) 'définit le nombre de ligne NL du tableau de valeurs TV
NC = UBound(TV, 2) 'définit le nombre de colonnes NC du tableau de valeurs TV
For I = 1 To CD.Sheets.Count 'boucle 1 : sur tous les onglet du classeur destination
    L = 1: Erase TL 'reinitialise L, vide le tableau TL
    For J = 1 To NL 'boucle 2 : sur toutes les lignes J du tableau des valeurs TV
        If TV(J, 3) = CD.Sheets(I).Name Then 'condition : si la donnée ligne J colonne 3 (=> colonne C) de TV est égale au nom de l'onglet de la boucle 1
            ReDim Preserve TL(1 To NC, 1 To L) 'redimensionne le tableau Tk (autant de lignes de TV a de colonnes, L colonnes)
            For K = 1 To NC 'boucle 3 : sur toutes les colonnes K du tableau des valeurs TV
                TL(K, L) = TV(J, K) 'récupère dans la ligne K de TL, la valeur en colonne K de TV (= transposition)
            Next K 'prochaine colonne de la boucle 3
            L = L + 1 'incrémente L (ajoute une colonne au tableau des lignes TL)
        End If 'fin de la condition
    Next J 'prochaine ligne de la boucle 1
    'si L est supérieure à 1 (au moins un occurrence a été trouvée), renvoie dans la cellule A1 redimensionnée de l'onglet de la boucle 1 le tableau TL tranposé
    If L > 1 Then CD.Sheets(I).Range("A1").Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL)
Next I 'prochain onglet de la boucle 1
CS.Close False 'ferme le classeur source sans l'enregistrer
fin: 'étiquette
End Sub

0
MERCI c'est Parfait !!!!!! Parfait !!!
Merciii
0