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 :

Macro if or else tourne dans le vide


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 75
    Points : 48
    Points
    48
    Par défaut Macro if or else tourne dans le vide
    Bonjour à tous,

    Je cherche à exécuter cette macro car j'ai une BDD d'environ 4000 lignes et j'ai 100 codes clients à récupérer environ (colonne B).
    Cependant, elle tourne dans le vide :

    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
    Dim i As Integer
    Dim var
    i = 2
    var = 0
    Sheets("Résultats").Select
    Do While Range("A" & i) <> ""
            Sheets("Résultats").Select
            var = Range("B" & i).Value
            If var = 2950 OR 3100 Then
                 i = i + 1
            Else
                ActiveCell.EntireRow.Delete
                i = i + 1
            End If
    Loop
    End Sub
    En fait après une exécution step by step, il ne rentre jamais dans le else ..

    Merci de votre aide !

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    Par défaut
    essaye IF var = 2950 OR var = 3100

    Je pense que le 3100 tt seul est une condition toujours vraie car il ne la rattache pas a var.

    Bonne journée

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 75
    Points : 48
    Points
    48
    Par défaut
    bonjour.

    Merci, ça marche!

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    Par défaut
    De rien bonne journée

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 75
    Points : 48
    Points
    48
    Par défaut
    et jai remplacé mon code par celui-ci, car il y avait un PB sur l'incrémentation sinon :
    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
    Sub ClientsNAJ()
    Dim i As Integer
    Dim var
    i = 2
    var = 0
    Sheets("Résultats").Select
    For i = 2 To 4000
            Sheets("Résultats").Select
            var = Range("B" & i).Value
            If var = 2950 Or var = 3100 
                 Rows(i).Interior.Color = RGB(255, 0, 0)
            Else
                Range("B" & i).Value = 0
            End If
            Next i
    End Sub
    Ensuite je mets un filtre différent de 0 en colonne B et ça marche =)

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    Par défaut
    Je ne sais pas si le changement de couleur est vraiment necessaire apres cela depend de ton appli

    Mais tu peut faire ceci ci il n'y a rien a faire quand la valeur est egal a 2950 ou 3100

    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 ClientsNAJ()
    Dim i As Integer
    Dim var
    i = 2
    var = 0
    Sheets("Résultats").Select
    For i = 2 To 4000
            Sheets("Résultats").Select
            var = Range("B" & i).Value
            If var <> 2950 Or var <> 3100 
                  Range("B" & i).Clear()
            End If
            Next i
    End Sub
    Normalement ca doit marcher.
    Mais aprés c'est toi qui voit.
    Sinon je ne comprend pas ton ancienne condition est celle ci
    Do While Range("A" & i) <> ""

    et maintenant tu as ca 2 To 4000

  7. #7
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour à tous

    dans ce cas pourquoi n'utiliser pas directement un filtre automatique et supprimer les lignes non désirées (cf. ton post initial de suppression de lignes)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub ClientsNAJ()
    Dim LastLig As Long
     
    Application.ScreenUpdating = False
    With Sheets("Résultats")
        .AutoFilterMode = False
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        .Range("B1:B" & LastLig).AutoFilter field:=1, Criteria1:="<>2950", Criteria2:="<>3100", Operator:=xlAnd
        If .Range("B1:B" & LastLig).SpecialCells(xlCellTypeVisible).Count > 1 Then .Range("B2:B" & LastLig).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        .AutoFilterMode = False
    End With
    End Sub
    PS: pour supprimer des lignes par une boucle, commence toujours ta boucle du bas vers le haut. exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Test()
    Dim i As Long
    Dim Var
     
    Application.ScreenUpdating = False
    With Sheets("Résultats")
        For i = .Cells(.Rows.Count, "A").End(xlUp).Row To 2 Step -1
            Var = .Range("B" & i).Value
            If Var <> 2950 And Var <> 3100 Then .Rows(i).Delete
            i = i - 1
        Next i
    End With
    End Sub

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 75
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par jouana Voir le message
    Je ne sais pas si le changement de couleur est vraiment necessaire apres cela depend de ton appli

    Mais tu peut faire ceci ci il n'y a rien a faire quand la valeur est egal a 2950 ou 3100

    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 ClientsNAJ()
    Dim i As Integer
    Dim var
    i = 2
    var = 0
    Sheets("Résultats").Select
    For i = 2 To 4000
            Sheets("Résultats").Select
            var = Range("B" & i).Value
            If var <> 2950 Or var <> 3100 
                  Range("B" & i).Clear()
            End If
            Next i
    End Sub
    Normalement ca doit marcher.
    Mais aprés c'est toi qui voit.
    Sinon je ne comprend pas ton ancienne condition est celle ci
    Do While Range("A" & i) <> ""

    et maintenant tu as ca 2 To 4000
    J'ai changé ma boucle car l'indice n'allait pas, en effet, je démarrais mes suppressions de lignes en partant du haut.

    Mais avec l'indication du post juste au dessus je saurai !

    Merci à vous !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/10/2013, 11h50
  2. [PHP 5.2] ftp_rawlist tourne dans le vide
    Par ninikkhuet dans le forum Langage
    Réponses: 1
    Dernier message: 12/10/2009, 09h32
  3. plant de maintenance tourne dans le vide
    Par SILO dans le forum MS SQL Server
    Réponses: 16
    Dernier message: 12/03/2009, 17h02
  4. [nagios] 3-D Status map : tourne dans le vide ?
    Par marveljojo75 dans le forum Réseau
    Réponses: 0
    Dernier message: 07/01/2009, 11h58
  5. [MySQL 5.0.21] Requête tourne dans le vide
    Par dpin33 dans le forum Requêtes
    Réponses: 10
    Dernier message: 06/11/2008, 09h38

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