[VBA] Array, Split + InStr : Erreur : demande d'explication

Staple1600

XLDnaute Barbatruc
Bonjour à tous

En essayant de répondre à ce post: voir le post

J'ai voulu essayé ces deux approches

La première macro fonctionne pas la deuxième

La question est donc: qui pourrait me dire ou est l'erreur dans le
code de la macro MACRo_PAS_OK

Code:
Sub MACRo_OK()
V = "AT": W = "C"
X = "R": Y = "APS"
Z = "M"
For i = Sheets("Feuil1").[B65536].End(xlUp).Row To 5 Step -1
If InStr(1, Cells(i, 3).Value, V) = 0 _
And InStr(1, Cells(i, 3).Value, W) = 0 _
And InStr(1, Cells(i, 3).Value, X) = 0 _
And InStr(1, Cells(i, 3).Value, Y) = 0 _
And InStr(1, Cells(i, 3).Value, Z) = 0 Then
Cells(i, 2).Copy Sheets("Feuil2").Cells(i, 2)
End If
Next i
End Sub
Code:
Sub MACRo_PAS_OK()
tab_lo = Split("C, R, APS, M, AT", ",")
For i = Sheets("Feuil1").[B65536].End(xlUp).Row To 5 Step -1
If InStr(1, Cells(i, 3).Value, tab_lo(1)) = 0 Then
Cells(i, 2).Copy Sheets("Feuil2").Cells(i, 2)
End If
Next i
End Sub
Merci à tous ceux qui prendront le temps de lire ce post.
 
Dernière édition:
Solution
Re : [VBA] Array, Split + InStr : Erreur : demande d'explication

Bonsoir Boisgontier

Merci
Effectivement sans les espaces c'est mieux :rolleyes:
(erreur de ma part du à une transformation de
tab_lo=Array("C", "R", "APS", "M", "AT")
en tab_lo = Split("C, R, APS, M, AT", ",") par un copier/coller)

Comme quoi une relecture d'un code par une tierce personne est toujours utile


Voila maintenat cela fonctionne.
Code:
Sub MACRo_OK_Bis()
tab_lo = Split("C,R,APS,M,AT", ",")
For i = Sheets("Feuil1").[B65536].End(xlUp).Row To 5 Step -1
If InStr(1, Cells(i, 3).Value, tab_lo(0)) = 0 _
And InStr(1, Cells(i, 3).Value, tab_lo(1)) = 0 _
And InStr(1, Cells(i, 3).Value, tab_lo(2)) = 0 _
And InStr(1, Cells(i, 3).Value, tab_lo(3)) = 0 _
And InStr(1...

Staple1600

XLDnaute Barbatruc
Re : [VBA] Array, Split + InStr : Erreur : demande d'explication

Bonsoir Spitnolan08


tab_lo(1)) est pour faire le test sur la deuxième valeur du tableau

et même en testant avec 0,1,2,3

c'est pareil, il ne se passe rien

On ne peut pas utilise i puisque mon tableau ne contient que 5 éléments

et i étant relatif à la plage de cellules, je ne peux l'utiliser non ?
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] Array, Split + InStr : Erreur : demande d'explication

Bonsoir Boisgontier

Merci
Effectivement sans les espaces c'est mieux :rolleyes:
(erreur de ma part du à une transformation de
tab_lo=Array("C", "R", "APS", "M", "AT")
en tab_lo = Split("C, R, APS, M, AT", ",") par un copier/coller)

Comme quoi une relecture d'un code par une tierce personne est toujours utile


Voila maintenat cela fonctionne.
Code:
Sub MACRo_OK_Bis()
tab_lo = Split("C,R,APS,M,AT", ",")
For i = Sheets("Feuil1").[B65536].End(xlUp).Row To 5 Step -1
If InStr(1, Cells(i, 3).Value, tab_lo(0)) = 0 _
And InStr(1, Cells(i, 3).Value, tab_lo(1)) = 0 _
And InStr(1, Cells(i, 3).Value, tab_lo(2)) = 0 _
And InStr(1, Cells(i, 3).Value, tab_lo(3)) = 0 _
And InStr(1, Cells(i, 3).Value, tab_lo(4)) = 0 Then
Cells(i, 2).Copy Sheets("Feuil2").Cells(i, 2)
End If
Next i
End Sub
 
Dernière édition:

wilfried_42

XLDnaute Barbatruc
Re : [VBA] Array, Split + InStr : Erreur : demande d'explication

Bonjour à tous

Personnellement, je ne vois pas du tout le meme traitement d'une macro à l'autre

La premiere qui fonctionne, tu testes pour chacune des lignes si chacun des 5 caractere est present
Dans la seconde, tu testes sur les 5 ligne uniquement la presence du 1er caractere

For i = Sheets("Feuil1").[B65536].End(xlUp).Row To 5 Step -1
If InStr(1, Cells(i, 3).Value, tab_lo(1)) = 0 Then
Cells(i, 2).Copy Sheets("Feuil2").Cells(i, 2)
End If

Donc si j'ai compris ton premier code, si aucun des 5 caractere je mets à jour

Code:
For i = Sheets("Feuil1").[B65536].End(xlUp).Row To 5 Step -1
      for j = 1 to 5
           if instr(cells(i,3),tab_lo(j)) > 0 then exit for
      next j
' si rien n'est trouve, j prendra la valeur 6
      if j = 6 then Cells(i, 2).Copy Sheets("Feuil2").Cells(i, 2)
next i
End If
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : [VBA] Array, Split + InStr : Erreur : demande d'explication

Attention! tab_lo() commence à 0
Code:
Sub MACRo_PAS_OK()
    tab_lo = Split("C,R,APS,M,AT", ",")
    For i = Sheets("Feuil1").[B65536].End(xlUp).Row To 5 Step -1
        j = LBound(tab_lo)
        témoin = False
        Do While j <= UBound(tab_lo) And Not témoin
          If InStr(1, Cells(i, 3).Value, tab_lo(j)) > 0 Then témoin = True
          j = j + 1
        Loop
        If Not témoin Then Cells(i, 2).Copy Sheets("Feuil2").Cells(i, 2)
    Next i
End Sub

JB
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] Array, Split + InStr : Erreur : demande d'explication

Re tous, bonsoir Wilfried_42


-->Wilfried_42
J'avais mis 1 juste pour tester et lors de ce test,il ne se passait rien.
Ce qui était à l'erreur relevé par Boisgontier (les espaces dans tab_lo).
Code:
Sub m_Wilfried_42()
'Modifié car pas en Option Base 1
tab_lo = Split("C,R,APS,M,AT", ",")
For i = Sheets("Feuil1").[B65536].End(xlUp).Row To 5 Step -1
      For j = 0 To 4
           If InStr(Cells(i, 3), tab_lo(j)) > 0 Then Exit For
      Next j
' si rien n'est trouve, j prendra la valeur 5
      If j = 5 Then Cells(i, 2).Copy Sheets("Feuil2").Cells(i, 2)
Next i
End Sub
Merci de votre intérêt.

(j'ai encore du progrès à faire avec les boucles et les array)
 
Dernière édition:

Statistiques des forums

Discussions
312 198
Messages
2 086 117
Membres
103 121
dernier inscrit
SophieS