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 :

VBA : boucle for + boucle do problème


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 6
    Par défaut VBA : boucle for + boucle do problème
    Bonjour,

    Je poste sur ce forum car j'ai un problème pour finaliser une macro. Je vous explique le problème

    J'ai une liste de commande fournisseur, je souhaiterais à travers une macro vba récupérer les numéro de commande et les montants associés et les copié dans un onglet à la ligne correspondante. Il y a souvent plusieurs commande pour un même fournisseur. dans ce cas je voudrais qu'il copie la commande et le montant dans les colonnes d'après (colonne 18+3 pour les numéros de commandes et 20+3 sur les montant associés.

    J'ai un problème avec la gestion de mes boucles qui fait que finalement il ne copie rien dans les colonnes suivantes si il y a des commandes qui correspondent au même fournisseur.

    Je vous joins la partie du code qui ne fonctionne pas.

    Je vous remercie d'avance et vous promets d'être assidu sur ce forum pour vous aider si les membres en ont besoin.

    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
    40
    41
    42
    Sheets("TCD").Select
     
    For i = 3 To nombre_lignes
    Sheets("TCD").Select
     
    Application.StatusBar = " Traitement de l'opération " & i & "/" & nombre_lignes
     
    Numero_CE = Cells(i, 16).Value
    Numero_CDE = Cells(i, 17).Value
    Fournisseur = Cells(i, 18).Value
    Montant_CDE = Cells(i, 19).Value
     
    Sheets("base de donnée").Select
    nombre_lignes_BDD = Range("A65536").End(xlUp).Row
     
    For j = 2 To nombre_lignes_BDD
     
    If Cells(j, 3).Value = Numero_CE And Cells(j, 6).Value = Fournisseur Then
     
    k = 18
    l = 20
     
    Do
    k = k + 3
    If IsEmpty(Cells(j, k)) Then
    Cells(j, k).Value = Numero_CDE
    End If
    Loop While IsEmpty(Cells(j, k))
     
    Do
    l = l + 3
    If IsEmpty(Cells(j, l)) Then
    Cells(j, l).Value = Montant_CDE
    End If
    Loop While IsEmpty(Cells(j, l))
     
    End If
    Next j
     
    Next i
     
    End Sub

  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
    Peut être comme ceci (pas testé)
    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
    Sub Test()
    Dim Numero_CE As String, Numero_CDE As String, Fournisseur As String
    Dim Nombre_Lignes As Long, Nombre_Lignes_BDD As Long
    Dim i As Long, j As Long, k As Long
    Dim Montant_CDE As Double
     
    Application.ScreenUpdating = False
    With Sheets("base de donnée")
        Nombre_Lignes_BDD = .Cells(.Rows.Count, 3).End(xlUp).Row
    End With
     
    With Sheets("TCD")
        Nombre_Lignes = .Cells(.Rows.Count, 16).End(xlUp).Row
        For i = 3 To Nombre_Lignes
            Application.StatusBar = " Traitement de m'opération " & i & "/" & Nombre_Lignes
            Numero_CE = .Cells(i, 16).Value
            Numero_CDE = .Cells(i, 17).Value
            Fournisseur = .Cells(i, 18).Value
            Montant_CDE = Val(Replace(.Cells(i, 19).Value, ",", "."))
     
            With Sheets("base de donnée")
                For j = 2 To Nombre_Lignes_BDD
                    If .Cells(j, 3).Value = Numero_CE And .Cells(j, 6).Value = Fournisseur Then
                        k = 18
                        Do Until .Cells(j, k) = ""
                            k = k + 3
                        Loop
                        .Cells(j, k).Value = Numero_CDE
                        .Cells(j, k + 2).Value = Montant_CDE
                        Exit For
                    End If
                Next j
            End With
        Next i
    End With
    End Sub

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 6
    Par défaut
    Merci de ta réponse ! J'essaie cela ce soir et je te tiens au courant.

  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
    Ajoute à la fin juste avant le End Sub cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.StatusBar =""

  5. #5
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Bonjour Mercatog,

    Je pense qu'il vaut mieux mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.StatusBar = False
    Sinon, tu perds les fonctionnalités normales de la Status Bar.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  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
    Bonjour Alain
    Effectivement tu as raison.

Discussions similaires

  1. [XL-2007] Boucles For Each Next: problème de défilement des feuilles avec lenteur d'exécution
    Par camelia.w dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/12/2011, 20h08
  2. [VBA-E] Macro boucle for (erreur 424)
    Par vanexq dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 14/09/2010, 13h58
  3. Optimisation d'une boucle de boucle for
    Par LePapat26 dans le forum MATLAB
    Réponses: 3
    Dernier message: 27/02/2010, 17h01
  4. boucle de boucles de boucles, etc.
    Par stokastik dans le forum C
    Réponses: 10
    Dernier message: 09/10/2006, 10h39
  5. [VBA-E] erreur boucle for each
    Par Mut dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/02/2006, 16h38

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