Supprimer ligne Excel vba [résolu]

Supprimer ligne Excel vba [résolu] - VB/VBA/VBS - Programmation

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
Reply

Marsh Posté le 13-09-2006 à 14:29:47   

Reply

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

Reply

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


Message édité par seniorpapou le 13-09-2006 à 18:18:41
Reply

Marsh Posté le 13-09-2006 à 19:52:57    

Je confirme !

Reply

Marsh Posté le 14-09-2006 à 08:17:27    

oki je vais inverser ma boucle et voir ce que ca donne :)

Reply

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
 
!!!

Reply

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 ?

Reply

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 ?

Reply

Marsh Posté le 14-09-2006 à 09:28:08    

bonjour,
repostes ton code stp
Cordialement

Reply

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

Reply

Marsh Posté le 14-09-2006 à 09:35:10   

Reply

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 ...

Reply

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?
@+

Reply

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 !

Reply

Marsh Posté le 14-09-2006 à 09:45:12    

je l'initialise plus haut dans mon code tkt

Reply

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é ?
 

Reply

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
   
@+

Message cité 1 fois
Message édité par seniorpapou le 14-09-2006 à 10:04:56
Reply

Marsh Posté le 14-09-2006 à 10:07:42    

seniorpapou a écrit :

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
   
@+


 
ok merci je vais tenter ca

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed