Sub SelectionFeuilleCorrespondante()
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim FE As String 'déclare la variable FE (FichierEncaissement)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim I As Integer 'déclare la variable I (Incrément)
Dim NO As String 'déclare la variable NO (Nom Onglet)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
With Application.FileDialog(msoFileDialogOpen)
.Title = "Choix du Fichier"
.Filters.Clear
.Filters.Add "Ton Tableur", "*.xlsX*, *.Xlsm*, *.Xls*"
.AllowMultiSelect = False
MsgBox "Sélectionnez le fichier des ENCAISSEMENTS!"
If .Show <> 0 Then
FichierEncaissement = .SelectedItems(1)
Set CS = Workbooks.Open(FichierEncaissement)
Else
MsgBox "Le tri des défaillants ne peut se faire sans sélection du fichier demandé!", , "LhomHeureux pour vous servir!": Exit Sub
End If
MsgBox "Sélectionnez votre fichier des CLIENTS"
If .Show <> 0 Then
FichierDefaillant = .SelectedItems(1)
Set CD = Workbooks.Open(FichierDefaillant) 'ouvre le fichier sélectionné
Else
MsgBox "Le tri des défaillants ne peut se faire sans sélection du fichier demandé!", , "LhomHeureux pour vous servir!": Exit Sub
End If
End With
For I = 3 To CS.Sheets.Count 'boucle sur tous les onglets du classeur source (en partant du troisième)
Set OS = CS.Sheets(I) 'définit l'onglet source OS
NO = OS.Name 'récupère le nom dans la variable NO
OS.Range("A1:A" & OS.Cells(1, Application.Columns.Count).End(xlToLeft).Column).UnMerge 'défusionne la première ligne
OS.Activate 'active l'onglet 'on aurait pu se passer de cette ligne
OS.Range("B4").Select 'sélectionne B4 'on aurait pu se passer de cette ligne
On Error Resume Next 'gestion des errurs (en cas d'erreur pase à la ligne suivante)
Set OD = CD.Worksheets(NO) 'définit l'onglet destination OD (onglet ayant NO comme nom dans le classeur destination CD, génère une erreur si l'onglet n'existe pas)
If Err <> 0 Then 'condition : si une erreur a été générée
Err.Clear 'supprime l'erreur
GoTo suite 'va à l'étiquette suite
End If 'fin de la condition
On Error GoTo 0 'fin de la gestion des erreurs
Set DEST = OS.Cells(Application.Rows.Count, "B").End(xlUp).Offset(3, 0) 'définit la cellule de destination DEST
OD.Range("A1").CurrentRegion.Copy DEST 'copie la plage des cellules adjacentes à A1 de l'onglet destination de la colle dans DEST
Application.CutCopyMode = False 'supprime le clignotement du [COPIER]
Range(DEST, DEST.End(xlToRight)).AutoFilter 'supprime le filtre automatique (???)
DEST.CurrentRegion.RemoveDuplicates Columns:=2, Header:=xlYes 'supprime les doublons de la colonne 2
Range(DEST, DEST.End(xlToRight)).AutoFilter 'supprime encore le filtre automatique (???)
suite: 'étiquette
Next I 'prochain onglet de la boucle
End Sub