Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !
Sub Macro1()
Dim cd As Workbook 'déclare la variable cd (Classeur Destination)
Dim od1 As Object 'déclare la variable od1 (Onglet Destination 1)
Dim od2 As Object 'déclare la variable od2 (Onglet Destination 2)
Dim od3 As Object 'déclare la variable od3 (Onglet Destination 3)
Dim ch As String 'déclare la variable ch (CHemin)
Dim sf As Object 'déclare la variable sf (Système de Fichiers)
Dim d As Object 'déclare la variable d (Dossier)
Dim o As Object 'déclare la variable o (Onglets)
Dim fs As Object 'déclare la variable fs (FichierS)
Dim f As Object 'déclare la variable f (Fichier)
Dim cs As Workbook 'déclare la variable cs (Classeur Source)
Dim os1 As Object 'déclare la variable os (Onglet Source 1)
Dim os2 As Object 'déclare la variable os (Onglet Source 2)
Dim os3 As Object 'déclare la variable os (Onglet Source 3)
Dim dest1 As Range 'déclare la variable dest1 (cellule de DESTination 1)
Dim dest2 As Range 'déclare la variable dest2 (cellule de DESTination 2)
Dim dest3 As Range 'déclare la variable dest3 (cellule de DESTination 3)
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set cd = ThisWorkbook 'définit le classeur destination cd
ch = cd.Path 'définit la chemin
Set od1 = cd.Sheets("Récap cuilliere") 'définit l'onglet de destination od1
Set od2 = cd.Sheets("Récap couteau") 'définit l'onglet de destination od2
Set od3 = cd.Sheets("Récap Fourchettes") 'définit l'onglet de destination od3
'suppression des anciennes données
od1.Range("E1:" & od1.Cells(5, Application.Columns.Count).Address(0, 0)).EntireColumn.Delete 'supprime les colonnes E à... dernière
od2.Range("E1:" & od2.Cells(5, Application.Columns.Count).Address(0, 0)).EntireColumn.Delete 'supprime les colonnes E à... dernière
od3.Range("E1:" & od3.Cells(5, Application.Columns.Count).Address(0, 0)).EntireColumn.Delete 'supprime les colonnes E à... dernière
Set sf = CreateObject("Scripting.FileSystemObject") 'définit la variable sf
Set d = sf.getfolder(ch) 'définit la variable d
Set fs = d.Files 'définit la variable fs
For Each f In fs 'boucles sur touts les fichiers du dossier d
'condition : si le fichier f à une extension ".xls" et commence par "Méto site"
If Right(f.Name, 4) = ".xls" And Left(f.Name, 9) = "Méto site" Then
'définit dest1 (E3 si E3 est vide, sinon la première colonne vide de la ligne 3 décalée de 5 colonnes à droite)
Set dest1 = IIf(od1.Range("E3").Value = "", od1.Range("E3"), od1.Cells(3, Application.Columns.Count).End(xlToLeft).Offset(0, 5))
'définit dest2 (E3 si E3 est vide, sinon la première colonne vide de la ligne 3 décalée de 3 colonnes à droite)
Set dest2 = IIf(od2.Range("E3").Value = "", od2.Range("E3"), od2.Cells(3, Application.Columns.Count).End(xlToLeft).Offset(0, 3))
'définit dest3 (E3 si E3 est vide, sinon la première colonne vide de la ligne 3 décalée de 5 colonnes à droite)
Set dest3 = IIf(od3.Range("E3").Value = "", od3.Range("E3"), od3.Cells(3, Application.Columns.Count).End(xlToLeft).Offset(0, 5))
Workbooks.Open f 'ouvre le fichier
Set cs = ActiveWorkbook 'définit le classeur source cs
Set os1 = cs.Sheets("cuilliere") 'définit l'onglet source os1
Set os2 = cs.Sheets("couteau") 'définit l'onglet source os2
Set os3 = cs.Sheets("Fourchettes") 'définit l'onglet source os3
'récap cuillères
dest1.Value = cs.Name 'place le nom du classeur
os1.Range("E4:I32").Copy 'copie la plage utile plus une colonne
dest1.Offset(1, 0).PasteSpecial (xlPasteColumnWidths) 'colle la largeur des colonnes
os1.Range("E4:H32").Copy dest1.Offset(1, 0) 'copie/colle la plage utile
dest1.Offset(4, 0).Value = os1.Range("B7").Value 'récupère le nom correspondant à Vita A
dest1.Offset(13, 0).Value = os1.Range("B16").Value 'récupère le nom correspondant à Vita B
dest1.Offset(23, 0).Value = os1.Range("B26").Value 'récupère le nom correspondant à Vita C
'récap couteaux
dest2.Value = cs.Name 'place le nom du classeur
os2.Range("E4:G43").Copy 'copie la plage utile plus une colonne
dest2.Offset(1, 0).PasteSpecial (xlPasteColumnWidths) 'colle la largeur des colonnes
os2.Range("E4:F43").Copy dest2.Offset(1, 0) 'copie/colle la plage utile
dest2.Offset(4, 0).Value = os2.Range("B7").Value 'récupère le nom correspondant à Vita A
dest2.Offset(15, 0).Value = os2.Range("B18").Value 'récupère le nom correspondant à Vita b
dest2.Offset(26, 0).Value = os2.Range("B29").Value 'récupère le nom correspondant à Vita A
dest2.Offset(37, 0).Value = os2.Range("B40").Value 'récupère le nom correspondant à Inter MAR
'récap fourchettes
dest3.Value = cs.Name 'place le nom du classeur
os3.Range("E4:I35").Copy 'copie la plage utile plus une colonne
dest3.Offset(1, 0).PasteSpecial (xlPasteColumnWidths) 'colle la largeur des colonnes
os3.Range("E4:H35").Copy dest3.Offset(1, 0) 'copie/colle la plage utile
dest3.Offset(4, 0).Value = os3.Range("B7").Value 'récupère le nom correspondant à Vita b
dest3.Offset(13, 0).Value = os3.Range("B16").Value 'récupère le nom correspondant à Vita b
dest3.Offset(25, 0).Value = os3.Range("B28").Value 'récupère le nom correspondant à Vita b
cs.Close 'ferme le classeur de données
End If 'fin de la condition
Next f 'prochain classeur de la boucle
od3.Select: Range("A1").Select 'sélectionne la cellule A1
od2.Select: Range("A1").Select 'sélectionne la cellule A1
od1.Select: Range("A1").Select 'sélectionne la cellule A1
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub
Sub Macro1()
Dim cd As Workbook 'déclare la variable cd (Classeur Destination)
Dim od1 As Object 'déclare la variable od1 (Onglet Destination 1)
Dim od2 As Object 'déclare la variable od2 (Onglet Destination 2)
Dim od3 As Object 'déclare la variable od3 (Onglet Destination 3)
Dim ch As String 'déclare la variable ch (CHemin)
Dim sf As Object 'déclare la variable sf (Système de Fichiers)
Dim d As Object 'déclare la variable d (Dossier)
Dim o As Object 'déclare la variable o (Onglets)
Dim fs As Object 'déclare la variable fs (FichierS)
Dim f As Object 'déclare la variable f (Fichier)
Dim cs As Workbook 'déclare la variable cs (Classeur Source)
Dim os1 As Object 'déclare la variable os (Onglet Source 1)
Dim os2 As Object 'déclare la variable os (Onglet Source 2)
Dim os3 As Object 'déclare la variable os (Onglet Source 3)
Dim dest1 As Range 'déclare la variable dest1 (cellule de DESTination 1)
Dim dest2 As Range 'déclare la variable dest2 (cellule de DESTination 2)
Dim dest3 As Range 'déclare la variable dest3 (cellule de DESTination 3)
Dim plc As Range 'déclare la variable plc (PLage sous Condition)
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set cd = ThisWorkbook 'définit le classeur destination cd
ch = cd.Path 'définit la chemin
Set od1 = cd.Sheets("Récap cuilliere") 'définit l'onglet de destination od1
Set od2 = cd.Sheets("Récap couteau") 'définit l'onglet de destination od2
Set od3 = cd.Sheets("Récap Fourchettes") 'définit l'onglet de destination od3
'suppression des anciennes données
od1.Range("E1:" & od1.Cells(5, Application.Columns.Count).Address(0, 0)).EntireColumn.Delete 'supprime les colonnes E à... dernière
od2.Range("E1:" & od2.Cells(5, Application.Columns.Count).Address(0, 0)).EntireColumn.Delete 'supprime les colonnes E à... dernière
od3.Range("E1:" & od3.Cells(5, Application.Columns.Count).Address(0, 0)).EntireColumn.Delete 'supprime les colonnes E à... dernière
Set sf = CreateObject("Scripting.FileSystemObject") 'définit la variable sf
Set d = sf.getfolder(ch) 'définit la variable d
Set fs = d.Files 'définit la variable fs
For Each f In fs 'boucles sur touts les fichiers du dossier d
'condition : si le fichier f à une extension ".xls" et commence par "Méto site"
If Right(f.Name, 4) = ".xls" And Left(f.Name, 9) = "Méto site" Then
'définit dest1 (E3 si E3 est vide, sinon la première colonne vide de la ligne 3 décalée de 5 colonnes à droite)
Set dest1 = IIf(od1.Range("E3").Value = "", od1.Range("E3"), od1.Cells(3, Application.Columns.Count).End(xlToLeft).Offset(0, 5))
'définit dest2 (E3 si E3 est vide, sinon la première colonne vide de la ligne 3 décalée de 3 colonnes à droite)
Set dest2 = IIf(od2.Range("E3").Value = "", od2.Range("E3"), od2.Cells(3, Application.Columns.Count).End(xlToLeft).Offset(0, 3))
'définit dest3 (E3 si E3 est vide, sinon la première colonne vide de la ligne 3 décalée de 5 colonnes à droite)
Set dest3 = IIf(od3.Range("E3").Value = "", od3.Range("E3"), od3.Cells(3, Application.Columns.Count).End(xlToLeft).Offset(0, 5))
Workbooks.Open f 'ouvre le fichier
Set cs = ActiveWorkbook 'définit le classeur source cs
Set os1 = cs.Sheets("cuilliere") 'définit l'onglet source os1
Set os2 = cs.Sheets("couteau") 'définit l'onglet source os2
Set os3 = cs.Sheets("Fourchettes") 'définit l'onglet source os3
Set plc = IIf(os1.Range("B7").Value = "toto", os1.Range("F4:I32"), os1.Range("E4:H32")) 'définit la plage plc (à adapter car j'ai pas bien compris)
'récap cuillères
dest1.Value = cs.Name 'place le nom du classeur
plc.Resize(plc.Rows.Count, plc.Columns.Count + 1).Copy 'copie la plage plc plus une colonne
dest1.Offset(1, 0).PasteSpecial (xlPasteColumnWidths) 'colle la largeur des colonnes
plc.Copy dest1.Offset(1, 0) 'copie/colle la plage plc
dest1.Offset(4, 0).Value = os1.Range("B7").Value 'récupère le nom correspondant à Vita A
dest1.Offset(13, 0).Value = os1.Range("B16").Value 'récupère le nom correspondant à Vita B
dest1.Offset(23, 0).Value = os1.Range("B26").Value 'récupère le nom correspondant à Vita C
'récap couteaux
dest2.Value = cs.Name 'place le nom du classeur
os2.Range("E4:G43").Copy 'copie la plage utile plus une colonne
dest2.Offset(1, 0).PasteSpecial (xlPasteColumnWidths) 'colle la largeur des colonnes
os2.Range("E4:F43").Copy dest2.Offset(1, 0) 'copie/colle la plage utile
dest2.Offset(4, 0).Value = os2.Range("B7").Value 'récupère le nom correspondant à Vita A
dest2.Offset(15, 0).Value = os2.Range("B18").Value 'récupère le nom correspondant à Vita b
dest2.Offset(26, 0).Value = os2.Range("B29").Value 'récupère le nom correspondant à Vita A
dest2.Offset(37, 0).Value = os2.Range("B40").Value 'récupère le nom correspondant à Inter MAR
'récap fourchettes
dest3.Value = cs.Name 'place le nom du classeur
os3.Range("E4:I35").Copy 'copie la plage utile plus une colonne
dest3.Offset(1, 0).PasteSpecial (xlPasteColumnWidths) 'colle la largeur des colonnes
os3.Range("E4:H35").Copy dest3.Offset(1, 0) 'copie/colle la plage utile
dest3.Offset(4, 0).Value = os3.Range("B7").Value 'récupère le nom correspondant à Vita b
dest3.Offset(13, 0).Value = os3.Range("B16").Value 'récupère le nom correspondant à Vita b
dest3.Offset(25, 0).Value = os3.Range("B28").Value 'récupère le nom correspondant à Vita b
cs.Close 'ferme le classeur de données
End If 'fin de la condition
Next f 'prochain classeur de la boucle
od3.Select: Range("A1").Select 'sélectionne la cellule A1
od2.Select: Range("A1").Select 'sélectionne la cellule A1
od1.Select: Range("A1").Select 'sélectionne la cellule A1
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub
Bonjour Auverland, bonjour le forum,
Ce numéro d'erreur indique que l'indice n'appartient pas à la sélection. Vérifie le nom des onglets du second fichiers. Il faut qu'il soit exactement identique à couteau. Pas un espace en plus au début ou à la fin, pas un x à la fin.
Dim os1 As Object
Dim sh As Object
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set os1 = Sheets("cuilliere") 'définit l'onglet o (génère une erreur si l'onglet "test" n'existe pas)
If Err <> 0 Then 'condition : si une erreur a été générée
Err = 0 'annule l'erreur
For Each sh In Sheets 'boucle sur tous les onglets du classeur
If sh.Name Like "*cuilliere*" Then 'condition : si le nom de l'onglet contient "cuilliere"
Set os1 = sh 'définit l'onglet os1
Exit For 'sort de la boucle
End If 'fin de la condition
Next sh 'prochain onglet de la boucle
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
Sub Macro1()
Dim cd As Workbook 'déclare la variable cd (Classeur Destination)
Dim od1 As Object 'déclare la variable od1 (Onglet Destination 1)
Dim od2 As Object 'déclare la variable od2 (Onglet Destination 2)
Dim od3 As Object 'déclare la variable od3 (Onglet Destination 3)
Dim ch As String 'déclare la variable ch (CHemin)
Dim sf As Object 'déclare la variable sf (Système de Fichiers)
Dim d As Object 'déclare la variable d (Dossier)
Dim o As Object 'déclare la variable o (Onglets)
Dim fs As Object 'déclare la variable fs (FichierS)
Dim f As Object 'déclare la variable f (Fichier)
Dim cs As Workbook 'déclare la variable cs (Classeur Source)
Dim os1 As Object 'déclare la variable os (Onglet Source 1)
Dim os2 As Object 'déclare la variable os (Onglet Source 2)
Dim os3 As Object 'déclare la variable os (Onglet Source 3)
Dim dest1 As Range 'déclare la variable dest1 (cellule de DESTination 1)
Dim dest2 As Range 'déclare la variable dest2 (cellule de DESTination 2)
Dim dest3 As Range 'déclare la variable dest3 (cellule de DESTination 3)
Dim plc As Range 'déclare la variable plc (PLage sous Condition)
Dim test As Boolean 'décalre la variable test
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set cd = ThisWorkbook 'définit le classeur destination cd
ch = cd.Path 'définit la chemin
Set od1 = cd.Sheets("Récap cuilliere") 'définit l'onglet de destination od1
Set od2 = cd.Sheets("Récap couteau") 'définit l'onglet de destination od2
Set od3 = cd.Sheets("Récap Fourchettes") 'définit l'onglet de destination od3
'suppression des anciennes données
od1.Range("E1:" & od1.Cells(5, Application.Columns.Count).Address(0, 0)).EntireColumn.Delete 'supprime les colonnes E à... dernière
od2.Range("E1:" & od2.Cells(5, Application.Columns.Count).Address(0, 0)).EntireColumn.Delete 'supprime les colonnes E à... dernière
od3.Range("E1:" & od3.Cells(5, Application.Columns.Count).Address(0, 0)).EntireColumn.Delete 'supprime les colonnes E à... dernière
Set sf = CreateObject("Scripting.FileSystemObject") 'définit la variable sf
Set d = sf.getfolder(ch) 'définit la variable d
Set fs = d.Files 'définit la variable fs
For Each f In fs 'boucles sur touts les fichiers du dossier d
'condition : si le fichier f à une extension ".xls" et commence par "Méto site"
If Right(f.Name, 4) = ".xls" And Left(f.Name, 9) = "Méto site" Then
'définit dest1 (E3 si E3 est vide, sinon la première colonne vide de la ligne 3 décalée de 5 colonnes à droite)
Set dest1 = IIf(od1.Range("E3").Value = "", od1.Range("E3"), od1.Cells(3, Application.Columns.Count).End(xlToLeft).Offset(0, 5))
'définit dest2 (E3 si E3 est vide, sinon la première colonne vide de la ligne 3 décalée de 3 colonnes à droite)
Set dest2 = IIf(od2.Range("E3").Value = "", od2.Range("E3"), od2.Cells(3, Application.Columns.Count).End(xlToLeft).Offset(0, 3))
'définit dest3 (E3 si E3 est vide, sinon la première colonne vide de la ligne 3 décalée de 5 colonnes à droite)
Set dest3 = IIf(od3.Range("E3").Value = "", od3.Range("E3"), od3.Cells(3, Application.Columns.Count).End(xlToLeft).Offset(0, 5))
Workbooks.Open f 'ouvre le fichier
Set cs = ActiveWorkbook 'définit le classeur source cs
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set os1 = Sheets("cuilliere") 'définit l'onglet o (génère une erreur si l'onglet "test" n'existe pas)
If Err <> 0 Then 'condition : si une erreur a été générée
Err = 0 'annule l'erreur
For Each sh In Sheets 'boucle sur tous les onglets du classeur
If sh.Name Like "*cuilliere*" Then 'condition : si le nom de l'onglet contient "cuilliere"
Set os1 = sh 'définit l'onglet os1
test = True
Exit For 'sort de la boucle
End If
Next sh 'prochain onglet de la boucle
If test = False Then
ActiveWorkbook.Sheets.Add
ActiveSheet.Name = "Cuilliere"
Set os1 = ActiveSheet
End If 'fin de la condition
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
Set os2 = cs.Sheets("couteau") 'définit l'onglet source os2
Set os3 = cs.Sheets("Fourchettes") 'définit l'onglet source os3
Set plc = IIf(os1.Range("B7").Value = "toto", os1.Range("F4:I32"), os1.Range("E4:H32")) 'définit la plage plc (à adapter car j'ai pas bien compris)
'récap cuillères
dest1.Value = cs.Name 'place le nom du classeur
plc.Resize(plc.Rows.Count, plc.Columns.Count + 1).Copy 'copie la plage plc plus une colonne
dest1.Offset(1, 0).PasteSpecial (xlPasteColumnWidths) 'colle la largeur des colonnes
plc.Copy dest1.Offset(1, 0) 'copie/colle la plage plc
dest1.Offset(4, 0).Value = os1.Range("B7").Value 'récupère le nom correspondant à Vita A
dest1.Offset(13, 0).Value = os1.Range("B16").Value 'récupère le nom correspondant à Vita B
dest1.Offset(23, 0).Value = os1.Range("B26").Value 'récupère le nom correspondant à Vita C
'récap couteaux
dest2.Value = cs.Name 'place le nom du classeur
os2.Range("E4:G43").Copy 'copie la plage utile plus une colonne
dest2.Offset(1, 0).PasteSpecial (xlPasteColumnWidths) 'colle la largeur des colonnes
os2.Range("E4:F43").Copy dest2.Offset(1, 0) 'copie/colle la plage utile
dest2.Offset(4, 0).Value = os2.Range("B7").Value 'récupère le nom correspondant à Vita A
dest2.Offset(15, 0).Value = os2.Range("B18").Value 'récupère le nom correspondant à Vita b
dest2.Offset(26, 0).Value = os2.Range("B29").Value 'récupère le nom correspondant à Vita A
dest2.Offset(37, 0).Value = os2.Range("B40").Value 'récupère le nom correspondant à Inter MAR
'récap fourchettes
dest3.Value = cs.Name 'place le nom du classeur
os3.Range("E4:I35").Copy 'copie la plage utile plus une colonne
dest3.Offset(1, 0).PasteSpecial (xlPasteColumnWidths) 'colle la largeur des colonnes
os3.Range("E4:H35").Copy dest3.Offset(1, 0) 'copie/colle la plage utile
dest3.Offset(4, 0).Value = os3.Range("B7").Value 'récupère le nom correspondant à Vita b
dest3.Offset(13, 0).Value = os3.Range("B16").Value 'récupère le nom correspondant à Vita b
dest3.Offset(25, 0).Value = os3.Range("B28").Value 'récupère le nom correspondant à Vita b
cs.Close 'ferme le classeur de données
End If 'fin de la condition
Next f 'prochain classeur de la boucle
od3.Select: Range("A1").Select 'sélectionne la cellule A1
od2.Select: Range("A1").Select 'sélectionne la cellule A1
od1.Select: Range("A1").Select 'sélectionne la cellule A1
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub
We use cookies and similar technologies for the following purposes:
Est ce que vous acceptez les cookies et ces technologies?
We use cookies and similar technologies for the following purposes:
Est ce que vous acceptez les cookies et ces technologies?