Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

If If If If, ou comment de 1 passer à 2 et de 2 passer à 3

  • Initiateur de la discussion Initiateur de la discussion Elcorbo_
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

E

Elcorbo_

Guest
Bonchoir à tou(te)s !

Petite (première) question au sujet de Vba :

J'aimerai créer une macro (et son bouton attitré) qui me modifie le texte d'une cellule en fonction du texte déjà présent. Pour faire simple, disons que j'ai des fichiers Excel à modifier tous les mois, et qu'au lieu de changer le nom des mois à la main, je veuille le faire en cliquant sur un bouton-macro.
L'idée, c'est que si la colonne A1 indique "janvier", je clique sur le bouton et elle indique "février".
Si la colonne A1 indique "février", je clique sur le bouton et elle indique "mars".
Et ainsi de suite.

J'ai essayé plusieurs If, des ElseIf, bref des trucs glanés sur le net, mais soit ça ne suffit pas, soit ma syntaxe est anarchique. Quelqu'un peut me filer un tuyau ?

Merchi =)
 
Re : If If If If, ou comment de 1 passer à 2 et de 2 passer à 3

Bonsoir Elcorbo_, à tous,

Si tu tiens à garder le contrôle du passage au mois suivant (au lieu des élégantes solutions automatiques de R@chid et Gareth), tu peux placer la macro VBA suivante dans le module de code de la Feuille où se trouve la cellule à modifier (ici cellule A1):
VB:
Sub IncrMois()
  [A1] = Format(CDate("1-" & [A1] & "-5") + 40, "mmmm")
End Sub
 

Pièces jointes

Dernière édition:
Re : If If If If, ou comment de 1 passer à 2 et de 2 passer à 3

Mince, je me sens bête...
L'utilisation des termes "janvier", "février" etc n'était en fait qu'un exemple.
En fait les fichiers que j'utilise n'usent pas de la même chronologie que la notre. Les mois ne sont pas appelés de la même façon. Donc je cherchais plutôt une macro pour passer d'un texte à l'autre, quel que soit le texte à modifier, et non pas forcément un format date.

Imaginons une cellule A1 contenant "rouge".
Ma macro dirait : "si la cellule A1 = rouge, alors écrire dans A1 = vert".
La même macro dirait : "si la cellule A1 = vert, alors écrire dans A1 = jaune".
La même macro dirait : "si la cellule A1 = jaune, alors écrire dans A1 = rouge".

Du coup on arrive à une boucle. En essayant avec des If, la cellule ne change pas, ou alors change trop vite pour mes yeux, et revient au mot d'origine.

Le but c'est juste "d'avancer" dans la suite de mot. Ici on a rouge vert jaune. En cliquant, je veux juste écrire la couleur (donc le mot) suivant dans la liste.

J'espère être clair, excusez moi si ce n'est pas le cas, et merci énormément pour votre réactivité !
Autant de messages aussi rapidement (et à cette heure-ci) c'est wahouuu les copaings. GG

Merci d'avance pour votre aide future=)

EDIT =
Après test, le fichier exemple de Gareth était nickel. C'est exactement le genre de bouton qu'il me faut : mais en pouvant remplacer nos mois classiques par d'autres appellations.
 
Dernière modification par un modérateur:
Re : If If If If, ou comment de 1 passer à 2 et de 2 passer à 3

Bonjour Elcorbo_,
je cherchais plutôt une macro pour passer d'un texte à l'autre, quel que soit le texte à modifier, et non pas forcément un format date.

Voir la macro suivante:
VB:
Sub IncrMois()
Const Vals = "premier,janvier,chaussure,réveil,souris,rigolo,sérieux,pelle à tarte,dernier"
Dim v, i As Long
v = Split(Vals, ",")
For i = LBound(v) To UBound(v)
  If v(i) = [A1] Then Exit For
Next i

If i > UBound(v) Then
  'si pas trouvé,
  MsgBox "Mot:   " & [A1] & "   pas dans la liste"
ElseIf i = UBound(v) Then
  ' le mot est en fin de liste, on affiche le 1er élément de la liste
  [A1] = v(LBound(v))
Else
  ' on affiche l'élément suivant de la liste
  [A1] = v(i + 1)
End If

End Sub
 

Pièces jointes

Re : If If If If, ou comment de 1 passer à 2 et de 2 passer à 3

Bonjour Elcorbo_,

la même chose mais avec la liste située sur la feuille en colonne M.
le code dans le module de code de la Feuil1:
VB:
Sub IncrMois()
Dim v, i As Long

v = Range("M1", Range("M" & Rows.Count).End(xlUp)).Value
For i = LBound(v) To UBound(v)
  If v(i, 1) = [A1] Then Exit For
Next i

If i > UBound(v) Then
  'si pas trouvé,
  MsgBox "Mot:   " & [A1] & "   pas dans la liste"
ElseIf i = UBound(v) Then
  ' le mot est en fin de liste, on affiche le 1er élément de la liste
  [A1] = v(LBound(v), 1)
Else
  ' on affiche l'élément suivant de la liste
  [A1] = v(i + 1, 1)
End If

End Sub
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

C
Réponses
4
Affichages
2 K
C
S
Réponses
0
Affichages
1 K
samia89
S
F
Réponses
5
Affichages
2 K
Fariri
F
R
Réponses
7
Affichages
2 K
W
Réponses
1
Affichages
573
K
Réponses
0
Affichages
3 K
K
J
Réponses
0
Affichages
1 K
Jojolapin
J
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…