Recherche sur plusieurs feuilles [Résolu]

Signaler
Messages postés
10
Date d'inscription
mercredi 8 juin 2016
Statut
Membre
Dernière intervention
20 juin 2016
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
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

End Sub
Merci d'avance de votre aide

4 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
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.
Messages postés
10
Date d'inscription
mercredi 8 juin 2016
Statut
Membre
Dernière intervention
20 juin 2016

Merci pour ta réponse, mais je n'arrive pas a faire chercher puis remplacer une valeur dans les feuilles sélectionnées.

Je suis vraiment un débutant et je ne sais pas comment m'y prendre.

Merci de me venir en aide
Messages postés
10
Date d'inscription
mercredi 8 juin 2016
Statut
Membre
Dernière intervention
20 juin 2016

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

End Sub

Encore merci de ton aide
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
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.