[VBA] + Excel + if

Résolu
Bonjour,

Je voudrais savoir comment faire pour que la colonne B affiche -20 si et seulement si la colonne A est égale à "Salut". La colonne B n'affiche rien si la colonne A ne répond pas à ce critère. Je sais que je pourrais faire cela en excel mais je ne veux pas que les usagers aient accès à la formule.

Je voulais également savoir où placer ce code pour qu'il ne s'applique qu'à la feuille1 d'excel.

je vous remercie de votre aide!
Configuration: Windows XP
Firefox 2.0.0.6

11 réponses

  1. C'est bien mais l'usager va avoir accès à la formule et c'est ce que je veux éviter.
    1. Bonjour,

      Suggestion :

      Transformer votre routine en fonction comme suit :

      Function Salut(ByVal Cible As Range) As String
          Application.Volatile
          If (LCase(Cible.Offset(0, 0).Value) = "salut") Then
              Salut = "-20"
          Else
              Salut = ""
          End If
      End Function
      '
      

      Dans la cellule B1 :
      Inséré formule / Formules personnalisée / Salut
      [ =Salut(A1) ]

      En modifiant la cellule A1, la cellule B1 réagit immédiatement.

      Lupin
      1. En fait je veux que le -20 apparaisse automatiquement lorsque j'écris Salut dans la colonne A.

        Comme j'ai d'autres information à mettre dans ma feuille excel, peut-être que je serais mieux de faire un formulaire. Comme autre information j'ai le # de projet (unique), le nom du client et le nom de la personne ressource.

        Je pourrais peut-être mettre le if en appuyant sur le 'ok' du formulaire.

        Qu'est-ce que vous en pensez ?
        1. Salut

          Private Sub Salut()
          For i = 1 To 600
          If Worksheets(1).Cells(i, 1) = "salut" Then _
          Worksheets(1).Cells(i, 2) = "-20" Else Worksheets(1).Cells(i, 2) = ""
          Next i
          End Sub
          Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
          Call Salut
          End Sub

          range toute cette procédure dans la meme feuille mais j'ai déduit la boucle a 600 car a chaque mouvement sur la feuille
          la procédure se met en route
          je ne trouve pas cela terrible qu'elle se mette en route a chaque fois
          j'aimerai que tu m'en dise un peu plus sur ce que tu veux exactement car il y a d'autres solutions
          avec un bouton sur la feuille ( la procédure es invisible ) et de plus tu protege avec un code le ( VBAProject )

          voila a ++
          1. Hourra, ça fonctionne !!!

            Maintenant que puis-je faire pour que ça se fasse automatiquement (sans avoir à exécuter la macro).

            Merci !
            1. Re

              colle cette formule dans un module de ( VBE ) et clique ensuite sur ( Executer une macro ) cette fois ci 6000 lignes seront traitées

              Public Sub Salut()
              For i = 1 To 6000
              If Worksheets(1).Cells(i, 1) = "salut" Then _
              Worksheets(1).Cells(i, 2) = "-20" Else Worksheets(1).Cells(i, 2) = ""
              Next i
              End Sub

              bye
              1. salut

                cette procédure ne fonctionnera que pour la cellule ( A1 )

                sinon tu la colle dans ( VBE ) et dans le module de la feuille 1

                bye
                1. Où est-ce que je dois écrire cette formule ?

                  Dans VBA sous la feuil1 ?

                  Est-ce que ça va s'appliquer à toute la colonne ou seulement à la cellule A1 ?

                  Merci pour ton aide !
                  1. Je le colle dans la feuil1 mais ça ne semble pas fonctionner... Je fais surement quelque chose de travers.

                    Une autre question: Comment je fais pour la formule s'applique à toute la colonne et non seulement à la cellule A1 ?

                    Merci pour ton aide...
                    1. Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
                      If Worksheets(1).Cells(1, 1) = "salut" Then _
                      Worksheets(1).Cells(1, 2) = "-20" Else Worksheets(1).Cells(1, 2) = ""
                      End Sub

                      Salut
                      colle la procédure dans le module de la " feuille1 " et test le ..

                      Bye