[VBA Excel] Probleme parcours d'une colonne

Fermé
mimic - 10 août 2007 à 10:38
 mimic - 10 août 2007 à 15:25
bonjour,

en vba sur excel je souhaite parcourir une colonne afin de trouver une valeur et supprimer la ligne contenant cette valeur ( qui est unique ).
la colonne contient une cellule indicatrice de fin

j'avais commencé un code du genre
Dim strNumItem As String
strNumItem = "a"

Worksheets("qrtest").Range("C1").Select                 ' on parcourt la colonne C1
Do While ActiveCell.Value <> strNumItem

    ActiveCell.Offset(1, 0).Select
    If ActiveCell.Value = strNumItem Then
          ActiveCell.Offset(0, 1).Select
          ActiveCell.Value = "ligne trouvee"
          Exit Do
    End If
   
    If ActiveCell.Value = "fin" Then
          ActiveCell.Offset(0, 1).Select
          ActiveCell.Value = "aucun item trouvé"
          Exit Do
    End If
    
          
Loop



j'obtiens une erreur 400.
est ce parce que la macro agit sur une autre feuille? erreur d'algo?

excusez le code un peu pourri mais je debute
A voir également:

4 réponses

Sir_DEC Messages postés 143 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 12 mai 2012 75
10 août 2007 à 14:51
Autant pour moi, Range(ref).Row est le numéro de ligne, ce n'est pas un objet :)

Il faut Range(ref).EntireRow ou simplement Rows(i)

Donc ici, .Range("C" & i).Row.Delete devient :

.Range("C" & i).EntireRow.Delete

Ou

.Rows(i).Delete

Pour ton erreur j'avoue que je ne sais pas trop, mais personnellement j'évite au maximum les "Select" et les "ActiveCell" (ou "ActiveSheet" ou autre) car ils ne m'ont causé que des ennuis.

Au lieu de sélectionner l'objet puis de tester "Objet sélectionné", test simplement l'objet :)
2
Sir_DEC Messages postés 143 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 12 mai 2012 75
10 août 2007 à 10:56
Dans le doute, je récrirais le code :)

Const strNumItem As String = "a"
Dim i As Integer

i = 1
With Worksheets("qrtest")   ' On parcourt la colonne C
    Do While (.Range("C" & i) <> strNumItem And .Range("C" & i) <> "fin")
        i = i + 1
    Loop
' Ici on teste la cellule actuelle : soit on a trouvée, soit on est à la fin
    If (.Range("C" & i).Value = strNumItem) Then
        ' On a trouvé
        .Range("C" & i) = "ligne trouvee"
    ElseIf (.Range("C" & i).Value = "fin") Then
        ' On a pas trouvé
        .Range("C" & i + 1) = "aucun item trouvé"
    End If
End With


Si tu veux supprimer la ligne au lieu d'y écrire "ligne trouvee", ilfaudra utiliser l'instruction :
.Range("C" & i).Row.Delete

Ou, pour vider la ligne sans la supprimer :
.Range("C" & i).Row.Clear
(ClearContents si on veut garder les mises en forme)
0
Merci de ton aide
Ton premier morceau de code fonctionne bien je n'ai plus d'erreur 400.

cela dit pour la suppression au lieu de l'affichage, ca ne marche pas il me dit "Objet Requis" ( quand il rentre dans le premier "if" ).

Sinon pour le code que j'ai tapé, l'erreur se situe au niveau de la selection de la cellule c1. Quand je fais un test avec ce code qui agit dans la feuille d'ou est lancée la macro, je n'ai pas de probleme... donc je ne comprnds pas trop l'erreur.
0
ca marche c'est bon :)
merci encore de ton aide et je suivrais tes conseils pour la suite. Je ne connais que peu de fonctions vba et d'objets excel exploitables donc au moins j'en utilise pour des traitements, au mieux c'est.

Probleme resolu.
0