Comment boucler chaque feuille
Résolu
Renard
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
A voir également:
- Comment boucler chaque feuille
- Feuille de pointage excel - Télécharger - Tableur
- Bruler feuille de laurier - Guide
- Comment supprimer une feuille sur word - Guide
- Comment imprimer en a5 sur une feuille a4 - Guide
- Verrouiller cellule excel sans verrouiller la feuille - Guide
1 réponse
Bonjour,
La structure est bonne, mais tu t'adresses toujours à la feuille active.
Et ça n'est pas très optimisé. Evite les .select qui ne servent à rien d'autre que ralentir.
Pour t'adresser à la feuille utilise With Feuille, ensuite tu mets un . (partout où c'est nécessaire, et sans en oublier un seul) pour dire que tu t'adresses à l'objet défini dans le with
Ex :
Quand ça sera au point ajoute en début de code :
application.screenupdating=false
et application.screenupdating=true à la fin
Ca évitera les clignotements désagréables et accélèrera l'ensemble.
eric
edit: bien entendu teste sur des copies de fichiers vu que tu enregistres des modifications
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
La structure est bonne, mais tu t'adresses toujours à la feuille active.
Et ça n'est pas très optimisé. Evite les .select qui ne servent à rien d'autre que ralentir.
Pour t'adresser à la feuille utilise With Feuille, ensuite tu mets un . (partout où c'est nécessaire, et sans en oublier un seul) pour dire que tu t'adresses à l'objet défini dans le with
Ex :
For Each Feuille In ActiveWorkbook.Worksheets With Feuille .Cells.UnMerge .Range("T5").Copy .Range("CJ9") .Range("BV5").Copy .Range("CK9") End With Next Feuille
Quand ça sera au point ajoute en début de code :
application.screenupdating=false
et application.screenupdating=true à la fin
Ca évitera les clignotements désagréables et accélèrera l'ensemble.
eric
edit: bien entendu teste sur des copies de fichiers vu que tu enregistres des modifications
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
Merci quand même
J'ai essayé ta suggestion, mais ça ne fonctionne pas.
Si, ça fonctionne. Je te parle du with et de comment l'utiliser.
Maintenant c'est peut-être toi qui la met mal en oeuvre...
Et si tu ne mets pas le code que tu as fait et que tes explications se limitent à ça ne marche pas ça va être difficile de voir ce qui cloche...
eric
Voilà le fichier que j'ai fait. Quand je l'exécute, il modifie la feuille qui était active à l'enregistrement de chacun de mes fichiers et ne touche pas aux autres. J'ai essayé d'autres modifications, mais la macro chageait de feuille elle boguait à la première case à copier.
Sub BaseDonnées()
Dim Chemin As String, Fichier As String
Dim Feuille As Worksheet
Chemin = ThisWorkbook.Path & "\"
Fichier = Dir(Chemin & "*.xls")
'boucle sur tous les classeurs
Do While Len(Fichier) > 0
If Fichier <> ThisWorkbook.Name Then
'ouvre le fichier
Workbooks.Open Filename:=Chemin & Fichier
'boucle sur chaque feuille
For Each Feuille In ActiveWorkbook.Worksheets
With Feuille
.Cells.UnMerge
.Range("T5").Copy .Range("CJ9")
.Range("BV5").Copy .Range("CK9")
.Range("J6").Copy .Range("CL9")
.Range("AW6").Copy .Range("CM9")
.Range("O29").Copy .Range("CN9")
.Range("CB29").Copy .Range("CO9")
.Range("CP9").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = _"=LEFT(CELL(""nomfichier"",R[-8]C[-93]),FIND(""["",CELL(""nomfichier"",R[-8]C[-93]))-2)"
.Range("CJ9:CP9").Copy
.Range("CJ10").Select
ActiveSheet.Paste
.Range("CJ11").Select
ActiveSheet.Paste
.Range("CJ12").Select
ActiveSheet.Paste
.Range("CJ13").Select
ActiveSheet.Paste
.Range("CJ14").Select
ActiveSheet.Paste
.Range("CJ15").Select
ActiveSheet.Paste
.Range("CJ16").Select
ActiveSheet.Paste
.Range("CJ17").Select
ActiveSheet.Paste
.Range("CJ18").Select
ActiveSheet.Paste
.Range("CJ19").Select
ActiveSheet.Paste
.Range("CJ20").Select
ActiveSheet.Paste
.Range("CJ21").Select
ActiveSheet.Paste
.Range("CJ22").Select
ActiveSheet.Paste
.Range("CJ23").Select
ActiveSheet.Paste
.Range("CJ24").Select
ActiveSheet.Paste
.Range("CJ25").Select
ActiveSheet.Paste
.Range("CJ26").Select
ActiveSheet.Paste
.Range("CJ27").Select
ActiveSheet.Paste
End With
Next Feuille
ActiveWorkbook.Save
ActiveWorkbook.Close
End If
Fichier = Dir()
Loop
End Sub
With Feuille
.Cells.UnMerge
.Range("A5").Copy .Range("A9")
End With
et ça marche très bien chez moi, A5 est bien copié en A9.
Mais plus bas je vois que tu as laissé des ActiveCell et autres ActiveSheet.Paste. Vu que tu n'active pas les feuilles ça colle toujours sur la même, celle qui est active à l'ouverture.
Remplace :
.Range("CP9").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = _"=LEFT(CELL(""nomfichier"",R[-8]C[-93]),FIND(""["",CELL(""nomfichier"",R[-8]C[-93]))-2)"
par:
.Range("CP9").FormulaR1C1 = _"=LEFT(CELL(""nomfichier"",R[-8]C[-93]),FIND(""["",CELL(""nomfichier"",R[-8]C[-93]))-2)"
et le gros paquet de lignes qui reste par :
.Range("CJ9:CP9").AutoFill .Range("CJ27:CP27")
Si il y a encore qcq chose qui coince ajoute après With Feuille :
Feuille.activate
eric