Vba..Boucle + If

Résolu
Waty By Night -  
dct33 Messages postés 42 Statut Membre -
Bonjour à tous,
je réalise un programme en vba et je dois présenter le projet à 14h.. XD..

Voici le code
Sub sup()
Dim i As Long
Dim cll As Range
Dim j As Long
Range("J2", [J2].End(xlDown)).Select
j = Selection.Count
For i = 2 To j
Cells(i, "J").Select
If InStr(cll, "APPRENTI") = 0 Then
cll.EntireRow.Delete
End If
Next i
End Sub


et ça me dit "variable objet ou variable de bloc with non définie"
en effectuant la macro en pas à pas, on sait que l'erreur vient à partir du if, mais je ne vois pas ce qui bloque..

Pourriez vous m'aidez s'il vous plaît ?

Merci

4 réponses

  1. dct33 Messages postés 42 Statut Membre 39
     
    Sub sup()
    Dim i As Long
    Dim cll As Range
    Dim j As Long
    Range("J2", [J2].End(xlDown)).Select
    j = Selection.Count
    For i = 2 To j
    Cells(i, "J").Select
    If InStr(Cells(i, "J"), "APPRENTI") = 0 And Cells(i, "J") <> "" Then
    Cells(i, "J").EntireRow.Delete
    i = i - 1
    End If

    Next i

    End Sub
    1
    1. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Peux tu me dire à quoi sert ton Cells(i,"J").Select ? et pourquoi And Cells(i, "J") <> "" ??? tu l'as sucé d'où ? de ton pouce ? Il n'est pas dit que si la cellule (i, "J") est vide la ligne doit être supprimée !!!

      Merci d'intervenir pour apporter un complément pouvant améliorer une solution ou corriger une erreur et non pour étaler son savoir.

      Merci
      0
    2. Waty By Night
       
      Ne vous embrouillez pas pour moi, je ne le mérite pas ^^
      Je vous remercie des solutions proposées, Polux, je ne sais pas pourquoi mais ça ne marche pas...
      dct 33, ça marche, je te remercie, même si c'est vrai que pour la cellule vide ça n'est pas important.
      Merci à vous 2 :)
      0
    3. Polux31 Messages postés 7219 Statut Membre 1 204
       
      ca fonctionne chez moi ^^

      j'ai omis de rectifier cells(i, 8) par cells(i,"J") ...
      0
  2. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    Dans le If c'est "cll" qui n'est pas défini.
    Il suffit de faire :

    For i = 2 To j
       If InStr(Cells(i, 8).Value, "APPRENTI") = 0 Then
            Rows(i).Delete
       End If
    Next i
    


    Pourquoi compliquer quand on peut faire simple ???

    ;o)
    0
  3. dct33 Messages postés 42 Statut Membre 39
     
    Bonsoir,

    Je vous ai fait ça vite fait

    effectivement il y as des trucs qui ne servent à rien
    par contre décrémenter J était utile

    M Polux 31 une chose peut vous être reconnu c'est votre manque de courtoisie
    j'aurais préféré que vous ajoutiez un truc qui fonctionne et non pas un bidouillage qui ne répond pas au problème car sans décrémentation de i et de J cela ne fonctionne pas
    Et avant de parler de sucer son pouce il faudrait que vous preniez un peu de maturité
    Salutations
    0
    1. Polux31 Messages postés 7219 Statut Membre 1 204
       
      en matière de courtoisie, je n'ai certainement pas de leçon à recevoir par quelqu'un qui poste sans même dire Bonjour.

      Il faut aussi lire ce qui est posté. J'ai pris le temps d'expliquer d'où venait l'erreur. Donner une solution sans prendre la peine de dire d'où provient l'erreur n'aidera pas le helpé, ni ceux qui cherchent des réponses.

      Ce n'est pas la première que tu interviens sur des postes en étant redondant ou hors sujet.

      Pour la petite histoire : i est incrémenté, et non décrémenté, automatiquement dans le For Next jusqu'à atteindre la valeur de j. La variable j est initialisé avant la boucle est sa valeur est fixe dans la boucle et n'a nullement besoin d'être incrémenté ou décrémenté pour que ça fonctionne.
      Alors on tourne 7 fois la souris autour du clavier avant d'écrire des arguments sucés de je ne sais où.
      Merci
      0
  4. dct33 Messages postés 42 Statut Membre 39
     
    Bonsoir,
    Vous devriez tester votre code et vous verriez que lorsque vous supprimer une ligne si vous ne faites pas une décrémentation , vous sautez une ligne
    Si vous décrémentez pas J vous allez tester des lignes inutilement
    Par contre ne vérifiez pas et restez dans vos certitudes
    0