IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

P'ti problème de boucle [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 20
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 20
    Par défaut
    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 :/

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Suivant ta description, le code proposé précédemment fonctionne et est assez rapide.

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 20
    Par défaut
    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

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Puisque tu tiens aux boucles
    Quand tu supprime des lignes, commence toujours du bas vers le haut
    Ensuite, évite le Select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de boucles imbriquées
    Par Gnux dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 09/12/2005, 20h26
  2. [Tableaux] Problème avec boucle
    Par MYster dans le forum Langage
    Réponses: 6
    Dernier message: 11/11/2005, 18h39
  3. Problème de boucle
    Par TheUltimaSephiroth dans le forum C
    Réponses: 8
    Dernier message: 10/10/2005, 13h58
  4. Problème de boucle
    Par Louis-Guillaume Morand dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/09/2005, 09h10
  5. Problème de boucle
    Par basclln dans le forum C++
    Réponses: 19
    Dernier message: 02/04/2005, 09h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo