Macro en boucle de if, then else, elseif...

Résolu/Fermé
AudreyBEAUMARD Messages postés 12 Date d'inscription vendredi 20 juillet 2018 Statut Membre Dernière intervention 30 juillet 2018 - Modifié le 26 juil. 2018 à 14:46
AudreyBEAUMARD Messages postés 12 Date d'inscription vendredi 20 juillet 2018 Statut Membre Dernière intervention 30 juillet 2018 - 30 juil. 2018 à 10:01
Bonjour le forum !

J'ai créé un menu déroulant (contrôle de formulaire) avec les catégories charges, courses, sorties et shopping, restaurant, gazole, autres.

Si vous ne l'avez pas compris je réalise un petit fichier de suivi de mes dépenses de chaque mois.

Le menu déroulant est associé à la cellule S8 et j'ai créé 6 macro (1 pour chaque catégories) qui fonctionnent (elles trient pour que ma plage de donnée fasse remonter les lignes concernées par la catégorie en question en fonction de la couleur etc).

Le problème c'est la macro qui prendrait les 6 en d'un coup. J'essaye de créer une macro qui dit que si S8 vaut 1 alors il faut exécuter la macro CHARGES sinon, si S8 vaut 2 alors il faut éxecuter la macro RESTAURANT et ainsi de suite...

Le problème c'est que je ne sais pas bien coder et là j'ai essayer plein de manières différentes et aucune ne marche, j'ai consulté pleins de sites qui m'ont permis de modifier mon code mais il y a toujours un soucis alors je ne sais pas si il a été le meilleur mais voici mon dernier essai:


Sub SELECTIONNER()

If Cells("S8") = "1" Then CHARGES
Else: If Cells("S8") = "2" Then RESTAURANT
Else: If Cells("S8") = "3" Then SORTIESETSHOPPING
Else: If Cells("S8") = "4" Then AUTRES
Else: If Cells("S8") = "5" Then GAZOLE
Else: If Cells("S8") = "6" Then COURSES
Else: Stop
End If
End Sub


Et voici le fichier complet:
https://www.cjoint.com/c/HGAmIz3kGqt


J'espère avoir été clair :)
A voir également:

2 réponses

ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
26 juil. 2018 à 15:07
Bonjour

Essaies comme ceci
Public Sub SELECTIONNER()
Select Case ActiveSheet.Range("S8").Value
  Case 1: CHARGES
  Case 2: RESTAURANT
  Case 3: SORTIESETSHOPPING
  Case 4: AUTRES
  Case 5: GAZOLE
  Case 6: COURSES
  Case Else: Stop
End Select
End Sub

Cdlmnt
0
AudreyBEAUMARD Messages postés 12 Date d'inscription vendredi 20 juillet 2018 Statut Membre Dernière intervention 30 juillet 2018
26 juil. 2018 à 15:15
Merciiiiiiiiiiiii :D Je suis trop contente ! Mais je veux comprendre le langage pour progresser :

que veut dire:
select case activesheet.range("S8").value .
case 1 2 3 ...

?
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
26 juil. 2018 à 15:20
Select Case permet de distinguer les différents cas selon la valeur de la variable qui suit (ici : activesheet.range("S8").value . )
Case 1 traite le cas où elle vaut 1
etc..
Case else traite les autres cas

Permet de simplifier les imbrications de if then elseif then ...

Cdlmnt
0
AudreyBEAUMARD Messages postés 12 Date d'inscription vendredi 20 juillet 2018 Statut Membre Dernière intervention 30 juillet 2018
26 juil. 2018 à 16:06
Merci bcp :)
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
26 juil. 2018 à 16:16
Bonjour,

pour comprendre tes erreurs, 2 dans :
If Cells("S8") = "1" Then CHARGES 


1) Cells n'accepte pas "S8" en paramètre.
C'est Cells(ligne, colonne). (et éventuellement Cells(Index) mais pas utile pour toi).

2) "1" représente la chaine de caractère "1"
S'il s'agit du nombre il faut mettre 1 sans les "".
Une feuille te fera une conversion si besoin, pas vba qui ne pardonne pas les approximations.

eric


0
AudreyBEAUMARD Messages postés 12 Date d'inscription vendredi 20 juillet 2018 Statut Membre Dernière intervention 30 juillet 2018
30 juil. 2018 à 10:01
Merci beaucoup :)
0