Contourner les limites de Match

Résolu
Bonjour,

Avec le code ci-dessous qui fonctionne bien sur une dizaine de colonnes, je voudrais étendre le contrôle sur 470 colonnes (et toujours 122 lignes) pour que la macro contrôle bien l'ensemble des saisies dans l'entièreté de mon tableau.

Dès que je change la valeur de j au-delà de 20, un bug apparaît, qui doit être lié au nombre de cellules à vérifier.

Comment puis-je faire ça ?

Mon code :

Dim i As Variant
Dim j As Variant

For i = 6 To 126
For j = 5 To 41

CF = Array("LM", "LL", "SL", "PF", "PM", "BV", "NP", "IF", "FO", "SB", "AM", "RT", "CP", "RE", "JV", "DE", 52, "", 0, "52")

V = Cells(i, j).Value

TEST = Application.Match(Left(V, 2), CF, 0)

If IsError(TEST) Then Cells(i, j).Interior.Color = 255

Next
Next

5 réponses

  1. Salut,

    Déclare les en long pour voir.
    -1
    1. Même souci, la macro plante avec une 'Erreur d'exécution : 13 Icompatibilité de type" et le débogueur met en jaune :

      TEST = Application.Match(Left(V, 2), CF, 0)
      0
      1. A mon avis c'est le CF qu'il ne comprends pas.
        Tu as mis un espion sur V et CF?
        0
      2. @Pierre1310Non, je ne sais pas comment ça fonctionne, les espions, je ne suis pas super au point en VBA...
        0
      3. Tape espions vba sur google ...
        0
    2. Bonjour
      Ajouter la déclaration de la variable v
      Dim v As Variant

      Mais vous pouvez vous en passer en écrivant directement le résultat dans test
          Dim i As Variant
          Dim j As Variant
          For i = 6 To 126
              For j = 5 To 475
                  CF = Array("LM", "LL", "SL", "PF", "PM", "BV", "NP", "IF", "FO", "SB", "AM", "RT", "CP", "RE", "JV", "DE", 52, "", 0, "52")
                  TEST = Application.Match(Left(Cells(i, j), 2), CF, 0)
                  If IsError(TEST) Then Cells(i, j).Interior.Color = 255
              Next
          Next

      Cdlt
      0
      1. Bonjour, j'ai essayé des deux manières, et même en copiant 50 fois le code pour découper mon grand nombre de colonnes en des séries plus compactes... Sans succès.
        0
      2. @VerchainRE
        Bizarre, ça fonctionne bien chez moi, vous serait-il possible de déposer votre fichier (sans données personnelles) sur cjoint .com afin que l'on puisse voir où se situe le problème?
        0
      3. @Frenchie83Bonjour,

        Le lien fichier :

        http://www.cjoint.com/c/FDsfQEmwDz0
        0
    3. Contributeur
      Bonjour

      l'incompatibilité vient non de J mais de la valeur "zéro-nombre" dans ton array :
      en effet ton left(cells(i,j),2) transforme le zéro dans ta cellule en "zéro-texte"

      essaie avec
      "JV", "DE","","0", "52")

      le "52-nombre" ne sert à rien et est supprimé

      0
      1. Bonjour, j'ai essayé cette modification, le type d'erreur a changé :

        "Erreur d'exécution 1004 : erreur définie par l'application ou par l'objet"
        0
    4. Bonjour
      En ligne 20 colonne "W" il ne trouve pas parce que la formule rechechev renvoi "#REF"
      idem en ligne 23 colonne"Y"
      Cdlt
      0
      1. Merci, je n'avais pas vu, j'ai corrigé mais ça ne résoud pas le problème pour l'instant...
        0
      2. Contributeur
        Bonjour

        mettre V=cells(i,i) APRES les deux FOR

        car actuellement i et j n'étant indexés on a
        V=cells(0,0) --->erreur !!!
        0
      3. @VerchainRE
        Vous avez encore pleins d'erreurs '#NA" ligne 29 colonne BG à BK en ligne 3 colonne BK et peut-être d'autres encore. Vérifiez tout votre tableau.
        Je dois m'absenter pour la journée, quelqu'un d'autre regardera sûrement au cas ou le problème subsisterai encore.
        Cdlt
        0
      4. @michel_mMerci à tous, après corrections et application de vos conseils, ça fonctionne finalement...
        0