[EXCEL] Comparaison cellules

Résolu
Bonjour,

Je souhaite comparer des cellules sur 2 feuilles excel et mettre une donnée dans la 3ème feuille.

J'ai commencé une macro (ci-dessous), mais j'ai une "run-time error" à l'exécution.

For cpt_lot = 0 To 15000
        
        'Initialisation des param
        Lot = Worksheets("Lot_PC").Cells((2 + cpt_lot), 1).Text
        Wafer = Worksheets("Lot_PC").Cells((2 + cpt_lot), 2).Numeric
        Lot_present = False
        Wafer_present = False
        rowsearch = 2
        
        'Le Lot est présent dans la feuille Yield ?
        While (VarType(Worksheets("Yield_Probe").Cell(rowsearch, 1)) <> 0 And VarType(Worksheets("Yield_Probe").Cell(rowsearch, 3)) <> 0)
            If ((Worksheets("Yield_Probe").Cells(rowsearch, 1).Value = Lot) And (Worksheets("Yield_Probe").Cells(rowsearch, 3).Value = Wafer)) Then
                Lot_present = True
                Wafer_present = True
            End If
            rowsearch = rowsearch + 1
        Wend
        
        rowyield = 2
        While (VarType(Worksheets("Yield_Probe").Cell(rowyield, 1)) <> 0 And VarType(Worksheets("Yield_Probe").Cell(rowyield, 3)) <> 0)
            If ((Worksheets("Yield_Probe").Cells(rowyield, 1).Value = Lot) And (Worksheets("Yield_Probe").Cells(rowyield, 3).Value = Wafer)) Then
                yield = Worksheets("Yield_Probe").Cells(rowyield, 7).Value
            End If
            rowyield = rowyield + 1
        Wend
            
        If ((Lot_present = True) And (Wafer_present = True)) Then
                Worksheets("Lot_PC_Yield").Cells(rowsearch, 8) = yield
        End If
        
    Next cpt_lot


Merci,
Sandrillon

7 réponses

  1. Bonjour sandrillon,
    Essayer de faire un traçage de votre macro (exécution pas à pas), cela vous permettra de voir à quelle ligne d'instruction le problème survient.
    Bonne chance.
    1. Merci de votre aide !

      En fait j'avais mal orthographié une instruction...

      Merci encore,

      Sandrillon
  2. Bonjour Sandrillon,

    J'obtiens ton erreur 438 avec cette ligne-là :

    Wafer = Worksheets("Lot_PC").Cells((2 + cpt_lot), 2).Numeric

    Numeric ne s'applique pas tel quel sur une cellule.
    Si tu veux savoir si le contenu d'une cellule est numérique, fais :

    If IsNumeric(<la valeur de ta cellule>) then...
    1. Heu par contre je crois que j'ai fais une boucle sans fin....

      Je lui ai dit de compter jusqu'à 15000.
      Dans la feuille 1 (référence) il y a 7000 lignes à scruter
      Dans la feuille 2 (à comparer) il y a 13000 lignes à scruter

      Ca prend longtemps à votre avis ?
      1. Peut-être peux-tu tester ta macro sur un échantillon, avant de la lancer en réel. Sur une dizaine de lignes tu verras si tu boucles.
    2. hello

      j'ai une erreur 438 sur cette ligne ci :

      cnt = cnt + Application.WorksheetFunction.Abs(moy - val)

      et l'erreur est placee uniquement sur ABS cense donner la valeur absolue. Le reste de la formule fonctionnant avec la fonction somme par exemple.

      Une idee ?
      Merci
      1. Bon alors je ne comprend pas, je suis sur un PC anglais, et dans l'HELP liste des fonctions VBA n'apparait pas Abs ni Sqr...

        quelqu'un aurai des infos?
        merci
        1. Bonsoir,

          en fait, ABS et SQR existent mais pas en Worksheetfunction.

          ce sont des fonctions VBA natives

          cordialement

          PS : en feuille de calcul, c'est SQRT, donc en VBA tu peux écrire =[SQRT(2)] ou =SQR(2) pour obtenir la racine carrée de 2. la différence est dans les crochets qui font l'équivalent d'un Evaluate.
          Ceci dit, utilise les fonctions VBA natives.
          1. ok merci por cette reponse.

            Par contre "fonction nqtive " là je cale un peu pourrais tu expliquer?

            merci
          2. ah ok j'ai compris je viens d'essayer.
            Donc pas besoin de blabla ca fonctionne tout seul avec =[SQRT(2)]

            Merci.
        2. J'ai ça comme message d'erreur

          "Run-time error '438'
          Object doesn't support this property or method"