Supprimer ligne Excel vba [résolu] - VB/VBA/VBS - Programmation
Marsh Posté le 13-09-2006 à 17:17:00
cpt=cpt+1
donc au départ de la procédure cpt=0 ?
ce cpt est il defini
Marsh Posté le 13-09-2006 à 18:12:09
Bonsoir,
je crois bien que pour supprimer des lignes il vaut mieux commencer la boucle par la fin, ce qui évite des pb de pointeurs.
galopin01 dixit
http://forum.hardware.fr/hardwaref [...] 4705-1.htm
Cordialement
Marsh Posté le 14-09-2006 à 09:07:35
j'ai inversé la boucle, j'ai initialisé mon cpt a mon nombre de ligne et j'ai mis comme condition d'arret
Loop Until (cpt = 2)
Car je veux k'il lise jusk'a la ligne 3 mais des que je lance l'analyse excel me plante direct alors que ca marche tres bien sans le Rows(cpt).Delete
!!!
Marsh Posté le 14-09-2006 à 09:09:32
quand je fais Rows(cpt).Delete, meme si je suis dans mon With pour bien travailler sur la bonne feuille, je ne dois pas mettre de précision sur la ligne ?
Marsh Posté le 14-09-2006 à 09:22:21
j'ai fait une fonction a coté qui supprime juste une ligne et ca fonctionne correctement, mais pourquoi lors de mon analyse complete le pc se fige direct ?
Marsh Posté le 14-09-2006 à 09:35:10
Do
DateNow = CDate(.Range("A" & cpt))
If (DateNow >= DateDebut) And (DateNow <= DateFin) Then
For cptList = 0 To ListCli.ListCount - 1
If ListCli.Selected(cptList) Then
Cli = ListCli.Column(0, cptList)
'boucle sur tous les clients selectionnés par l'utilisateur
For cptListResp = 0 To ListBoxResp.ListCount - 1
If ListBoxResp.Selected(cptListResp) Then
Resp = ListBoxResp.Column(0, cptListResp)
'boucle sur toutes les responsabilités choisies
For cptInc = 0 To ListBoxIncident.ListCount - 1
If ListBoxIncident.Selected(cptInc) Then
INC = ListBoxIncident.Column(0, cptInc)
'boucle sur toutes les numéros d'incidents choisis
For cptCat = 0 To ListBoxCat.ListCount - 1
If ListBoxCat.Selected(cptCat) Then
Cat = ListBoxCat.Column(0, cptCat)
'boucle sur toutes les catégories choisies
If (.Range("B" & cpt).Value = Cli) And (.Range("X" & cpt).Value = Resp) And (.Range("D" & cpt).Value = INC) And (.Range("H" & cpt).Value = Cat) Then
LigneValide = 1
MsgBox cpt
Else
Rows(cpt).Delete
End If
End If
Next cptCat
End If
Next cptInc
End If
Next cptListResp
End If
Next cptList
End If
cpt = cpt - 1
LigneValide = 0
Loop Until (cpt = 2)
voila, des que je lance mon analyse excel freeze direct ... juste pour les suppressions de ligne
Marsh Posté le 14-09-2006 à 09:37:46
dans ce meme code j'ai remplacé ma suppression de ligne par rentrer "plouf" dans la cellule de la colonne A correspondant à la ligne et l'analyuse se fait en 2 sec ...
Marsh Posté le 14-09-2006 à 09:42:17
Bonjour,
Je n'ai pas vu où tu mettais la valeur de départ de cpt?
@+
Marsh Posté le 14-09-2006 à 09:44:54
yes j'ai trouvé ca sur le net :
Range(i & ":" & i).EntireRow.Hidden = True
bon ok ca les supprime pas mais au moins ca marche !
Marsh Posté le 14-09-2006 à 09:50:31
par contre comment on fait pour rafficher toutes les lignes masqués par la méthode que j'ai utilisé ?
Marsh Posté le 14-09-2006 à 10:02:53
Re,
Cells.Select
Selection.EntireRow.Hidden = False
pour le delete as-tu essayé de mettre un point : .Rows(cpt).Delete
puisque tu as un with
@+
Marsh Posté le 14-09-2006 à 10:07:42
seniorpapou a écrit : Re, |
ok merci je vais tenter ca
Marsh Posté le 13-09-2006 à 14:29:47
Bonjour à tous,
Voila mon code parcours une feuille excel et je cherche a supprimer les lignes qui ne correspondent pas aux besoins de l'utilisateur.
J'ai un userform sur lequel celui ci peut faire different choix pour farie un filtre sur une feuille excel.
seulement lors de la suppression des lignes mon pc comprends plus rien, se fige et Excel plante
With Worksheets("enr_incidents" )
Do
DateNow = CDate(.Range("A" & cpt))
If (DateNow >= DateDebut) And (DateNow <= DateFin) Then
For cptList = 0 To ListCli.ListCount - 1
If ListCli.Selected(cptList) Then
Cli = ListCli.Column(0, cptList)
'boucle sur tous les clients selectionnés par l'utilisateur
If (.Range("B" & cpt).Value = Cli) Then
LigneValide = 1
MsgBox cpt
End If
End If
Next cptList
End If
If LigneValide = 0 Then
Rows(cpt).Delete
End If
cpt = cpt + 1
LigneValide = 0
Loop Until IsEmpty(.Range("A" & cpt))
End With
J'ai trouvé la commande Rows(cpt).Delete sur un site mais apperement elle fait completement planter mon programme, car j'ai deja testé mon code sans les suppressions pour vérifier qu'il ne se trompait pas sur les lignes valdies et aucun pb.
Y a til une meilleure commande pour supprimer une ligne ? ou pb dans mon code ?
Merci à tous !
Message édité par GillooZ le 14-09-2006 à 11:27:52