Copie de cellules sur chaques feuilles du classeur

excelman

XLDnaute Occasionnel
Bonjour au forum.

Voila je coince un peu sur une macro vba dont voici le contenu qui me sert à copier la valeur de la cellule
G30 sur toutes les cellules au dessus jusqu'à G4 et ceci sur toutes les feuilles sauf les 3 dernières.

Code:
Sub test()
Sheets("1").Select
    Range("G30").Select
    Selection.AutoFill Destination:=Range("G4:G30"), Type:=xlFillDefault
    Range("G4:G30").Select
Sheets("2").Select
    Range("G30").Select
    Selection.AutoFill Destination:=Range("G4:G30"), Type:=xlFillDefault
    Range("G4:G30").Select
Sheets("3").Select
    Range("G30").Select
    Selection.AutoFill Destination:=Range("G4:G30"), Type:=xlFillDefault
    Range("G4:G30").Select
Sheets("4").Select
    Range("G30").Select
    Selection.AutoFill Destination:=Range("G4:G30"), Type:=xlFillDefault
    Range("G4:G30").Select
Sheets("5").Select
    Range("G30").Select
    Selection.AutoFill Destination:=Range("G4:G30"), Type:=xlFillDefault
    Range("G4:G30").Select
Sheets("5").Select
    Range("G30").Select
    Selection.AutoFill Destination:=Range("G4:G30"), Type:=xlFillDefault
    Range("G4:G30").Select
Sheets("6").Select
    Range("G30").Select
    Selection.AutoFill Destination:=Range("G4:G30"), Type:=xlFillDefault
    Range("G4:G30").Select

'etc... sur tous le classeur sauf les 3 dernières feuilles.

End Sub

Ce que j'essaye de remplacer par une boucle :

Code:
Sub test2()
    Dim i%
        For i = 1 To Worksheets.Count - 3
            With Worksheets(i)
            Range("G30").Select
            Selection.AutoFill Destination:=Range("G4:G30"), Type:=xlFillDefault
            Range("G4:G30").Select
            End With
        Next
End Sub

qui boucle toujours sur la même feuille.
Auriez vous un petit conseil pour raccourcir ce code?

Cordialement
 

Papou-net

XLDnaute Barbatruc
Re : Copie de cellules sur chaques feuilles du classeur

Bonsoir excelman,

Tu as tout simplement d'attacher la référence de la cellule à la feuille en la faisant précéder d'un point :

Code:
Sub test2()
    Dim i%
        For i = 1 To Worksheets.Count - 3
            With Worksheets(i)
            .Range("G30").Select
            Selection.AutoFill Destination:=.Range("G4:G30"), Type:=xlFillDefault
            .Range("G4:G30").Select
            End With
        Next
End Sub
Cordialement.


Edit : bonsoir JBARBE.
 

excelman

XLDnaute Occasionnel
Re : Copie de cellules sur chaques feuilles du classeur

Bonsoir excelman,

Tu as tout simplement d'attacher la référence de la cellule à la feuille en la faisant précéder d'un point :

Code:
Sub test2()
    Dim i%
        For i = 1 To Worksheets.Count - 3
            With Worksheets(i)
            .Range("G30").Select
            Selection.AutoFill Destination:=.Range("G4:G30"), Type:=xlFillDefault
            .Range("G4:G30").Select
            End With
        Next
End Sub
Cordialement.


Edit : bonsoir JBARBE.

Salut Papou Net,

Ben en fait la formule ne fonctionne pas ainsi car j'ai un message qui me dit que "la méthode de classe select range a échoué..."
 

JBARBE

XLDnaute Barbatruc
Re : Copie de cellules sur chaques feuilles du classeur

Code:
Sub test2()
    Dim i As Integer
        For i = 1 To 30 ' Nombres de feuilles -3
           Worksheets(i).Select
            Range("G30").Select
            Selection.AutoFill Destination:=Worksheets(i).Range("G4:G30"), Type:=xlFillDefault
        Next i
End Sub

Essai ce code en changeant le nombre 30 de feuilles -3 que tu veux avoir !

Pas possible de faire autrement

PS : Bonsoir Papou-Net
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Copie de cellules sur chaques feuilles du classeur

RE :

excelman,

En relisant ton code, je relève que tu ne peux sélectionner une cellule sur une feuille qui n'est pas active. Je te propose donc une des deux solutions suivantes :

Code:
Sub test2()
    Dim i%
        For i = 1 To Worksheets.Count - 3
            With Worksheets(i)
            .Select
            .Range("G30").Select
            Selection.AutoFill Destination:=.Range("G4:G30"), Type:=xlFillDefault
            .Range("G4:G30").Select
            End With
        Next
End Sub
Mais la suivante devrait pouvoir aussi fonctionner, car il n'est pas nécessaire de sélectionner feuilles ou cellules pour y écrire dedans :

Code:
Sub test2()
    Dim i%
        For i = 1 To Worksheets.Count - 3
            With Worksheets(i)
            .Range("G30").AutoFill Destination:=.Range("G4:G30"), Type:=xlFillDefault
            End With
        Next
End Sub
Enfin, une autre hypothèse : si les noms de tes feuilles sont bien des chiffres, comme je pense l'avoir compris, alors il faut remplacer l'index i par une chaîne de caractères :

Code:
With Worksheets(Cstr(i))
    .Range("G30").AutoFill Destination:=.Range("G4:G30"), Type:=xlFillDefault
End With
Maintenant, si ça ne résout pas la question, tu peux peut-être joindre ton fichier sans oublier de remplacer les données confidentielles le cas échéant.

Cordialement.
 

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 853
Membres
103 975
dernier inscrit
denry