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 :

boucle avec IF


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 9
    Par défaut boucle avec IF
    Bonjour j'ai une question de debutant en VBA...je dois faire une boucle avec des IF et je ne sais pas trop comment faire cela.
    En gros si la cellule a la donnée de la variable "NomClient" il incrémente d'une cellule et pareil si la cellule est vide. le problème est si il y a plus que deux cellules vides et pareil si le nom client est le même, c'est pour cela que j'aimerais faire une boucle.

    Merci 1000x de votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
     If ActiveCell.Value = NomClient Then
            SourceStart = SourceStart + 1
        End If
        If Len(ActiveCell.Value) = Empty Then
            SourceStart = SourceStart + 1
        End If

  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
    Exemple de code qui boucle sur la colonne A de la feuille Feuil1 à partir de la ligne Deb jusqu'à la dernière ligne remplie de la colonne A.
    Ce code retourne la ligne SourceStart de la première cellule non vide et différente de la valeur de NomClient (ici pour l'exemple est donnée par la constante NomClient: /!\ à adapter à ta variable et à ton fichier)

    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
    Sub Test()
    Const NomClient As String = "Toto"
    Dim Deb As Long, LastLig As Long, i As Long, SourceStart As Long
     
    Application.ScreenUpdating = False
    With Worksheets("Feuil1")
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row    'dernière cellule remplie de la colonne A
        Deb = 3                                        'on commence la boucle de la ligne 3
        For i = Deb To LastLig
            If .Range("A" & i) <> NomClient And .Range("A" & i) <> "" Then
                SourceStart = i
                Exit For
            End If
        Next i
    End With
    MsgBox SourceStart
    End Sub

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 9
    Par défaut
    Bonjour mercatog,

    Je te remercie pour ta reponse mais je crois que je ne me suis pas très bien exprimé dans ma question et je m'excuse.

    je copie et colle des cellules avec des noms client dans une autre feuille mais pas plus d'une fois car il pourrait avoir plusieurs fois les noms clients mais aussi des blancs.

    Je te remercie de ton aide.

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    Sub CopyClient()
     
    DestStart = 1
    SourceStart = 1
    FlagGen = False
    Dim NomClient As String
     
    Sheets("Sheet1").Select
     
    '
    While FlagGen = False
     
     
        Range("a" & SourceStart).Select
     
        If Len(ActiveCell.Value) = Empty Then
        SourceStart = SourceStart + 1
        ElseIf (ActiveCell.Value) = NomClient Then
        SourceStart = SourceStart + 1
     
        End If
     
            Range("A" & SourceStart).Select
            Selection.Copy
     
            Sheets("Sheet2").Select
            Range("B" & DestStart).Select
            ActiveSheet.Paste
     
            Sheets("Sheet1").Select
            Range("A" & SourceStart).Select
            NomClient = ActiveCell.Value
            SourceStart = SourceStart + 1
            DestStart = DestStart + 1
     
    Wend
     
    End Sub
    Voici le code complet (avant modification)

  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
    Si j'ai bien compris, tu veux copier les clients sans doublons vers Sheet2
    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 Test()
    Dim LastLig As Long, i As Long
     
    Application.ScreenUpdating = False
    With Worksheets("Sheet1")
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row    'dernière cellule remplie de la colonne A
        'On boucle de A1 à Axx de Sheet1
        For i = 1 To LastLig
            'Si la cellule Ai n'est pas vide
            If .Range("A" & i) <> "" Then
                'Si Ai n'est pas encore copiée dans Sheet2, On copie Ai:Bi dans la première cellule vide de la colonne A de Sheet2
                If Application.CountIf(Worksheets("Sheet2").Range("A:A"), .Range("A" & i)) = 0 Then .Range("A" & i & ":B" & i).Copy Worksheets("Sheet2").Cells(.Rows.Count, "A").End(xlUp)(2)
            End If
        Next i
    End With
    End Sub

    Sinon, quelle est ta version d'Excel (Car on peut utiliser RemoveDuplicate à partir d'Excel 2007 et sans boucle)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 9
    Par défaut
    C'est exact je veux copier les clients sans doublons de la sheet1 à la 2 dans doublons j'utilise la version 2010, je vais essayer le RemoveDuplicate.

    Merci beaucoup

  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
    On copie l'ensemble des données vers Sheet2 et on appel Supprimer les doublons (RemoveDuplicates)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Test()
    Dim LastLig As Long
     
    Application.ScreenUpdating = False
    With Worksheets("Sheet1")
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row    'dernière cellule remplie de la colonne A
        'on copie les données vers Sheet2
        .Range("A1:B" & LastLig).Copy Worksheets("Sheet2").Range("A1")
    End With
    'On supprime les doublons
    Worksheets("Sheet2").Range("A1:B" & LastLig).RemoveDuplicates Columns:=1, Header:=xlNo    'xlYes si tu as en ligne 1 des entêtes de colonnes
    End Sub

Discussions similaires

  1. [DEBUTANT] sortir d'une boucle avec un touche particulière
    Par thibouille dans le forum Débuter
    Réponses: 4
    Dernier message: 25/10/2005, 06h44
  2. Probleme de boucle avec des processus sous UNIX
    Par sebastieng dans le forum POSIX
    Réponses: 6
    Dernier message: 15/10/2005, 18h57
  3. Boucle avec un TIBDataSet
    Par SebCBien dans le forum Bases de données
    Réponses: 4
    Dernier message: 12/09/2004, 17h33
  4. Boucle avec variable à incrémenter
    Par snoop dans le forum Linux
    Réponses: 2
    Dernier message: 19/03/2004, 11h07
  5. boucle avec condition d'arret changeante
    Par NicoH dans le forum Langage
    Réponses: 3
    Dernier message: 10/06/2003, 11h48

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