OVH Cloud OVH Cloud

Copie de Feuilles + Filtre

3 réponses
Avatar
quent1
Bonjour,

Je cherche à automatiser le processus suivant :

A partir d'une feuille GLOBALE qui contient des données filtrées (4000
lignes), je dois créer chaque mois une feuille par SECTION BUDGETAIRE
(col B). (Je précise que la liste des sections peut varier)

Jusqu'à présent et compte tenu de mes faibles connaissances en VBA, je
faisais ce processus en 3 étapes.

- Etape 1 : COPIE DU NOMBRE DE FEUILLES NECESSAIRES
MACRO1
' compte le nb de feuilles nécessaires
Range("B13").FormulaArray =
"=SUM(1/COUNTIF(PlageSection,PlageSection))"
nbfeuilles = Range("B13").Value

'boucle de copie
For i = 1 To nbfeuilles
Sheets(2).Copy after:=Worksheets(Sheets.Count)
Next i

-Etape 2 : EFFACER LES DONNEES NON NECESSAIRES SUR CHAQUE FEUILLE
Filtre automatique : Différent de section XXX
Suppression des lignes affichées par le filtre
Afficher tout

-Etape 3 : RENOMMER LES FEUILLES PAR LE N° DE SECTION (affiché en B15)
MACRO2 (trouvé sur MPFE)
On Error Resume Next
For Each sht In ActiveWorkbook.Worksheets
Sheets(Sht.Name).Name=Sheets(sht.Name).[B15]
Next

Mon Projet serait d'automatiser complètement ces 3 étapes par une
seule et même MACRO. Je ne sais pas comment créer une liste des
SECTIONS pour ensuite tenter de programmer un autofilter...

Avez vous un solution ?

Merci de votre aide.

Quentin

3 réponses

Avatar
Daniel
Pour l'étape 2 (j'ai supposé que les numéros de section étaient en colonne
B), je te propose :
Range("b1").Select
Do While ActiveCell <> ""
If ActiveCell.Value <> "numéro de section"Then
ActiveCell.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
Cordialement.
Daniel
"quent1" a écrit dans le message de news:

Bonjour,

Je cherche à automatiser le processus suivant :

A partir d'une feuille GLOBALE qui contient des données filtrées (4000
lignes), je dois créer chaque mois une feuille par SECTION BUDGETAIRE
(col B). (Je précise que la liste des sections peut varier)

Jusqu'à présent et compte tenu de mes faibles connaissances en VBA, je
faisais ce processus en 3 étapes.

- Etape 1 : COPIE DU NOMBRE DE FEUILLES NECESSAIRES
MACRO1
' compte le nb de feuilles nécessaires
Range("B13").FormulaArray > "=SUM(1/COUNTIF(PlageSection,PlageSection))"
nbfeuilles = Range("B13").Value

'boucle de copie
For i = 1 To nbfeuilles
Sheets(2).Copy after:=Worksheets(Sheets.Count)
Next i

-Etape 2 : EFFACER LES DONNEES NON NECESSAIRES SUR CHAQUE FEUILLE
Filtre automatique : Différent de section XXX
Suppression des lignes affichées par le filtre
Afficher tout

-Etape 3 : RENOMMER LES FEUILLES PAR LE N° DE SECTION (affiché en B15)
MACRO2 (trouvé sur MPFE)
On Error Resume Next
For Each sht In ActiveWorkbook.Worksheets
Sheets(Sht.Name).Name=Sheets(sht.Name).[B15]
Next

Mon Projet serait d'automatiser complètement ces 3 étapes par une
seule et même MACRO. Je ne sais pas comment créer une liste des
SECTIONS pour ensuite tenter de programmer un autofilter...

Avez vous un solution ?

Merci de votre aide.

Quentin


Avatar
Quent1
Bonsoir,

En partant sur cette base, sachant que mes numéros de section ne suivent pas
un ordre logique (201, 226, 230...), j'ai écrit ce que celà donnerait si les
boucles n'existaient pas...

J'ai listé les sections dans un tableau que j'ai placé dans la sheet(1) mais
Je ne sais pas comment me servir de cette liste pour former les différentes
variables de ma macro...


Sheet(3).Select
Range("b15").Select
Do While ActiveCell <> ""
If ActiveCell.Value <> "201" Then
ActiveCell.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Loop

Sheet(4).Select
Range("b15").Select
Do While ActiveCell <> ""
If ActiveCell.Value <> "226" Then
ActiveCell.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Loop

Sheet(5).Select
Range("b15").Select
Do While ActiveCell <> ""
If ActiveCell.Value <> "230" Then
ActiveCell.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Loop

.....

Comment Faire ?
"Daniel" a écrit dans le message de news:

Pour l'étape 2 (j'ai supposé que les numéros de section étaient en colonne
B), je te propose :
Range("b1").Select
Do While ActiveCell <> ""
If ActiveCell.Value <> "numéro de section"Then
ActiveCell.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
Cordialement.
Daniel
"quent1" a écrit dans le message de news:

Bonjour,

Je cherche à automatiser le processus suivant :

A partir d'une feuille GLOBALE qui contient des données filtrées (4000
lignes), je dois créer chaque mois une feuille par SECTION BUDGETAIRE
(col B). (Je précise que la liste des sections peut varier)

Jusqu'à présent et compte tenu de mes faibles connaissances en VBA, je
faisais ce processus en 3 étapes.

- Etape 1 : COPIE DU NOMBRE DE FEUILLES NECESSAIRES
MACRO1
' compte le nb de feuilles nécessaires
Range("B13").FormulaArray >> "=SUM(1/COUNTIF(PlageSection,PlageSection))"
nbfeuilles = Range("B13").Value

'boucle de copie
For i = 1 To nbfeuilles
Sheets(2).Copy after:=Worksheets(Sheets.Count)
Next i

-Etape 2 : EFFACER LES DONNEES NON NECESSAIRES SUR CHAQUE FEUILLE
Filtre automatique : Différent de section XXX
Suppression des lignes affichées par le filtre
Afficher tout

-Etape 3 : RENOMMER LES FEUILLES PAR LE N° DE SECTION (affiché en B15)
MACRO2 (trouvé sur MPFE)
On Error Resume Next
For Each sht In ActiveWorkbook.Worksheets
Sheets(Sht.Name).Name=Sheets(sht.Name).[B15]
Next

Mon Projet serait d'automatiser complètement ces 3 étapes par une
seule et même MACRO. Je ne sais pas comment créer une liste des
SECTIONS pour ensuite tenter de programmer un autofilter...

Avez vous un solution ?

Merci de votre aide.

Quentin






Avatar
Daniel
Si le numéro de section est en B13 ?
tu peux mettre :
For i=3 to sheets(count)
Range("b15").Select
Do While ActiveCell <> ""
If ActiveCell.Value <> range("B13").value Then
ActiveCell.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
next i
Cordialement.
Daniel

"Quent1" a écrit dans le message de news:
41fd1b44$0$14447$
Bonsoir,

En partant sur cette base, sachant que mes numéros de section ne suivent
pas un ordre logique (201, 226, 230...), j'ai écrit ce que celà donnerait
si les boucles n'existaient pas...

J'ai listé les sections dans un tableau que j'ai placé dans la sheet(1)
mais Je ne sais pas comment me servir de cette liste pour former les
différentes variables de ma macro...


Sheet(3).Select
Range("b15").Select
Do While ActiveCell <> ""
If ActiveCell.Value <> "201" Then
ActiveCell.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Loop

Sheet(4).Select
Range("b15").Select
Do While ActiveCell <> ""
If ActiveCell.Value <> "226" Then
ActiveCell.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Loop

Sheet(5).Select
Range("b15").Select
Do While ActiveCell <> ""
If ActiveCell.Value <> "230" Then
ActiveCell.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Loop

.....

Comment Faire ?
"Daniel" a écrit dans le message de news:

Pour l'étape 2 (j'ai supposé que les numéros de section étaient en
colonne B), je te propose :
Range("b1").Select
Do While ActiveCell <> ""
If ActiveCell.Value <> "numéro de section"Then
ActiveCell.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
Cordialement.
Daniel
"quent1" a écrit dans le message de news:

Bonjour,

Je cherche à automatiser le processus suivant :

A partir d'une feuille GLOBALE qui contient des données filtrées (4000
lignes), je dois créer chaque mois une feuille par SECTION BUDGETAIRE
(col B). (Je précise que la liste des sections peut varier)

Jusqu'à présent et compte tenu de mes faibles connaissances en VBA, je
faisais ce processus en 3 étapes.

- Etape 1 : COPIE DU NOMBRE DE FEUILLES NECESSAIRES
MACRO1
' compte le nb de feuilles nécessaires
Range("B13").FormulaArray >>> "=SUM(1/COUNTIF(PlageSection,PlageSection))"
nbfeuilles = Range("B13").Value

'boucle de copie
For i = 1 To nbfeuilles
Sheets(2).Copy after:=Worksheets(Sheets.Count)
Next i

-Etape 2 : EFFACER LES DONNEES NON NECESSAIRES SUR CHAQUE FEUILLE
Filtre automatique : Différent de section XXX
Suppression des lignes affichées par le filtre
Afficher tout

-Etape 3 : RENOMMER LES FEUILLES PAR LE N° DE SECTION (affiché en B15)
MACRO2 (trouvé sur MPFE)
On Error Resume Next
For Each sht In ActiveWorkbook.Worksheets
Sheets(Sht.Name).Name=Sheets(sht.Name).[B15]
Next

Mon Projet serait d'automatiser complètement ces 3 étapes par une
seule et même MACRO. Je ne sais pas comment créer une liste des
SECTIONS pour ensuite tenter de programmer un autofilter...

Avez vous un solution ?

Merci de votre aide.

Quentin