Bienvenue sur les forums conseil & création · S'enregistrer

Se connecter automatiquement

Forums » Tableurs et logiciels de gestion (Money, Excel, Open Office...) » créer une macro FONCTION SI - ALORS · Envoyer le lien

Par Martine, le 02 Mar 2006, 11:37 Revenir en haut de page Répondre en citant

Bonjour,

je prépare un formulaire de candidature sous excel, sur l'une des feuilles je souhaitais insérer une fonction SI mais j'ai beaucoup trop d'arguments pour pouvoir la terminer (plus de 7), je souhaite donc insérer une macro pour faire apparaître tous les arguments (12 possibilités SI, 3 résultats ALORS). J'ai bien tenté d'insérer une macro avec visual basic mais n'ayant jamais fait cela j'ai beaucoup de mal.
La cellule (A) de départ est composée d'une liste dans laquelle le candidat fait un choix parmi 12 possibilités + 1 "Autre".
La cellule d'arrivée (B) peut donner 3 résultats différents selon ce qui est indiqué dans (A).
Faut-il nommer ces cellules pour ensuite rappeler leur nom dans la macro, ou le simple référencement type A1, B5 suffit-il ?
Pourriez-vous m'indiquer de quelle manière je dois libeller ma macro, et comment indiquer à Excel à quelles cellules cette macro s'applique.

Je débute, mes exuses si cela paraît un peu confus, mais merci d'avance pour toutes indications qui me permettrait de rédiger cette macro.
Par Petite_rose_noire, le 02 Mar 2006, 20:11 Revenir en haut de page Répondre en citant

Bonjour,

Desolee ce n'est pas pour apporter une reponse mais une question... Embarassed


J'aimerais savoir ce qu'est une macro ?!
J'ai jms su ce qu'etait et a quoi ca servait ?! Rolling Eyes

Cedric... ?
Par Cédric, le 02 Mar 2006, 20:43 Revenir en haut de page Répondre en citant

Bonsoir,

Citation:
Faut-il nommer ces cellules pour ensuite rappeler leur nom dans la macro, ou le simple référencement type A1, B5 suffit-il ?

C'est au choix. L'intérêt de nommer une plage de cellules est de pouvoir y accéder plus rapidement (en cas de cellules nombreuses et/ou non contiguës) et de façon plus commode. Donc pour faire référence à une (ou des) cellule(s), on peut utiliser indifféremment le nom ou la référence (A1 ou L1C1).

Citation:
Pourriez-vous m'indiquer de quelle manière je dois libeller ma macro

Peu importe, vous pouvez lirement choisir le nom de la macro, la seule condition est de ne pas choisir un nom réservé (comme IF, THEN...) ou déjà utilisé. Donc tu peux utiliser ma_macro(), calculer(), valider(), ...ou tout autre nom qui pourra résumer le but de la macro. Ex:
Code:
Sub nom_macro()
  ' Insérer ici les fonctions de la macro
End Sub


Citation:
et comment indiquer à Excel à quelles cellules cette macro s'applique.

Pour tester A1, on peut utiliser IF...THEN...ELSE, mais si les résultats possibles sont très nombreux, il est préférable d'utiliser SELECT CASE. Par exemple, pour tester A1 et renvoyer une valeur en B1 en fonction de la valeur :

Code:
Sub nom_macro()
Select Case Range("A1").Value

' ------ De 1 à 5
Case 1 To 5
    Range("B1").Value = "Faible"

' ------
Case 6   ' Uniquement 6
    Range("B1").Value = "Moyen"

' ------ De 7 à 10, idem que "7 To 10", sauf que l'on peut
' ------ exclure des valeurs (ex: 7, 8, 10)

Case 7, 8, 9, 10
    Range("B1").Value = "Excellent"

' ------ Entre guillemets pour tester les chaînes de caractères
Case "Autre"
    Range("B1").Value = "Autre"

' ------ Pour toutes les autres valeurs, donc par défaut:
Case Else
    Range("B1").Value = "Autre résultat"

End Select
End Sub


Pour l'appel à la fonction, tout dépend de la façon dont vous voulez organiser votre classeur. vous pouvez par exemple créer un bouton dans le classeur ou associer une macro à un menu.
Par Cédric, le 02 Mar 2006, 20:51 Revenir en haut de page Répondre en citant

PRN a écrit:
J'aimerais savoir ce qu'est une macro ?!
J'ai jms su ce qu'etait et a quoi ca servait ?!

Les macros sont des procédures qui permettent d'automatiser certaines tâches, notamment sous Excel. Effectuer de multiples calculs, ajouter des formules conditionnelles dans des cellules... Bref, on peut tout faire d'un seul clic avec les macros... ( Exclamation ) Wink

Qu'est-ce qu'une macro ?
Par Martine, le 03 Mar 2006, 10:28 Revenir en haut de page Répondre en citant

Bonjour Cédric,

merci de cette réponse rapide et claire.

Je vais essayer de libeller ma macro avec select case, j'avais tenté IF et THEN mais j'ai du oublié ou faire une mauvaise écriture, ce qui fait que cela ne marchait pas.

Je reviendrais dire ici si j'ai réussi, sinon... je poserais surement d'autre question...

Bonne journée
Par Cédric, le 05 Mar 2006, 13:30 Revenir en haut de page Répondre en citant

Pas de problèmes Wink

Et il ne faut pas hésiter à poster les parties de code qui posent problème, ça sera plus simple de vérifier
Par Petite_rose_noire, le 05 Mar 2006, 15:25 Revenir en haut de page Répondre en citant

IL faut s'y connaitre en code !
T'as pas des cours de rattrapage et avec des exemples ?? Razz
Par Cédric, le 05 Mar 2006, 20:40 Revenir en haut de page Répondre en citant

Rien d'autre - pour l'instant - que ce qui est dans la rubrique que j'ai posté plus haut... mais avec l'enregistreur de macros (présenté sur le site), tu peux déjà faire pas mal de choses et les adapter toi même. Mais en cas de problèmes, hésites pas à poser des questions Wink
Par Martine, le 06 Mar 2006, 09:56 Revenir en haut de page Répondre en citant

Bonjour Cédric,

me revoilà au boulot, et toujours avec ma fonction macro dont je te confie le libellé tel que je l'ai écrit, peux tu me dire s'il manque quelque chose car lorsque je fais appel à la macro, rien ne se passe. Je précise aussi que la cellule de référence (C21) est une cellule contenant une liste déroulante.

Code:
Sub statut()
  Select Case Range("C21").Value
    Case "Basilicate"
      Range("C28").Value = "UE&OCR"
    Case "Calabre"
      Range("C28").Value = "UE&OCR"
    Case "Corse"
      Range("C28").Value = "UE&OCR"
    Case "Ligurie"
      Range("C28").Value = "UE&OCR"
    Case "Macédoine_Occidentale"
      Range("C28").Value = "UE&OCR"
    Case "Andalousie"
      Range("C28").Value = "UE&OCR"
    Case "Thessalie"
      Range("C28").Value = "UE&OCR"
    Case "Souk_Ahras"
      Range("C28").Value = "Pays-tiers&OCR"
    Case "Marrakech"
      Range("C28").Value = "Pays-tiers&OCR"
    Case "Vlora"
      Range("C28").Value = "Pays-tiers&OCR"
    Case "Vratsa"
      Range("C28").Value = "Pays-tiers&OCR"
    Case "Mugla"
      Range("C28").Value = "Pays-tiers&OCR"
    Case "Autre"
      Range("C28").Value = "Hors OCR"
  End Select
End Sub


Lorsque j'utilise la fonction "SI" je peux aller jusqu'à 7 informations et ça marche très bien mais j'aimerais évidemment tout inclure et je ne vois que la macro, à moins que dans la fonction SI on puisse indiquer "SI (C21="ANDALOUSIE et LIGURIE et .....");C28="UE&OCR")".
J'attends ton conseil, je dois terminer cette partie avant la fin de la semaine, merci d'avance,

Martine
Par Cédric, le 06 Mar 2006, 13:12 Revenir en haut de page Répondre en citant

Ok je comprends mieux avec ces infos.

Donc tu as deux possibilités, la plus simple étant la fonction SI qui peut être utilisée dans ce cas. Il suffit de compléter la formule avec la fonction OU :

Code:
=SI(OU(C21="Basilicate"; C21="Calabre"; C21="Corse"; C21="Ligurie"; C21="Macédoine_Occidentale"; C21="Andalousie"; C21="Thessalie");"UE&OCR";SI(OU(C21="Souk_Ahras"; C21="Marrakech"; C21="Vlora"; C21="Vratsa"; C21="Mugla");"Pays-tiers&OCR";"Hors OCR"))


C'est un exemple simple qui peut être complété mais qui doit fonctionner tel quel.

Martine a écrit:
lorsque je fais appel à la macro, rien ne se passe. Je précise aussi que la cellule de référence (C21) est une cellule contenant une liste déroulante.

Ce qu'il faut voir dans un premier temps, c'est la façon dont la liste déroulante a été créée :

  • Avec le menu Données / Validation, option Liste.
  • Avec un élément "Zone de liste déroulante" de la barre d'outils Formulaires.
  • Avec un élément "Zone de liste déroulante" de la barre d'outils Boîte à outils contôle.


La façon de récupérer la sélection est différente selon la méthode choisie. Mais si j'ai bien compris, tu as choisi la première solution (puisque c'est la cellule qui contient la liste déroulante). Dans ce cas, la valeur choisie peut être récupérée dans VBA comme toute autre cellule normale, donc avec Range("C21").Value.

J'ai regardé ta macro et il ne semble pas y avoir de problèmes. Est-ce que ça ne serait pas un problème de majuscules (VBA étant sensible à la casse) ?

Pour information, la procédure peut être simplifiée :

Code:
Sub statut()
Select Case Range("C21").Value
Case "Basilicate", "Calabre", "Corse", "Ligurie", "Macédoine_Occidentale", "Andalousie", "Thessalie"
    Range("C28").Value = "UE&OCR"
Case "Souk_Ahras", "Marrakech", "Vlora", "Vratsa", "Mugla"
    Range("C28").Value = "Pays-tiers&OCR"
Case Else
    Range("C28").Value = "Hors OCR"
End Select
End Sub
Par Martine, le 06 Mar 2006, 14:24 Revenir en haut de page Répondre en citant

Ok merci, je vais tenter la solution du SI elle sera peut être suffisante.

Tu as raison avec la liste déroulante, j'ai utilisé la première solution, qui pour moi était la plus simple.
Entièrement autodidacte sur Excel, les forums me sont d'une grande utilité quand je rencontre un blocage.

Pour mon formulaire je ne pensais même pas devoir me servir de VBA n'ayant aucune formation la-dessus, et peu de temps imparti pour m'y former et créer mon fichier.

Mais d'y avoir touché ne serait-ce qu'un peu, je pense que je vais me lancer. C'est assez fou ce qu'on peut faire avec Excel !!

Je fais donc mes essais et reviendrais à toi si je bloque, et si tu le permets.
à+

Forums » Tableurs et logiciels de gestion (Money, Excel, Open Office...) » créer une macro FONCTION SI - ALORS · Envoyer le lien