BBdebutant
Messages postés10Date d'inscriptionmercredi 8 juin 2016StatutMembreDernière intervention20 juin 2016
-
19 juin 2016 à 19:47
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018
-
20 juin 2016 à 06:40
Bonjour,
Dans ma macro ci-dessous, je fais une recherche d'une date puis je la remplace par une autre.
Cette macro fonctionne parfaitement a part que pour moi, j'aimerais que la recherche ne se fasse que sur les feuilles "janvier" "février"... jusqu'au mois de décembre
Sub changer_annee()
'rechercher une date dans les feuilles du classeur et la remplacer par une autre
Dim feuil As Worksheet
Dim Mot As Variant
Dim Replace As Variant
Mot = InputBox("Quelle année recherchez-vous ?", Title:="Recherche année")
Replace = InputBox("Par quelle année voulez vous remplacer ?", Title:="Remplacer l'année")
If Mot = "" Then Exit Sub
For Each feuil In ThisWorkbook.Worksheets
feuil.Cells.Replace what:=Mot, Replacement:=Replace
Next
Bonjour,
mets donc les feuilles que tu veux traiter dans un array et parcours cet array.
Exemple :
Dim feuilles_a_traiter feuilles_a_traiter = Array(Feuil1, Feuil3) For i = 0 To UBound(feuilles_a_traiter) MsgBox feuilles_a_traiter(i).Name ' ici tes instruction au lieu de ce msgbox. Next
ne parcourra que les feuilles "Feuil1" et "Feuil3"
EDIT et évite de nommer par Replace une variable. Replace est un mot réservé de VBA !
EDIT 2 : existe également une autre solution (qui utilise MonthName). Elle est toutefois à éviter pour deux raisons :
- 1) elle implique que tes noms de mois ne souffrent aucune faute d'orthographe
- 2) elle est assez risquée si ton classeur doit être distribué et éventuellement utilisé avec une version non française
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
BBdebutant
Messages postés10Date d'inscriptionmercredi 8 juin 2016StatutMembreDernière intervention20 juin 2016 20 juin 2016 à 00:16
pour commencer merci de ton aide.
avec la macro ci-dessous maintenant j'arrive a faire l'opération.
mais je dois faire 12 fois l'opération rechercher et remplacer ne pourrait-on pas le faire en 1 seule fois.
Sub Macro1()
'
' Macro1 Macro
Dim feuilles_a_traiter
feuilles_a_traiter = Array(Feuil4, Feuil6, Feuil7, Feuil8, Feuil9, Feuil10, Feuil11, Feuil12, Feuil13, Feuil14, Feuil15, Feuil16)
For i = 0 To UBound(feuilles_a_traiter)
Dim Mot As Variant
Dim Trouve As Variant
Mot = InputBox("Quelle année recherchez-vous ?", Title:="Recherche année")
Trouve = InputBox("Par quelle année voulez vous remplacer ?", Title:="Remplacer l'année")
If Mot = "" Then Exit Sub
For Each feuil In feuilles_a_traiter
feuil.Cells.Replace what:=Mot, Replacement:=Trouve
'MsgBox feuilles_a_traiter(i).Name ' ici tes instruction au lieu de ce msgbox.
Next
Next
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 20 juin 2016 à 06:40
Là, vois-tu, débutant ou non, tu as surtout besoin de te réveiller !
1) Tu as écrit dans ton 1er message :
Cette macro fonctionne parfaitement a part que pour moi, j'aimerais que la recherche ne se fasse que sur les feuilles "janvier" "février"... jusqu'au mois de décembre
ce qui veut dire que tu n'avais aucun problème de remplacement, mais que celui-ci se faisait sur toutes les feuilles et non uniquement celles des mois ...
2) ton code de remplacement se faisait dans la boucle :
For Each feuil In ThisWorkbook.Worksheets
et je t'ai dit par quoi remplacer cette boucle, non ?
Tu voudras bien te réveiller, car là, ce n'est pas un problème de débutant, que tu as, mais un problème assez sérieux de logique.
Et si tu continues avec un problème de cette nature, tu devras continuer sans moi, je le crains.