Macro Excel

Résolu
Bonjour,

Je suis novice dans la discipline et souhaiterais de l'aide
J'essaye de bricoler une macro pouvant comparer 2 cellules sur un fichier Excel mais rien ne fait

Dans ma feuille "Feuil1" j'ai la chose suivante:
A1= =gauche(B1;5)=12345
B1= 123456789
C1= 12345
D1= Ø89

Dans ma fenêtre macro j'ai la chose suivante:

Sub Macro1()

If Worksheets("Feuil1").Cells(1, 1).Value = Worksheets("Feuil1").Cells(1, 3).Value Then
Worksheets("Feuil1").Cells(2, 1).Value = Worksheets("Feuil1").Cells(1, 4).Value
End If

End Sub

En principe je devrais avoir après avoir exécuté la macro la chose suivante: A2= Ø89
Seulement j'ai rien dans la cellule car le programme ne voit pas que A1 et C1 sont identiques

Quelqu'un peut m'aider?

MErci,

MacrExcil
Configuration: Windows XP

7 réponses

  1. Cela vient du format.

    Je te conseille de passer par des variable temporaire

    du genre:

    Sub Macro1()

    dim varible1(0) as integer
    dim varible2(0) as integer

    variable1(0)=Worksheets("Feuil1").Cells(1, 1).Value
    variable2(0)= Worksheets("Feuil1").Cells(1, 3).Value
    If variable1(0)= variable2(0)Then
    Worksheets("Feuil1").Cells(2, 1).Value = Worksheets("Feuil1").Cells(1, 4).Value
    End If

    erase variable1
    erase variable2

    End Sub
    1. Bonjour,

      La fonction [ Gauche ] renvoie une chaine de caractère et vous comparer du texte avec un chiffre.

      Regarder la position des caractères dans A1, ils sont à gauche et dans C1 ils sont à droite !

      Remplacer la formule dans A1 par :

      A1 = [=CNUM(GAUCHE(B1;5))]

      CNUM pour convertion en numérique.

      Lupin
      1. Jute pour info, je te conseille de tout programmer dans la macro y compris ta focntion gauche
        1. Bonsoir,

          en complément, j'ajouterai ceci ...

          Si vous débuté, j'ajouterai qu'il faut
          bien comprendre qu'il s'agit d'une situation
          de contenant et de contenu.

          Et de façon plus explicit, il s'agit
          de type de contenant et
          de type de contenu.

          Explication:

          Dans excel, à l'ouverture, chaque cellule
          représente un contenant ayant par défaut
          un type de données dit par XL [ Standard ],
          il y a [ Nombre, Monétaire, Date, Heure, ... ].

          En ce qui a trait au contenu de la cellule,
          ça dépend de ce que l'on inscrit, si on inscrit
          une Date, le compilateur effectura une démotion
          de type passant de [ Standard ] à [ Date ].

          Si l'on inscrit une heure, il en sera de même.

          Donc lorsque vous utilisé une fonction d'Excel,
          vous devez impérativement connaître le type de
          la donnée retourné par cette fonction pour le
          manipuler dans le bon sens je dirais.

          Pour recupérer une donnée, il est prudent sous
          certains compilateur comme VBA de forcer explicitement
          certaines promotion démotion de type.

          Dans votre code, vous ne faites qu'une seule
          affectation, sinon vous avez bien fabriqué
          la macro car il n'y as de sélection qu'a l'affectation.

          Autre méthode suggerer :

          Option Explicit
          '
          
          Sub Compare1()
          
              With Worksheets("Feuil1")
                  If (.Cells(1, 1).Value = .Cells(1, 3).Value) Then
                      .Cells(2, 1).Value = .Cells(1, 4).Value
                  End If
              End With
              
          End Sub
          '
          


          dans un autre exemple, je cache la macro
          avec un argument bidon.

          et comme suggéré par Frippons, j'effectue la
          conversion [ CNum ] ~ [ Val ].

          Sub Compare2(Optional ByVal Indice As Long)
          
              With Worksheets("Feuil1")
                  If (Val(.Cells(1, 1).Value) = Val(.Cells(1, 3).Value)) Then
                      .Cells(2, 1).Value = .Cells(1, 4).Value
                  End If
              End With
          
          End Sub
          '
          

          Lupin
          1. Bonjour,

            je vous remercie Lupin et Frippons pour votre aide et votre clair voyance...
            Je n'ai pas la science infuse en programmation et dieu seul sait que je ne l'aurai jamais... mais j'y travaille.

            MErci beaucoup pour votre aide.
            MacrExcil
            1. Bonjour,

              nouveau challenge....

              je cherche à coder sous macro la formule suivante dans la case A1 = [=CNUM(GAUCHE(B1;5))]
              je ne trouve pas de commandes ou formules toute faite.

              Un petit coup de main ne serait pas de refus.

              Merci,
              MacrExcil.
              1. Re :

                Alors, quelques base sur le "how to do".

                1.) Spécification de(s) la donnée(s)
                Une formule connu sous Excel à coder en VBA

                2.) Lancer l'enregistreur de macro
                // Menu Excel / Outils / Macros / Nouvelle macro...

                --> Une nouvelle barre d'outils apparaît avec un carré,
                le carré c'est pour arrêter l'enregistrement de la macro
                que vous aurai terminer l'inscription de la formule.

                3.) Inscrire la Formule (ou créé la à l'aide de l'assistant)

                4.) Sélectionner une cellule plus loin

                5.) Clic sur le carré de la nouvelle barre d'outils pour arrêter l'enregistreur de macro.

                [ Alt ] [ F11 ],

                Vous rechercher votre nouvelle macro qui devrait être très souvent
                dans un nouveau.

                Ensuite, examiner le code si des instructions vous embête ?

                Copier/coller ici toute la macro, pour avoir une meilleur vue d'ensemble :-)

                Plein d'expert VBA navigue ici sur le site :-)

                Lupin
            2. re:

              Voici ce que ça me donne :

              Sub AjouteFormule1()
              
                  Range("A1").Select
                  ActiveCell.FormulaR1C1 = "=VALUE(LEFT(RC[1],5))"
                  Range("A2").Select
              
              End Sub
              '
              


              et voici la transformation que j'en fais :
              Sub AjouteFormule2()
              
                  With ActiveSheet
                      ActiveCell.Value = "=VALUE(LEFT(B1,5))"
                  End With
              
              End Sub
              '
              


              toujours dans le but d'éviter un [ Select ] lorsque non requis.

              Lupin
              1. Lupin,

                je ne sais quoi dire => GENIAL ca marche....

                MErci et bon weekend, je m'en vais me bidouiller une autre macro ^^!!