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 :

Cherche une boucle efficace


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de casavba
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 464
    Par défaut Cherche une boucle efficace
    Bonjour,
    j'ai un problème de boucle;

    En fait, j'ai un tableau de 6 colonnes;
    Je voudrais chercher toutes les valeurs négatifs de la colonne 4(colonne D); une fois fais je dois vérifier avant de colorier la ligne, que la cellule qui est juste à côté de la cellule négative de la colonne 4, càd la cellule de la colonne 3 (colonne C) quel contient les caractères "ABCD".

    je détermine le numéro de ligne contenant une valeur négative par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    kaka = Columns(4).Find("-", , , , , xlPrevious).Row
    j'ai pensé à mettre ça dans une boucle en incluant une condition if
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    If range("c" & kaka).Value Like "ABCD" Then
            Range(Range("A" & kaka), Range("A" & kaka).End(xlToRight)).Interior.ColorIndex = 6
    mais mon pbm c'est l'incrémentation de la boucle, en fait je ne sais pas comment commencer la recherche à partir de la dernière cellule négative que j'ai déterminé, càd si ma dernière cellule est D100, donc ma deuxième recherche commencera de D100 et non de D65536 (xlprevious)

    Quelqu'un a des idées?

    Peut être que ma méthode est fausse dès le départ.
    si vous avez une autre méthode je suis preneur
    Merci de votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 163
    Par défaut
    Si j'ai bien compri ta question cette boucle devrait marcher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub macro()
    k = Cells(Cells.Rows.Count, "C").End(xlUp).Row
    For i = 1 To k
         If Cells(i, 4) < 0 Then
         Cells(i, 4).Interior.ColorIndex = 6
                       If Cells(i, 3) = "ABCD" Then
                       Rows(i).Interior.ColorIndex = 6
                       End If
         End If
    Next
    End Sub

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    bonjour

    autre solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub t()
    Dim laplage As Range
    Dim cel As Range
    Dim fl As Worksheet
    Dim dern_ligne
    Set fl = Worksheets(1)
    dern_ligne = fl.Cells(65536, 4).End(xlUp).Row
    Set laplage = fl.Range("d1:d" & dern_ligne)
        For Each cel In laplage
            If cel.Value < 0 And cel.Offset(0, 1).Value Like "abcd" Then
                Range(Range("a" & cel.Row), Range("a" & cel.Row).End(xlToRight)).Interior.ColorIndex = 6
            End If
        Next cel
    End Sub

  4. #4
    Membre émérite
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Par défaut
    Bonsoir à tous
    Bonsoir casavba

    Essaie cet autre 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
    Sub recherche()
    Dim c
    Dim ligne As Integer
     
    With Worksheets("Feuil1").Range("d:d")
        Set c = .Find("-", LookIn:=xlValues)
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                ligne = c.Row   'juste pour vérif mais inutile dans la procédure
                If Range("C" & c.Row) = "ABCD" Then
                'ce que tu veux faire
                   Range("C" & c.Row).Interior.ColorIndex = 6
                   Range("D" & c.Row).Interior.ColorIndex = 6
                End If
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
    End With
     
    End Sub

    Eric

  5. #5
    Membre éclairé Avatar de casavba
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 464
    Par défaut
    Citation Envoyé par patbou Voir le message
    bonjour

    autre solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub t()
    Dim laplage As Range
    Dim cel As Range
    Dim fl As Worksheet
    Dim dern_ligne
    Set fl = Worksheets(1)
    dern_ligne = fl.Cells(65536, 4).End(xlUp).Row
    Set laplage = fl.Range("d1:d" & dern_ligne)
        For Each cel In laplage
            If cel.Value < 0 And cel.Offset(0, 1).Value Like "abcd" Then
                Range(Range("a" & cel.Row), Range("a" & cel.Row).End(xlToRight)).Interior.ColorIndex = 6
            End If
        Next cel
    End Sub
    excuses patbou ta solution marche mais avec une petite modif

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cel.Offset(0, -1).Value au lieu cel.Offset(0, 1).Value

  6. #6
    Membre éclairé Avatar de casavba
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 464
    Par défaut
    Non ça ne marche pas;
    elle colorie juste la colonne 4 mais pas 3

    patbou ta macro ne fait rien

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 163
    Par défaut
    Désolé j'avais mal lu c'est reglé normallement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub macro()
    k = Cells(Cells.Rows.Count, "C").End(xlUp).Row
    For i = 1 To k
         If Cells(i, 4) < 0 Then
         Cells(i, 3).Interior.ColorIndex = 6
                       If Cells(i, 3) = "ABCD" Then
                       Rows(i).Interior.ColorIndex = 6
                       End If
         End If
    Next
    End Sub

  8. #8
    Membre éclairé Avatar de casavba
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 464
    Par défaut
    Désolé aucune de vos réponses ne résoud mon problème

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 163
    Par défaut
    C'est bizarre j'ai peut etre mal compris ton pb...car ce que j'avais compris çà marche chez moi, tu peux dire ce qui ne va pas dans les solutions pour que nous puissions le resoudre?

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

Discussions similaires

  1. Je cherche à réaliser une boucle
    Par ludvig38 dans le forum R
    Réponses: 3
    Dernier message: 06/06/2012, 10h52
  2. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  3. cherche une boucle
    Par hanane78 dans le forum Images
    Réponses: 1
    Dernier message: 09/04/2009, 07h09
  4. [MySQL] Cherche a optimiser une boucle avec SELECT [.] FROM [.] IN
    Par Kijer dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 16/07/2008, 14h36
  5. Pause dans une boucle
    Par HT dans le forum Langage
    Réponses: 4
    Dernier message: 03/06/2003, 08h52

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