nat54
XLDnaute Barbatruc
Bonjour,
Je pense que ré-ouvrir un fil ne sera pas mal vu.. voire même bien vu !
C'est la suite d'ici : https://www.excel-downloads.com/threads/vba-effacer-une-plage-qui-varie-selon-les-onglets.190183/
Super la méthode d'Eric S, je rencontre tout de même un souci (enfin 2..)
Code vba:
Sub Construire_fiches()
FinTableauMapping = Sheets("Mapping").Range("A" & "65535").End(xlUp).Row
For i = 2 To FinTableauMapping
CodePole = Workbooks("FICHES_SYNTHETIQUES_DRH_par_pôle.xls").Sheets("Mapping").Range("a" & i).Value
' Déterminer les différents tableaux
Sheets("3580").Select
LigneDebut1 = WorksheetFunction.Match("1. Effectifs", Range("C:C"), 0) + 2
LigneFin1 = WorksheetFunction.Match("TOTAL POCPBU", Range("C:C"), 0) - 1
LigneDebut2 = WorksheetFunction.Match("2. Absences longues prévisionnelles (AT/LM/LD/MAT/MPRO)", Range("C:C"), 0) + 2
LigneFin2 = WorksheetFunction.Match("3. Entrées prévisionnelles", Range("C:C"), 0) - 2
LigneDebut3 = WorksheetFunction.Match("3. Entrées prévisionnelles", Range("C:C"), 0) + 2
LigneFin3 = WorksheetFunction.Match("4. Sorties prévisionnelles", Range("C:C"), 0) - 2
LigneDebut4 = WorksheetFunction.Match("4. Sorties prévisionnelles", Range("C:C"), 0) + 2
LigneFin4 = Range("C" & Rows.Count).End(xlUp).Row + 1
' Effacer les anciennes données
Range("C" & LigneDebut2 & ":L" & LigneFin2).ClearContents
Range("C" & LigneDebut3 & ":K" & LigneFin3).ClearContents
Range("C" & LigneDebut4 & ":K" & LigneFin4).ClearContents
''' ABSENTEISME PREVISIONNEL
' Filtrer sur le pôle en question dans le fichier Abs prev
Workbooks.Open ("I:\DRH\EFFECTIF\Fiches_synthétiques_par_pôle\Abs_longues_prev_pour_fiche_synth.xls")
Selection.AutoFilter Field:=1, Criteria1:=CodePole 'field 1 = colonne A, pôle XXXX
' Copier cette sélection
Range("c2").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
' Coller cette sélection dans le bon tableau
Windows("FICHES_SYNTHETIQUES_DRH_par_pôle.xls").Activate
Range("C" & LigneDebut2).Activate
Selection.PasteSpecial Paste:=xlValues
''' ENTREES PREVISIONNELLES
' Filtrer sur le pôle en question dans le fichier Abs prev
Workbooks.Open ("I:\DRH\EFFECTIF\Fiches_synthétiques_par_pôle\Entrées-prev_pour_fiche_synth.xls")
Selection.AutoFilter Field:=1, Criteria1:=CodePole 'field 1 = colonne A, pôle XXXX
' Copier cette sélection
Range("c2").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
' Coller cette sélection dans le bon tableau
Windows("FICHES_SYNTHETIQUES_DRH_par_pôle.xls").Activate
Range("C" & LigneDebut3).Activate
Selection.PasteSpecial Paste:=xlValues
''' SORTIES PREVISIONNELLES
' Filtrer sur le pôle en question dans le fichier Abs prev
Workbooks.Open ("I:\DRH\EFFECTIF\Fiches_synthétiques_par_pôle\Sorties-prev_pour_fiche_synth.xls")
Selection.AutoFilter Field:=1, Criteria1:=CodePole 'field 1 = colonne A, pôle XXXX
' Copier cette sélection
Range("c2").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
' Coller cette sélection dans le bon tableau
Windows("FICHES_SYNTHETIQUES_DRH_par_pôle.xls").Activate
Range("C" & LigneDebut4).Activate
Selection.PasteSpecial Paste:=xlValues
Next
' Fermer les classeurs d'export
Windows("Abs_longues_prev_pour_fiche_synth.xls").Activate
ActiveWorkbook.Close False
Windows("Entrées-prev_pour_fiche_synth.xls").Activate
ActiveWorkbook.Close False
Windows("Sorties-prev_pour_fiche_synth.xls").Activate
ActiveWorkbook.Close False
End Sub
Problème n°1
Lorsque je filtre par exemple le fichier Entrées_prévisionnelles et que sur le pôle en question il n'y a pas d'entrée prévisionnelle, le "collage spécial" plante car bien sûr la plage est trop grande
comment tester et dire qqch comme "si le filtre ne donne rien sauter l'étape collage"
Problème n°2
Au tout début du code
sheets"3580".Select
comment variabiliser cela et dire de sélectionner l'onglet de la variable CodePole (pour la boucle)
Merci d'avance,
Je pense que ré-ouvrir un fil ne sera pas mal vu.. voire même bien vu !
C'est la suite d'ici : https://www.excel-downloads.com/threads/vba-effacer-une-plage-qui-varie-selon-les-onglets.190183/
Super la méthode d'Eric S, je rencontre tout de même un souci (enfin 2..)
Code vba:
Sub Construire_fiches()
FinTableauMapping = Sheets("Mapping").Range("A" & "65535").End(xlUp).Row
For i = 2 To FinTableauMapping
CodePole = Workbooks("FICHES_SYNTHETIQUES_DRH_par_pôle.xls").Sheets("Mapping").Range("a" & i).Value
' Déterminer les différents tableaux
Sheets("3580").Select
LigneDebut1 = WorksheetFunction.Match("1. Effectifs", Range("C:C"), 0) + 2
LigneFin1 = WorksheetFunction.Match("TOTAL POCPBU", Range("C:C"), 0) - 1
LigneDebut2 = WorksheetFunction.Match("2. Absences longues prévisionnelles (AT/LM/LD/MAT/MPRO)", Range("C:C"), 0) + 2
LigneFin2 = WorksheetFunction.Match("3. Entrées prévisionnelles", Range("C:C"), 0) - 2
LigneDebut3 = WorksheetFunction.Match("3. Entrées prévisionnelles", Range("C:C"), 0) + 2
LigneFin3 = WorksheetFunction.Match("4. Sorties prévisionnelles", Range("C:C"), 0) - 2
LigneDebut4 = WorksheetFunction.Match("4. Sorties prévisionnelles", Range("C:C"), 0) + 2
LigneFin4 = Range("C" & Rows.Count).End(xlUp).Row + 1
' Effacer les anciennes données
Range("C" & LigneDebut2 & ":L" & LigneFin2).ClearContents
Range("C" & LigneDebut3 & ":K" & LigneFin3).ClearContents
Range("C" & LigneDebut4 & ":K" & LigneFin4).ClearContents
''' ABSENTEISME PREVISIONNEL
' Filtrer sur le pôle en question dans le fichier Abs prev
Workbooks.Open ("I:\DRH\EFFECTIF\Fiches_synthétiques_par_pôle\Abs_longues_prev_pour_fiche_synth.xls")
Selection.AutoFilter Field:=1, Criteria1:=CodePole 'field 1 = colonne A, pôle XXXX
' Copier cette sélection
Range("c2").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
' Coller cette sélection dans le bon tableau
Windows("FICHES_SYNTHETIQUES_DRH_par_pôle.xls").Activate
Range("C" & LigneDebut2).Activate
Selection.PasteSpecial Paste:=xlValues
''' ENTREES PREVISIONNELLES
' Filtrer sur le pôle en question dans le fichier Abs prev
Workbooks.Open ("I:\DRH\EFFECTIF\Fiches_synthétiques_par_pôle\Entrées-prev_pour_fiche_synth.xls")
Selection.AutoFilter Field:=1, Criteria1:=CodePole 'field 1 = colonne A, pôle XXXX
' Copier cette sélection
Range("c2").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
' Coller cette sélection dans le bon tableau
Windows("FICHES_SYNTHETIQUES_DRH_par_pôle.xls").Activate
Range("C" & LigneDebut3).Activate
Selection.PasteSpecial Paste:=xlValues
''' SORTIES PREVISIONNELLES
' Filtrer sur le pôle en question dans le fichier Abs prev
Workbooks.Open ("I:\DRH\EFFECTIF\Fiches_synthétiques_par_pôle\Sorties-prev_pour_fiche_synth.xls")
Selection.AutoFilter Field:=1, Criteria1:=CodePole 'field 1 = colonne A, pôle XXXX
' Copier cette sélection
Range("c2").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
' Coller cette sélection dans le bon tableau
Windows("FICHES_SYNTHETIQUES_DRH_par_pôle.xls").Activate
Range("C" & LigneDebut4).Activate
Selection.PasteSpecial Paste:=xlValues
Next
' Fermer les classeurs d'export
Windows("Abs_longues_prev_pour_fiche_synth.xls").Activate
ActiveWorkbook.Close False
Windows("Entrées-prev_pour_fiche_synth.xls").Activate
ActiveWorkbook.Close False
Windows("Sorties-prev_pour_fiche_synth.xls").Activate
ActiveWorkbook.Close False
End Sub
Problème n°1
Lorsque je filtre par exemple le fichier Entrées_prévisionnelles et que sur le pôle en question il n'y a pas d'entrée prévisionnelle, le "collage spécial" plante car bien sûr la plage est trop grande
comment tester et dire qqch comme "si le filtre ne donne rien sauter l'étape collage"
Problème n°2
Au tout début du code
sheets"3580".Select
comment variabiliser cela et dire de sélectionner l'onglet de la variable CodePole (pour la boucle)
Merci d'avance,