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. 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 ^^!!
  2. 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
  3. 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. 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. Jute pour info, je te conseille de tout programmer dans la macro y compris ta focntion gauche
        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. 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