Boucle DO WHILE

[Résolu/Fermé]
Signaler
Messages postés
17
Date d'inscription
mardi 9 octobre 2012
Statut
Membre
Dernière intervention
10 février 2015
-
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
-
Bonjour,

Je dois créer un programme sous excel 2007 permettant de rechercher un code client dans une feuille "Client" et en fonction de ce code, afficher toutes les données (nom, prénom, adresse, cp,...) dans un devis type facture.

Voici le début de mon programme :

Sub DEVIS()
Dim codeclient As String
Dim modepaiement As String
Dim txremise As Single
Dim montantHT As Single
Dim montantTTC As Single
Dim transport As Single
Dim total As Single
codeclient = InputBox("Veuillez saisir le code client : ", "SAISIE", 0)
Worksheets("Devis").Cells(7, 5).Value = codeclient
modepaiement = InputBox("Indiquez le mode de paiement : ", "SAISIE", 0)
Worksheets("Devis").Cells(12, 2).Value = modepaiement
Do while Worksheets("Devis").Cells(7, 5).Value <> Worksheets("Clients").Cells(i, 1).Value
Worksheets("Devis").Cells(7, 2).Value = Worksheets("Clients").Cells(i, 2).Value
Worksheets("Devis").Cells(8, 2).Value = Worksheets("Clients").Cells(i, 3).Value
Worksheets("Devis").Cells(8, 5).Value = Worksheets("Clients").Cells(i, 4).Value
Worksheets("Devis").Cells(9, 2).Value = Worksheets("Clients").Cells(i, 5).Value
Worksheets("Devis").Cells(9, 5).Value = Worksheets("Clients").Cells(i, 6).Value
Worksheets("Devis").Cells(10, 2).Value = Worksheets("Clients").Cells(i, 7).Value
Worksheets("Devis").Cells(10, 5).Value = Worksheets("Clients").Cells(i, 8).Value
Loop
End Sub

Ca bloque au niveau du DO WHILE.

Comment puis-je faire ?

Merci d'avance

3 réponses

Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 172
Bonjour,

Voilà pour la recherche et la récupération des infos :

Sub RechercheClient()
Dim codeclient As String
Dim dLig As Long
Dim wsDevis As Worksheet
Dim wsClt As Worksheet
Dim i As Long

    'On instancie les objets Worksheet
    Set wsDevis = ThisWorkbook.Worksheets("Devis")
    Set wsClt = ThisWorkbook.Worksheets("Clients")
    
    'Recherche de la dernière ligne "Clients"
    dLig = wsClt.Range("A" & Rows.Count).End(xlUp).Row
    
    'Saisie du code client par l'utilisateur
    codeclient = InputBox("Veuillez saisir le code client : ", "SAISIE", 0)
    
    'Boucle sur le num client
    For i = 1 To dLig
        'Si la ligne client est trouvée, on copie les données et on sort de la procédure
        If UCase(codeclient) = UCase(wsClt.Cells(i, 1).Value) Then
            wsDevis.Cells(7, 2).Value = wsClt.Cells(i, 2).Value
            wsDevis.Cells(8, 2).Value = wsClt.Cells(i, 3).Value
            wsDevis.Cells(8, 5).Value = wsClt.Cells(i, 4).Value
            wsDevis.Cells(9, 2).Value = wsClt.Cells(i, 5).Value
            wsDevis.Cells(9, 5).Value = wsClt.Cells(i, 6).Value
            wsDevis.Cells(10, 2).Value = wsClt.Cells(i, 7).Value
            wsDevis.Cells(10, 5).Value = wsClt.Cells(i, 8).Value
            Exit Sub
        End If
    Next i
    
    'libération des objets et de la mémoire
    Set wsDevis = Nothing
    Set wsClt = Nothing

End Sub


Il faut faire une autre procédure pour le reste du devis (MontantHT, MontantTTC etc ...)

;0)
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42674 internautes nous ont dit merci ce mois-ci

Messages postés
17
Date d'inscription
mardi 9 octobre 2012
Statut
Membre
Dernière intervention
10 février 2015
>
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016

Oui la boucle do while est obligatoire. J'ai débuté la programmation il y a 15 jours et nous avons appris les fonctions Do while, If et worksheets qu'ils faut donc restituer dans cet exercice. Je ne pense pas pouvoir passer à côté malheureusement
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 172
Ok alors on va faire avec Do While :0)

Déclare une variable booléenne comme ça

Dim trouve as boolean


Voilà comment je ferai (il y a surement d'autres manières de faire)

i = 4

Do While trouve <> True
i = i + 1 ' Là tu testes la ligne 5 de la 1ère colonne lors du 1er test !!! 
If codeclient = Worksheets("Clients").Cells(i, 1).Value Then
     trouve = True
     Worksheets("Devis").Cells(7, 2).Value = Worksheets("Clients").Cells(i, 2).Value 
     Worksheets("Devis").Cells(8, 2).Value = Worksheets("Clients").Cells(i, 3).Value 
     Worksheets("Devis").Cells(8, 5).Value = Worksheets("Clients").Cells(i, 4).Value 
     Worksheets("Devis").Cells(9, 2).Value = Worksheets("Clients").Cells(i, 5).Value 
     Worksheets("Devis").Cells(9, 5).Value = Worksheets("Clients").Cells(i, 6).Value 
     Worksheets("Devis").Cells(10, 2).Value = Worksheets("Clients").Cells(i, 7).Value 
     Worksheets("Devis").Cells(10, 5).Value = Worksheets("Clients").Cells(i, 8).Value 
 End If 
 Loop 
 End Sub
 
Messages postés
17
Date d'inscription
mardi 9 octobre 2012
Statut
Membre
Dernière intervention
10 février 2015
>
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016

Merci beaucoup, pas facile de s'adapter lol.

Je vais essayer et je reviens vers vous pour vous tenir au courant.

Merci de votre aide !
Messages postés
17
Date d'inscription
mardi 9 octobre 2012
Statut
Membre
Dernière intervention
10 février 2015

Re bonjour Polux31,

Ça marche très bien ! Super merci beaucoup.
Je n'ai plus qu'à faire plus ou moins la même procédure pour afficher les produits vendus sur le devis. J'espère que je n'aurai pas à revenir, même si ce site est très agréable.

Encore merci. :)
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 172
Bonjour Laura

De rien :0)

Bon courage pour la suite de ton apprentissage.

;0)
Messages postés
17
Date d'inscription
mardi 9 octobre 2012
Statut
Membre
Dernière intervention
10 février 2015

Bonjour,

Merci de votre réponse.
En revanche, la commande do while se termine par le LOOP dans ce cas ci.
Messages postés
6
Date d'inscription
mardi 23 février 2010
Statut
Membre
Dernière intervention
24 janvier 2014

Bonjour ;

je crois que la commande Do While manque de fin de boucle le "END DO" a savouir votre logique programme.

bonne Chance.