[VB-EXCEL] Insertion variable dans formule

Bonjour,
Je souhaiterai savoir s'il est possible de placer une variable dans une formule.
Je m'explique :
Je souhaite inscrire successivement une formule dans une suite de cellules via un code VB car la formule change en fonction de la case choisie dans une list box.
Pour simplifier le code je souhaite savoir si, dans la formule inscrite dans le code, on peut insérer une variable dont la valeur changera suivant la case sélectionnée dans la list box.

PS: Comment inscrire une formule matricielle et non simple formule(.FORMULA) via un code?

Merci Cordialement
Configuration: Windows XP
Firefox 3.0.6

28 réponses

Résumé de la discussion

Insertion d'une variable dans une formule Excel via VBA pour qu'elle évolue selon la sélection d'une liste déroulante et l'écriture d'une formule matricielle. Des échanges montrent comment passer la valeur dans le code pour construire la chaîne de formule et distinguer entre formule simple (.Formula) et matricielle (.FormulaArray), avec tests qui renvoient 0 selon la plage. D'autres échanges portent sur l'emplacement du code (module ou feuille) et sur la gestion de conditions complexes, critères en colonne et chiffres issus de la liste, avec l'idée d'utiliser une colonne d'appui. Par ailleurs, une solution pratique consiste à ajouter une colonne convertissant les conditions en valeurs numériques (1, 2, 3) pour piloter la mise en forme, évitant l'insertion directe d'une formule matricielle.

Bobot (l’IA à votre service)
  1. Contributeur
    re ;)

    envoie moi un exemple car là... je sait pas si tu est en forme conditionnelle ou pas ... pour info, j ai garder les exemples que j avais tester pour toi ;)
    1. Coucou
      d'abord merci pour ton aide alors je suis passé par une feuille de calcul et via la formule Si(G9<>"";Si(G9+($G$5*365)<AUJOURD'HUI;0;1);"TEXTE")
      (peut être une faute les 2 pc sont pas cote à cote)

      Bref je passe par cette formule ca me donne donc bien par le NB.SI de valeur 1 le même nombre de personnes que dans la synthèse globale du fichier.

      Maintenant je sais pas comment y inclure une triple condition
      ca reprend l'idée d'avant en prog c'est à dire :
      Si L1 = "1" (date verte ou orange) ET Si A1 = "Direction" (service) ET Si B1 = "Chef" (poste)

      une idée ? je veux pas faire d'erreurs de syntaxe ou autre car après cette formule s'adapte à chaque "service" et "poste" si je puis dire.

      merci de ton aide
      1. Contributeur
        Sinon, met ta formule dans une autre case qui renverrais 1 2 ou 3 (sans passer par la forme conditionnelle. et en fonction faire la forme conditionnelle en passant par l'assistant (<,<=,>,>=;==) qui lui est gérer par le module ;)

        Enfin, si tu m a compris :p

        mais je continu de chercher ;)
        1. re
          Bon alors on a 2 choix
          - ou tu te casses toute la nuit pour moi car j'avoue que je suis dépassé la et jdois finir pour demain aprem.
          - ou si j'ai bien compris je mets ça via des formules dans une page cachée spéciale pour la synthèse avec 1,2,3...
          Mais dans ce cas il me faudrait la formule à mettre dans la page cachée et me donner donc l'appel modifié de la fonction VB
          Je suis désolé de te demander de marcher mon travail mais la j'arrive au bout du délai et j'aimerai que tout soit près.
          Malheureusement je n'ai pas le fichier car je ne peux pas le sortir du taff en tous cas merci!
        2. Contributeur
          @Doudou95ah ben je pense que c'est trop tard alors :s

          Bon, ben petite explication quabd meme.. au cas ou...

          Actuellement tu à une mise en forme conditionnelle qui à 3 formules :

          condition case verte
          =SI(AUJOURDHUI()-S178<($S$5*365*0,8);VRAI;FAUX)

          condition case rouge
          =ET(S178<>"";SI(AUJOURDHUI()-S178>($S$5*365);VRAI;FAUX))

          condition case orange
          =ET(S178<>"";SI(AUJOURDHUI()-S178>($S$5*365);VRAI;FAUX))

          ma solution serrait de mettre dans une autre colonne :

          =SI(AUJOURDHUI()-S178<($S$5*365*0,8);1;SI(AUJOURDHUI()-S178>($S$5*365);2;SI(AUJOURDHUI()-S178>($S$5*365);3;4)))

          En esperant que tu n ai jamais 4...

          donc ca t'affiche 1 2 3.. et donc tu peux faire la mise en forme conditionnelle sur cette colonne avec plutot que 'la formule est' choisir 'la valeur de la cellule est' et là, le module fonctionnera ;)
      2. Contributeur
        une piste ici...
        http://www.glossaire.be/english_french/glossaire_excel_fonction_anglais_francais.htm

        mais c'est pas du gateau:s
        1. Contributeur
          Alors.. apres une grosse recherche et une mega prise de tete.. je pense que j'ai trouver.. mais ca va pas etre facile à gérer..

          Le truc c'est que evaluate evalue la fonction au format anglais.. donc tes si, aujourdhui, faux et vrai.. ben .. ca loui plait pas...

          J'essai de trouver une parade ;)
          1. Contributeur
            Ah ben voila.. dis moi exactement comment se fait ta forme conditionnelle...
            Dans le module, je ne gere que <,>,<=,>=,=.. alors si c'est autre chose, il le gere pas ;) mais y a moyen de le gérer :p
            1. Voila :

              condition case verte
              =SI(AUJOURDHUI()-S178<($S$5*365*0,8);VRAI;FAUX)

              condition case rouge
              =ET(S178<>"";SI(AUJOURDHUI()-S178>($S$5*365);VRAI;FAUX))

              condition case orange
              =ET(S178<>"";SI(AUJOURDHUI()-S178>=($S$5*365*0,8);VRAI;FAUX))

              Attention ces conditions sont liée à la cellule S178
            2. @Doudou95lol tu t'en sors? moi j'galère sur une fenêtre à enlever le mastic actuellement :(
          2. Contributeur
            quel genre de proble ?
            1. Bonjour,
              Alors j'ai testé tout ça :

              - Quand je test sur une colonne dont les cellules contiennent des valeurs qui ne sont pas des dates et qui ne sont pas soumises à une mise en forme conditionnelle, j'obtiens nbvertes = | nboranges= | total = 0

              - Quand je test sur une colonne dont les cellules contiennent des dates et qui sont soumises à une mise en forme conditionnelle, j'obtiens à la ligne "If Application.Evaluate(FC.Formula1) Then" l'erreur "incompatibilité de types"...

              Comment ça se fait? help me encore plz en attendant je vais reprendre ton fichier et voir un peu encore :s

              help merci
          3. Bonjour,
            Bon quand je test il me trouve non stop des problèmes dans la fonction O_O
            1. voila suis rentré je test ça tout à l'heure j'ai pris le fichier et jte dis ce qu'il en est merci beaucoup à plus tard bisoux
              1. Contributeur
                ah ben dans mon exemple la j ai pris la peine de mettre en L la forme conditionnelle et en C qlqchose et en F : ABCDF ou rien.. alors t as pas du voir la derniere version ;)
                1. Bon je rentre chez moi je vais essayer sinon je te redemanderai lundi :s si t'es là
              2. Contributeur
                feuil1 est le nom de ta feuille.. tu as du la renommée ;)
                1. Effectivement bon je vais tester mais j'obtiens 0 je pense que c'est du à ton range
                  Ca sélectionne A1 si je ne m'abuse qu'est ce que ça donne pour L :D7
              3. que du texte la mise en forme conditionnelle ne concerne que les dates
                Sans plus de précisions, si tu préfères, dans cette synthèse C sera le "service" et F "le poste/statut" si c'est plus clair ^^ c'est une image
                1. Contributeur
                  il te faudra le module au complet dans ton fichier xl...

                  ptite précision pour la suite ... A B ou C.. c'est du texte dedans ou c'est aussi une mise en forme conditionnelle?? pareil pour la colonne C..
                  1. Contributeur
                    ok..
                    voici mon fichier qui marche avec mise en condition ;)

                    http://dl.free.fr/getfile.pl?file=/jnw3ZKqr
                    1. Merci tu déchires on voit le bout
                      mais :D il y a un mais
                      je ne comprends pas tout je dois récup tout le code et le mettre dans un module?
                      et pour ce qui est de compter les cases vertes, il me faut le nombre de case vertes en colonne "L" mais il ne faut pas oublier que la case n'est compter QUE si sur la même ligne :
                      - la case en F = A ou B ou C
                      &
                      - la case en C = QQCHOSE

                      Comme je n'y comprends pas grand chose au code ou et comment dois-je placer la condition :s
                  2. Contributeur
                    ah ben si tu dis pas tout aussi !!!
                    couleur par mise en forme conditionnelle, ca change tout... et donc ca marche pas avec Interior.ColorIndex qui lui ne marche que si tu coloris la case via le ptit pinceau...

                    Bon, ok, je sais xl, c est pourri.. tu as l impression que c'est pareil, mais bon ;)

                    J me renseigne ;)
                    1. xD je suis désolé mais ce fichier me prend la tête à force et ton aide m'est fortement précieuse!
                      D'ailleurs je suis persuadé que ce que tu m'as passer pour Interior.ColorIndex me servira d'ici peu merci de pas lâcher l'affaire <3 :D
                  3. Contributeur
                    hein??? comprend pas.. j ai jamais fait référence à un jpg moi..
                    1. mdr mais non c'est un screenshot des 3 formules avec leur code couleur que contient la mise en forme conditionnelle appliquée aux cellules
                      Et je te montre par ce screenshot qu'il y a pourtant bel et bien des cellules vertes dans le tableau

                      Au fait j'ai testé pour la couleur allant de 1 à 50 et il me trouve toujours 0 :s
                  • 1
                  • 2