Grand merci à qui voudra bien m'aider à modifier ce code pour qu'il copie
chacune des 17 zones (A2:D10, A13:D21, ...) d'un nombre de feuilles entre 28
et 31 (suivant les mois) sur la feuille "TOTAL", de manière à ce que les
premières (A2:D10) soient les unes sous les autres à partir de la cellule
A2, les deuxièmes les unes sous les autres à partir de la cellule F2, etc...
Un titre est déja inscrit dans les cellules de la ligne 1.
J'ai pensé à une boucle pour décaler chaque zone à copier (en la définissant
avec offset? ) mais ça dépasse mes connaissances actuelles.
Question subsidiaire :
Dans un cas comme celui-ci, est-il plus judicieux de traiter chaque zone de
la première feuille, puis de la suivante, ou bien la première zone de chaque
feuille, puis la zone suivante?
Bien cordialement,
Patrick.
Sub Recopie()
For f = 1 To 8
'modifier pour compter le nb réel de feuilles dans le classeur(-1 pour
"TOTAL")
ThisWorkbook.Worksheets(ThisWorkbook.ActiveSheet.Index + f).Select
Range("A2:D10").Copy
Sheets("TOTAL").Select
Range("A65536").End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues
'ici, la sélection se fait sur "TOTAL", et non sur la bonne feuille
Range("A13:D21").Copy
Sheets("TOTAL").Select
Range("f65536").End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues
Next f
Range("A1:I1").Select
Selection.AutoFilter
End Sub
Je l'ai allégé, mais j'ai gardé la structure avec les onglets annexes, et il fait 250 KO.
Bien cordialement,
Patrick.
http://cjoint.com/?bpxBJK3pV3
Envoie-moi ton classeur si tu veux en enlevant "ASupp"
Daniel.M
Salut Patrick
Quelques erreurs :
On exclue certains onglets en les reliant par des AND (pas par des OR) Le 'i' doit être incrémenté à l'intérieur du If La formulation de copie peut être abrégée et elle copiait 9 lignes dans 17.
Ça donne :
Sub Report() Dim z As Integer Dim TCol As Integer, TLig As Long Dim FLig As Long Dim F As Worksheet
Application.ScreenUpdating = False Sheets("Anomalies").Activate TLig = 2 ' Ligne de départ pour la zone de destination (sur Anomalies)
For Each F In ThisWorkbook.Sheets
If F.Name <> "Anomalies" And F.Name <> "Administration" _ And F.Name <> "Premier" And F.Name <> "Modèle" _ And F.Name <> "TOTAL" _ Then
TCol = 1 FLig = 2 For z = 0 To 21 Cells(TLig, TCol).Resize(9, 4).Value = _ F.Cells(FLig, 1).Resize(9, 4).Value TCol = TCol + 5 FLig = FLig + 9 Next TLig = TLig + 9 End If Next F
End Sub
Salutations,
Daniel M.
Salut Patrick
Quelques erreurs :
On exclue certains onglets en les reliant par des AND (pas par des OR)
Le 'i' doit être incrémenté à l'intérieur du If
La formulation de copie peut être abrégée et elle copiait 9 lignes dans 17.
Ça donne :
Sub Report()
Dim z As Integer
Dim TCol As Integer, TLig As Long
Dim FLig As Long
Dim F As Worksheet
Application.ScreenUpdating = False
Sheets("Anomalies").Activate
TLig = 2 ' Ligne de départ pour la zone de destination (sur Anomalies)
For Each F In ThisWorkbook.Sheets
If F.Name <> "Anomalies" And F.Name <> "Administration" _
And F.Name <> "Premier" And F.Name <> "Modèle" _
And F.Name <> "TOTAL" _
Then
TCol = 1
FLig = 2
For z = 0 To 21
Cells(TLig, TCol).Resize(9, 4).Value = _
F.Cells(FLig, 1).Resize(9, 4).Value
TCol = TCol + 5
FLig = FLig + 9
Next
TLig = TLig + 9
End If
Next F
On exclue certains onglets en les reliant par des AND (pas par des OR) Le 'i' doit être incrémenté à l'intérieur du If La formulation de copie peut être abrégée et elle copiait 9 lignes dans 17.
Ça donne :
Sub Report() Dim z As Integer Dim TCol As Integer, TLig As Long Dim FLig As Long Dim F As Worksheet
Application.ScreenUpdating = False Sheets("Anomalies").Activate TLig = 2 ' Ligne de départ pour la zone de destination (sur Anomalies)
For Each F In ThisWorkbook.Sheets
If F.Name <> "Anomalies" And F.Name <> "Administration" _ And F.Name <> "Premier" And F.Name <> "Modèle" _ And F.Name <> "TOTAL" _ Then
TCol = 1 FLig = 2 For z = 0 To 21 Cells(TLig, TCol).Resize(9, 4).Value = _ F.Cells(FLig, 1).Resize(9, 4).Value TCol = TCol + 5 FLig = FLig + 9 Next TLig = TLig + 9 End If Next F
End Sub
Salutations,
Daniel M.
Patrick BASTARD
Bonjour, "Daniel"
Et merci pour ton aide. Grâce à ton intervention, et à celles de Pounet95, de Michel et de Bruno, j'y vois maintenant plus clair, et ce que je voulais faire est maintenant presque abouti.
Et, pour tout comprendre, encore 2 questions :
1° question : Cells(TLig, TCol).Resize(9, 4).Value = F.Cells(FLig, 1).Resize(9, 4).Value recopie les formules de départ sur la cible. Quelle serait la syntaxe pour ne recopier que les valeurs ?
2° question : Pourquoi, bien que ne figure pas "Application.ScreenUpdating = True", l'affichage est-il mis à jour en fin de proc ?
Bon dimanche à vous tous,
Bien cordialement,
Patrick.
Sub Report() Dim z As Integer Dim TCol As Integer, TLig As Long Dim FLig As Long Dim F As Worksheet
Application.ScreenUpdating = False Sheets("Anomalies").Activate TLig = 2 ' Ligne de départ pour la zone de destination (sur Anomalies)
For Each F In ThisWorkbook.Sheets
If F.Name <> "Anomalies" And F.Name <> "Administration" _ And F.Name <> "Premier" And F.Name <> "Modèle" _ And F.Name <> "TOTAL" _ Then
TCol = 1 FLig = 2 For z = 0 To 21 Cells(TLig, TCol).Resize(9, 4).Value = _ F.Cells(FLig, 1).Resize(9, 4).Value TCol = TCol + 5 FLig = FLig + 9 Next TLig = TLig + 9 End If Next F
End Sub
Salutations,
Daniel M.
Bonjour, "Daniel"
Et merci pour ton aide.
Grâce à ton intervention, et à celles de Pounet95, de Michel et de Bruno,
j'y vois maintenant plus clair, et ce que je voulais faire est maintenant
presque abouti.
Et, pour tout comprendre, encore 2 questions :
1° question :
Cells(TLig, TCol).Resize(9, 4).Value = F.Cells(FLig, 1).Resize(9, 4).Value
recopie les formules de départ sur la cible.
Quelle serait la syntaxe pour ne recopier que les valeurs ?
2° question :
Pourquoi, bien que ne figure pas "Application.ScreenUpdating = True",
l'affichage est-il mis à jour en fin de proc ?
Bon dimanche à vous tous,
Bien cordialement,
Patrick.
Sub Report()
Dim z As Integer
Dim TCol As Integer, TLig As Long
Dim FLig As Long
Dim F As Worksheet
Application.ScreenUpdating = False
Sheets("Anomalies").Activate
TLig = 2 ' Ligne de départ pour la zone de destination (sur Anomalies)
For Each F In ThisWorkbook.Sheets
If F.Name <> "Anomalies" And F.Name <> "Administration" _
And F.Name <> "Premier" And F.Name <> "Modèle" _
And F.Name <> "TOTAL" _
Then
TCol = 1
FLig = 2
For z = 0 To 21
Cells(TLig, TCol).Resize(9, 4).Value = _
F.Cells(FLig, 1).Resize(9, 4).Value
TCol = TCol + 5
FLig = FLig + 9
Next
TLig = TLig + 9
End If
Next F
Et merci pour ton aide. Grâce à ton intervention, et à celles de Pounet95, de Michel et de Bruno, j'y vois maintenant plus clair, et ce que je voulais faire est maintenant presque abouti.
Et, pour tout comprendre, encore 2 questions :
1° question : Cells(TLig, TCol).Resize(9, 4).Value = F.Cells(FLig, 1).Resize(9, 4).Value recopie les formules de départ sur la cible. Quelle serait la syntaxe pour ne recopier que les valeurs ?
2° question : Pourquoi, bien que ne figure pas "Application.ScreenUpdating = True", l'affichage est-il mis à jour en fin de proc ?
Bon dimanche à vous tous,
Bien cordialement,
Patrick.
Sub Report() Dim z As Integer Dim TCol As Integer, TLig As Long Dim FLig As Long Dim F As Worksheet
Application.ScreenUpdating = False Sheets("Anomalies").Activate TLig = 2 ' Ligne de départ pour la zone de destination (sur Anomalies)
For Each F In ThisWorkbook.Sheets
If F.Name <> "Anomalies" And F.Name <> "Administration" _ And F.Name <> "Premier" And F.Name <> "Modèle" _ And F.Name <> "TOTAL" _ Then
TCol = 1 FLig = 2 For z = 0 To 21 Cells(TLig, TCol).Resize(9, 4).Value = _ F.Cells(FLig, 1).Resize(9, 4).Value TCol = TCol + 5 FLig = FLig + 9 Next TLig = TLig + 9 End If Next F
End Sub
Salutations,
Daniel M.
AV
1° question : Cells(TLig, TCol).Resize(9, 4).Value = F.Cells(FLig, 1).Resize(9, 4).Value recopie les formules de départ sur la cible. Quelle serait la syntaxe pour ne recopier que les valeurs ?
Heu...Es-tu sur que cette syntaxe recopie tout et pas seulement les valeurs ?
2° question : Pourquoi, bien que ne figure pas "Application.ScreenUpdating = True", l'affichage est-il mis à jour en fin de proc ?
C'est comme ça ...Réinitialisation de la valeur par défaut ("true")
AV
1° question :
Cells(TLig, TCol).Resize(9, 4).Value = F.Cells(FLig, 1).Resize(9, 4).Value
recopie les formules de départ sur la cible.
Quelle serait la syntaxe pour ne recopier que les valeurs ?
Heu...Es-tu sur que cette syntaxe recopie tout et pas seulement les valeurs ?
2° question :
Pourquoi, bien que ne figure pas "Application.ScreenUpdating = True",
l'affichage est-il mis à jour en fin de proc ?
C'est comme ça ...Réinitialisation de la valeur par défaut ("true")
1° question : Cells(TLig, TCol).Resize(9, 4).Value = F.Cells(FLig, 1).Resize(9, 4).Value recopie les formules de départ sur la cible. Quelle serait la syntaxe pour ne recopier que les valeurs ?
Heu...Es-tu sur que cette syntaxe recopie tout et pas seulement les valeurs ?
2° question : Pourquoi, bien que ne figure pas "Application.ScreenUpdating = True", l'affichage est-il mis à jour en fin de proc ?
C'est comme ça ...Réinitialisation de la valeur par défaut ("true")
AV
Patrick BASTARD
Bonjour, *Alain*
Merci de ta réponse pour le # 2° Est-ce à dire que Application.ScreenUpdating = True est toujours inutile en fin de procédure ?
Pour ce qui est du # 1° : Je m'aperçois après vérification que ma formule : =STXT(CELLULE("nomfichier";A$1);TROUVE("]";CELLULE("nomfichier";A$1))+1;32) était dans une cellule formatée en tant que texte ( ce que je ne savais pas possible) et que c'est chaîne de texte qui a été recopiée.
Donc pour moi, maintenant, tout est OK
Agréable fin de WE,
Bien cordialement,
Patrick.
1° question : Cells(TLig, TCol).Resize(9, 4).Value = F.Cells(FLig, 1).Resize(9, 4).Value recopie les formules de départ sur la cible. Quelle serait la syntaxe pour ne recopier que les valeurs ?
Heu...Es-tu sur que cette syntaxe recopie tout et pas seulement les valeurs ?
2° question : Pourquoi, bien que ne figure pas "Application.ScreenUpdating = True", l'affichage est-il mis à jour en fin de proc ?
C'est comme ça ...Réinitialisation de la valeur par défaut ("true")
AV
Bonjour, *Alain*
Merci de ta réponse pour le # 2°
Est-ce à dire que Application.ScreenUpdating = True est toujours inutile en
fin de procédure ?
Pour ce qui est du # 1° :
Je m'aperçois après vérification que ma formule :
=STXT(CELLULE("nomfichier";A$1);TROUVE("]";CELLULE("nomfichier";A$1))+1;32)
était dans une cellule formatée en tant que texte ( ce que je ne savais pas
possible) et que c'est chaîne de texte qui a été recopiée.
Donc pour moi, maintenant, tout est OK
Agréable fin de WE,
Bien cordialement,
Patrick.
1° question :
Cells(TLig, TCol).Resize(9, 4).Value = F.Cells(FLig, 1).Resize(9,
4).Value recopie les formules de départ sur la cible.
Quelle serait la syntaxe pour ne recopier que les valeurs ?
Heu...Es-tu sur que cette syntaxe recopie tout et pas seulement les
valeurs ?
2° question :
Pourquoi, bien que ne figure pas "Application.ScreenUpdating = True",
l'affichage est-il mis à jour en fin de proc ?
C'est comme ça ...Réinitialisation de la valeur par défaut ("true")
Merci de ta réponse pour le # 2° Est-ce à dire que Application.ScreenUpdating = True est toujours inutile en fin de procédure ?
Pour ce qui est du # 1° : Je m'aperçois après vérification que ma formule : =STXT(CELLULE("nomfichier";A$1);TROUVE("]";CELLULE("nomfichier";A$1))+1;32) était dans une cellule formatée en tant que texte ( ce que je ne savais pas possible) et que c'est chaîne de texte qui a été recopiée.
Donc pour moi, maintenant, tout est OK
Agréable fin de WE,
Bien cordialement,
Patrick.
1° question : Cells(TLig, TCol).Resize(9, 4).Value = F.Cells(FLig, 1).Resize(9, 4).Value recopie les formules de départ sur la cible. Quelle serait la syntaxe pour ne recopier que les valeurs ?
Heu...Es-tu sur que cette syntaxe recopie tout et pas seulement les valeurs ?
2° question : Pourquoi, bien que ne figure pas "Application.ScreenUpdating = True", l'affichage est-il mis à jour en fin de proc ?
C'est comme ça ...Réinitialisation de la valeur par défaut ("true")
AV
AV
Est-ce à dire que Application.ScreenUpdating = True est toujours inutile en fin de procédure ?
A 99% (qques exceptions pour l'affichage d'userform ou msgbox sur le "parcours" de la proc où il faut jouer sur la succession de false/true) c'est réponse oui Pour les inquiets et comme ça mange pas de pain, on peut rajouter la ligne avant le end sub AV
Est-ce à dire que Application.ScreenUpdating = True est toujours inutile en
fin de procédure ?
A 99% (qques exceptions pour l'affichage d'userform ou msgbox sur le "parcours"
de la proc où il faut jouer sur la succession de false/true) c'est réponse oui
Pour les inquiets et comme ça mange pas de pain, on peut rajouter la ligne avant
le end sub
AV
Est-ce à dire que Application.ScreenUpdating = True est toujours inutile en fin de procédure ?
A 99% (qques exceptions pour l'affichage d'userform ou msgbox sur le "parcours" de la proc où il faut jouer sur la succession de false/true) c'est réponse oui Pour les inquiets et comme ça mange pas de pain, on peut rajouter la ligne avant le end sub AV