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 :

faire une boucle sous vba avec condition


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Enseignant
    Inscrit en
    Mars 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 12
    Points : 10
    Points
    10
    Par défaut faire une boucle sous vba avec condition
    bonjour,
    je ne suis pas spécialiste en VBA mais j'ai absolument besoin de créer un langage qui permettra de résoudre mon pb.

    j'ai une liste de banques . chaque banque devrait avoir des variables pour les années 2002,2003,2004,2005 et 2006. Si une banque a des données manquantes relatives au moins à une des années, alors toutes les lignes relatives à cette banques sont supprimés.

    Finalement, je ne veux conserver dans ma base que les banques qui présentent des données sur toutes les années 2002 jusqu'au 2006.
    ci joint le fichier pour que ca soit plus clair.

    et merci d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Octobre 2010
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 240
    Points : 178
    Points
    178
    Par défaut
    Bonjour,

    Petites lignes rapides pour lancer le sujet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test()
        For ligne = 1 To Range("a1").End(xlDown).row
            For colonne = 4 To Range("a1").End(xltoRight).Column
                If Cells(ligne, colonne) = 0 Then
                    Rows(ligne).Delete
                    Exit For
                End If
            Next colonne
        Next ligne
    End Sub

  3. #3
    Membre éclairé
    Avatar de bifconsult
    Homme Profil pro
    Consultant
    Inscrit en
    Mars 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2012
    Messages : 189
    Points : 877
    Points
    877
    Par défaut
    Bonjour,

    Voici un code qui fonctionne. Il y a probablement plus académique, mais il tourne.

    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
    Sub del_bank()
     
        Lr = Cells(Cells.Rows.Count, 1).End(xlUp).Row
     
     
        For I = Lr To 2 Step -1
     
            a = 0
            Cells(I, 1).Select
            Do While ActiveCell.Value = ActiveCell.Offset(-1, 0).Value
                a = a + 1
                ActiveCell.Offset(-1, 0).Select
            Loop
     
            If WorksheetFunction.CountIf(Range(Cells(I, 4), Cells(I - a, 10)), 0) > 0 Then
     
            Range(Rows(I), Rows(I - a)).Delete
     
            I = I - a
     
            End If
     
        Next I
     
     
    End Sub
    PS: je te rejoins ton ficher avec la macro

    Re,

    Juste une info : il me semble que le code précédent efface les lignes contenant un nombre nul (sauf erreur de ma part) ?

    J'avais compris qu'il fallait créer un code dans lequel TOUTES les lignes de la banque, si une des lignes de cette banque contient une valeur nulle, doivent être supprimées. Ce que fais mon code.

    Donc, choisissez celui qui vous convient

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Octobre 2010
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 240
    Points : 178
    Points
    178
    Par défaut
    oui tu as raison si une banque à une valeur à 0 on doit tout supprimer.

    j'ai mal lu ^^

  5. #5
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Une autre approche avec utilisation d'un dictionnaire et en considérant que l'on trouvera 1 ligne par année.
    On supprime les ID que l'on trouve moins de 5 fois

    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
    Dim i As Long
    Dim Dic As Object
    Dim Sh As Worksheet
    Dim dicItem
     
     
    Set Sh = Worksheets("Feuil1")
    Set Dic = CreateObject("Scripting.Dictionary")
     
    'Ajoute les ID dans le dictionnaire
    For i = 2 To Sh.Range("A" & Rows.Count).End(xlUp).Row
        If Not Dic.Exists(Sh.Range("A" & i).Value) Then
            Dic.Add Sh.Range("A" & i).Value, Application.WorksheetFunction.CountIf(Sh.Range("A:A"), Sh.Range("A" & i).Value)
        End If
    Next i
     
    'Traitement des Id
    For Each dicItem In Dic.Keys
        If Dic(dicItem) < 5 Then
            For i = Sh.Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
                If Sh.Range("A" & i).Value = dicItem Then Sh.Rows(i).Delete
            Next i
        End If
    Next

  6. #6
    Membre à l'essai
    Femme Profil pro
    Enseignant
    Inscrit en
    Mars 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    L'approche avec utilisation d'un dictionnaire a bien fonctionné, merci bien jérome et merci pour tous les intervenants pour votre réactivité et réponses assez précises.
    juste une remarque, je me suis peut étre mal exprimée, l'objectif n'était pas de supprimer les lignes relatives aux banques qui affichaient la valeur 0. Mais plutot les banques qui ne disposent pas des infos sur toutes les années (2002 jusqu'à 2006).

    en tout cas, je vous remercie tous et trés bonne continuation,

    le code a marché pour le fichier que je vous ai envoyé mais non, sur mon fichier de base on m'affiche l'erreur "l'indice n'appartient pas à la sélection". Pourriez vous me voir ca s'il vous plait?
    Je n'arrivais pas à joindre mon fichier de base, c'est trés volumineux mais , à titre d'information, il comporte 9190 id de banques.


    Merciiiiiii

  7. #7
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Quelle ligne génère l'erreur

  8. #8
    Membre à l'essai
    Femme Profil pro
    Enseignant
    Inscrit en
    Mars 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    on m'affiche
    erreur d'exécution '9': l'indice n'appartient pas à la sélection.

    sinon comment pourrais je identifier la ligne qui génére cette erreur?


    thx

  9. #9
    Membre à l'essai
    Femme Profil pro
    Enseignant
    Inscrit en
    Mars 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    juste pour vous annoncer que ça marché à merveille. C'était pb d'innattention de ma part. (sheet1 au lieu de feuil1)

    thank you very much

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

Discussions similaires

  1. boucle sous vba avec condition
    Par ons1402 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/06/2012, 12h20
  2. [AC-2007] Faire une boucle en VBA possible? et tester la valeur des champs
    Par Debutant10 dans le forum VBA Access
    Réponses: 25
    Dernier message: 05/08/2011, 14h44
  3. [AC-2003] Faire une boucle avec VBA
    Par Sympa66 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 06/06/2010, 13h08
  4. Traiter 100 fichiers avec une boucle sous VBA excel
    Par sebastien06 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/04/2008, 09h39
  5. [VBA][Excel] Comment faire pour faire une boucle?
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 29
    Dernier message: 19/12/2005, 14h48

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