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

  • Initiateur de la discussion Initiateur de la discussion Staple1600
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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 🙄
(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...
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 ?
 
Re : [VBA] Array, Split + InStr : Erreur : demande d'explication

Bonsoir Boisgontier

Merci
Effectivement sans les espaces c'est mieux 🙄
(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:
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
 
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
 
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
911
Réponses
15
Affichages
786
Réponses
4
Affichages
734
Réponses
7
Affichages
482
Réponses
5
Affichages
573
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Retour