Appliquer automatiquement la macro a chaque feuille
Bonjour,
J'ai un classeur composé de plusieurs feuilles. Je veux que certaines données de chaque feuille ayant 2014 dans le nom soit copié dans la feuille synthèse. Voici les problèmes que je rencontre :
- je n'arrive pas à trouver une macro sélectionnant que les onglets ayant 2014 dans le nom. J'ai biaisé en lui demandant d'appliquer la macro pour toutes les feuilles n'ayant pas le nom synthèse. Y-a-t-il moyen de faire autrement ???
- je suis obligée de me mettre sur chaque onglet et d'exécuter la macro. Comment faire pour que la macro s'éxécute pour tous les onglets du classeur ?
- une fois qu'il a copié les données dans la feuille Synthèse, il réapplique la macro en copiant les données de la feuille synthèse.
- comment fait-on pour sélectionner une partie d'un tableau variable d'une feuille à l'autre et pouvant contenir des cellules vides ?
Voici la macro que j'ai crée
sub test()
'déclaration de la variable feuille en tant que feuille
Dim Feuille As Worksheet
'pour chaque élément (chaque onglet) Feuille de la collection feuilles du classeur For Each Feuille In Worksheets
'si le nom de la feuille différent de synthèse alors
If Feuille.Name <> "Synthèse" Then
'sélectionne le tableau à partir de la cellule b3
Range(Range("b3").End(xlDown), Range("b3").End(xlToRight)).Copy
'sélectionne la feuille synthèse et se postionne dans la dernière ligne du tableau
Worksheets("Synthèse").Activate
Range("A1048576").End(xlUp).Select
'Décalage de la ligne
ActiveCell.Offset(1, 0).Select
'colle les données
ActiveSheet.Paste
End If
Next Feuille
End Sub
Merci par avance de votre aide
Bonjour,
non testé :
Sub test()
'déclaration de la variable feuille en tant que feuille
Dim Feuille As Worksheet
'pour chaque élément (chaque onglet) Feuille de la collection feuilles du classeur For Each Feuille In Worksheets
'si le nom de la feuille contient 2014 alors
For Each Feuille In Sheets
If InStr(Feuille.Name, "2014") > 0 Then
'sélectionne le tableau à partir de la cellule b3
Range(Range("b3").End(xlDown), Range("b3").End(xlToRight)).Copy
'sélectionne la feuille synthèse et se postionne dans la dernière ligne du tableau
Worksheets("Synthèse").Activate
Range("A1048576").End(xlUp).Select
'Décalage de la ligne
ActiveCell.Offset(1, 0).Select
'colle les données
ActiveSheet.Paste
End If
Next Feuille
End Sub-comment fait-on pour sélectionner une partie d'un tableau variable d'une feuille à l'autre et pouvant contenir des cellules vides ?
Trop vague, mettre un fichier explicatif.
eric
Merci pour votre réponse mais ça ne fonctionne pas. Je crois que je vais laisser passer le we et peut être que la solution me viendra au retour.
Merci de votre aide
Bon we
Bonjour,
Ma macro fonctionne, voici le code que j'ai utilisé
Private Sub CommandButton1_Click()
Call Ajout_données_dans_synthèse
End Sub
Sub Ajout_données_dans_synthèse()
Dim Feuille As Worksheet
Dim i As Integer
'Pour remplace la boucle for each on compte le nombre d'onglet et on vérifie la difference a chaque boucle
For i = 1 To Worksheets.Count
'On vérifie que le nom de l'onglet possede au moins une occurence de "2014"
If InStr(Worksheets(i).Name, "2014") > 0 Then
'Si Oui on active la page
Worksheets(i).Activate
'On vérifie que la colonne date visite n'éxiste pas si il existe on passe a la page suivante
If Range("b1") <> "DATE VISITE" Then
'Insére une colonne B en B1 mettre date visite
Columns(2).Insert
Range("b1").FormulaR1C1 = "DATE VISITE"
'Sélectionne cellule b3 et colle la formule pour que le nom de l'onglet apparaisse
'puis copie dans toute la colonne b du tableau
Range("b3").Select
ActiveCell.FormulaR1C1 = _
"=MID(CELL(""nomfichier"",R1C1),FIND(""]"",CELL(""nomfichier"",R1C1))+1,32)"
'On supprime le contenu de la cellule pour l'esthétisme du tableau ^^
Range("b2").ClearContents
'sélectionne le tableau à partir de la cellule b3
Range(Range("b3").End(xlDown), Range("b3").End(xlToRight)).Copy
'sélectionne la feuille synthèse et se postionne dans la dernière ligne du tableau
Worksheets("Synthèse").Activate
Range("A1048576").End(xlUp).Select
'Décalage de la ligne
ActiveCell.Offset(1, 0).Select
'colle les données en faisant collage des valeurs et du format
With Selection
.PasteSpecial Paste:=xlPasteValues
.PasteSpecial Paste:=xlPasteFormats
End With
End If
End If
Next i
End Sub
Bon week-end