Code qui n'exécute pas

Résolu
Bonjour,
j'ai écrit un code et j'ai pas de messages d'erreur, quand je compile pas à pas il marche bien. Mais une fois que je le jance il ne fait rien. mon code c'est le suivant:


ch="CO"
Wbk.Activate
TabOrigSupChoice = Range("BB2:BB30000")
Table = Range("BB2:BB30000")
'*****************************each Original Supplier is reported to one name*************************************
For cmpt1 = LBound(TabOrigSupChoice, 1) To UBound(TabOrigSupChoice, 1)
For cmpt2 = LBound(Table, 1) + cmpt1 To UBound(Table, 1)
If Not TabOrigSupChoice(cmpt1, 1) Like "*" & ch & "*" Then
If (Table(cmpt2, 1) <> "") And (TabOrigSupChoice(cmpt1, 1) <> "") Then
If TabOrigSupChoice(cmpt1, 1) Like "*" & Table(cmpt2, 1) & "*" Or _
Table(cmpt2, 1) Like "*" & TabOrigSupChoice(cmpt1, 1) & "*" Then
Wbk.Activate
Cells(cmpt1 + 1, 54).Select
Selection.value = Table(cmpt2, 1)
Exit For
End If
Else
Exit For
End If
Else
Exit For
End If
Next
Next


pouvez-vous m'aider svp?
merci d'avance

6 réponses

  1. Bonjour,

    D'après le code, il s'agit plutôt de tableaux à 2 dimensions (ligne,colonne) que d'objets Range. Dans ce cas, la bonne définition est :

    TabOrigSupChoice = Range("BB2:BB30000").Value
    Table = Range("BB2:BB30000") .Value

    Mieux vaut préciser la propriété Value (même si elle est en général prise par défaut) pour être sûr du résultat.
     
    1. Bonjour thev,
      c'est exactement des tableaux. Ok c'est noté
  2. Bonjour,
    Like
    sensible à la casse?
    Oui
    1. Aie la galère,
      est ce qu'il n'y aurait pas d'autres instructions pour comparer des chaines de caractères et qui seraient pas sensibles à la casse?
      peut être instr()?
    2. Merci, je jette un coup d'oeil
  3. Re a vous deux,

    Tout simplement Ucase
    1. désolée mais quelle serait la syntaxe, svp?
    2. @muiigishaRe,

      peut être instr()? Sensible a la case

       If UCase(TabOrigSupChoice(cmpt1, 1)) Like "*" & UCase(Table(cmpt2, 1)) & "*" Or _
                             UCase(Table(cmpt2, 1)) Like "*" & UCase(TabOrigSupChoice(cmpt1, 1)) & "*" Then
    3. @f894009Merci ça marche à merveille.
      svp je voudrais tester si une case de mon tableau est vide mais j'arrive pas en faisant ainsi:

      if Table(cmpt2, 1) =""then
      exit for
      end if

      ça m'affiche une erreur, comme si c'est l'adresse en fait qui est considérée comment indexer directement le contenu de la cellule?

      merci beaucoup pour toute l'aide déjà apportée et la promptitude

      merci d'avance
    4. @muiigishaen fait vu que c'est un tableau d'entier il faut plutôt écrire:

      if Table(cmpt2, 1) =0 then
      exit for
      end if

      et ça marche. en tout cas chez moi.

      Merci encore à vous
  4. Modérateur
    Bonjour,

    1 - Il nous faut le code complet
    2 - Il faut nous indiquer comment tu le lances

    Au passage, pour définir des RANGE il faut utiliser l'instruction SET
    par exemple :
    'si TabOrigSupChoice  est défini en tant que range
    ' Dim TabOrigSupChoice  as Range
    Set TabOrigSupChoice = Range("BB2:BB30000")
    


    1. Bonjour Jordane,
      je fait appel à ce module depuis un autre comme ceci:
      Call OneSUP_OneDesignation.OneSUP_OneDesignation(WDte)


      La première boucle fait bien ce qu'elle doit faire mais la 2ème non.

      Sub OneSUP_OneDesignation(Wbk As Workbook)
          
          Dim TabOrigSup(), TabOrigSupChoice(), Table() As Variant 
          Dim cmpt1, cmpt2 As Integer
          Dim ch As String
      
          'Set Wbk = Workbooks.Open(Filename:=strFileToOpen)
          ch = "GE"
          Wbk.Activate
          TabOrigSup = Range("AO2:AO30000").value
          TabOrigSupChoice = Range("BB2:BB30000").value
          '************************Column "Original supplier choices" is filled******************************************
          For cmpt1 = LBound(TabOrigSupChoice, 1) To UBound(TabOrigSupChoice, 1)
              If (TabOrigSupChoice(cmpt1, 1) = "") Or (TabOrigSupChoice(cmpt1, 1) = "Other") Then
                  Wbk.Activate
                  Cells(cmpt1 + 1, 54).Select
                  Selection.value = TabOrigSup(cmpt1, 1)
              End If
          Next
          
          Wbk.Activate
          TabOrigSupChoice = Range("BB2:BB30000").value
          Table = Range("BB2:BB30000").value
          '*****************************each Original Supplier is reported to one name*************************************
           For cmpt1 = LBound(TabOrigSupChoice, 1) To UBound(TabOrigSupChoice, 1)
              For cmpt2 = LBound(Table, 1) + cmpt1 To UBound(Table, 1)
                   If Not TabOrigSupChoice(cmpt1, 1) Like "*" & ch & "*" Then
                      If (Table(cmpt2, 1) <> "") And (TabOrigSupChoice(cmpt1, 1) <> "") Then
                          If TabOrigSupChoice(cmpt1, 1) Like "*" & Table(cmpt2, 1) & "*" Or _
                              Table(cmpt2, 1) Like "*" & TabOrigSupChoice(cmpt1, 1) & "*" Then
                              Wbk.Activate
                              Cells(cmpt1 + 1, 54).Select
                              Selection.value = Table(cmpt2, 1)
                              Exit For
                          End If
                      Else
                          Exit For
                      End If
                  Else
                      Exit For
                  End If
              Next
          Next
      
      End Sub
      
      1. Une question svp: est ce que l'instruction << ...like "*"&...&"*" >> est sensible à la casse?