[VBA Excel] Probleme parcours d'une colonne
mimic
-
mimic -
mimic -
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
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
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:
- [VBA Excel] Probleme parcours d'une colonne
- Déplacer une colonne excel - Guide
- Trier colonne excel - Guide
- Liste déroulante excel - Guide
- Formule moyenne excel plusieurs colonnes - Guide
- Formule somme excel colonne - Guide
4 réponses
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 :)
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 :)
Dans le doute, je récrirais le code :)
Si tu veux supprimer la ligne au lieu d'y écrire "ligne trouvee", ilfaudra utiliser l'instruction :
Ou, pour vider la ligne sans la supprimer :
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)
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.
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.