Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/12/2011, 21h07   #1
Invité de passage
 
Homme
Inscription : décembre 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 12
Points : 2
Points : 2
Par défaut P'ti problème de boucle

bonsoir a tous,

alors voila je me prends la tête depuis quelques jours avec une boucle que je n'arrive pas a finir :/ c'est en fait 3 boucles imbriqués.

voici le code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
w = 2 
Sheets("RECAP").Select
nl = Range ("A655363").End(xlUp).Row
For y = 2 To nl 
Sheets("RECAP").Select
If Cells(y, 10)="CLIDIR" Then
Sheets("RECAP").Select
ref = Cells(y, 1)
Sheets("SQL DO").Select
Do While Cells(w, 1) <> ""
c = 0 
refdo = Cells(w,1)
Do Until refdo = ref
w = w + 1
c = c + 1
Loop
If c > 0 Then 
Sheets("RECAP").Select 
Rows(y).Select
Selection.Delete shift:=xlUp
y = y - 1
Else
End If 
y = y + 1
Sheets("SQL DO").Select 
Loop
End If
Next
ce n'est pas une erreur il n'y a aucune majuscule et certains espaces mais la base est la [corrigé]. a force de chercher et de toucher le code est un peu "bordélique" désolé :/
je vous explique rapidement : on doit prendre dans une première feuille appelé RECAP les lignes ou il y a "CLIDIR" dans une des colonnes, puis regarder dans une autre feuille appelé SQL DO que le nom de la ligne (un nom de boite en fait) se trouve bien aussi dans cette feuille. si elle est dans les 2 feuilles alors on passe a la ligne suivante (dans la feuille RECAP) sinon on supprime la ligne.
c'est pas très compréhensible je vous l'accord donc si vous voulez plus d'infos pour m'aider je ferai un effort pour tout expliquer correctement.

je me retrouve soit avec une boucle infini soit une boucle mal placée donc ca fait pas ce que je veux :/

merci d'avance de votre aide
nonohzx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2011, 21h23   #2
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
On supprime la ligne de RECAP ou de SQL DO

Ci-joint code qui permet de supprimer la ligne de RECAP en utilisant un filtre automatique
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub VVV()
Dim LastLig As Long
Dim c As Range
 
Application.ScreenUpdating = False
With Worksheets("RECAP")
    .AutoFilterMode = False
    LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
    .Range("J1:J" & LastLig).AutoFilter Field:=1, Criteria1:="CLIDIR"
    For Each c In .Range("A1:A" & LastLig).SpecialCells(xlCellTypeVisible)
        If c.Row > 1 And Application.CountIf(Worksheets("SQL DO").Range("A:A"), c.Value) = 0 Then c.EntireRow.Delete
    Next c
    .AutoFilterMode = False
End With
End Sub
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/12/2011, 21h36   #3
Invité de passage
 
Homme
Inscription : décembre 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 12
Points : 2
Points : 2
on supprime la ligne dans RECAP.
le grand patron veut vraiment supprimer les lignes inutiles, l'idée du filtre, pas bete et a laquelle j'avais deja pensé, ne marche pas :/
nonohzx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2011, 21h46   #4
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Suivant ta description, le code proposé précédemment fonctionne et est assez rapide.
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/12/2011, 22h23   #5
Invité de passage
 
Homme
Inscription : décembre 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 12
Points : 2
Points : 2
je viens de réessayer mon code et il y a deja une erreur "next sans for" au niveau du premier next ><

edit : quelques modifs apportées au code
nonohzx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2011, 22h43   #6
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Puisque tu tiens aux boucles
Quand tu supprime des lignes, commence toujours du bas vers le haut
Ensuite, évite le Select
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Dim w As Long, y As Long, NL As Long
Dim Trouve As Boolean
Dim Ref As String
 
Application.ScreenUpdating = False
With Worksheets("RECAP")
    NL = .Cells(.Rows.Count, "A").End(xlUp).Row
    For y = NL To 2 Step -1
        If .Cells(y, 10) = "CLIDIR" Then
            Ref = .Cells(y, 1)
            w = 2
            Do While Sheets("SQL DO").Cells(w, 1) <> ""
                If Worksheets("SQL DO").Cells(w, 1) = Ref Then
                    Trouve = True
                    Exit Do
                End If
                w = w + 1
            Loop
            If Not Trouve Then
                .Rows(y).Delete shift:=xlUp
            Else
                Trouve = False
            End If
        End If
    Next y
End With
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/12/2011, 23h06   #7
Invité de passage
 
Homme
Inscription : décembre 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 12
Points : 2
Points : 2
depuis vendredi au taff je suis dessus et voila que en 1h tu ma fais une macro qui tourne comme une horloge et qui a l'air de faire parfaitement ce qu'on lui demande je peux pas tout vérifier ce soir je n'ai qu'un morceau du prog de base donc a voir demain mais ca a l'air parfait ! je te remercie beaucoup Mercatog pour ton aide et tes conseils je suis en bts IG (nouvellement SIO) en alternance j'apprends le vba et mettant directement le nez dans les programmes et c'est pas facile ^^
nonohzx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2011, 23h14   #8
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
J'insiste sur la première méthode des filtres, elle est plus rapide
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 28/12/2011, 23h20   #9
Invité de passage
 
Homme
Inscription : décembre 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 12
Points : 2
Points : 2
Je sais bien j'y pense a chaque fois qu'il me demande ce genre d'opération mais il insiste il veut absolument supprimer les lignes :/
en tout cas après test ta macro fonctionne a merveille ! merci encore
nonohzx est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h52.


 
 
 
 
Partenaires

Hébergement Web