Boucle DO WHILE

Résolu/Fermé
laura54960 Messages postés 17 Date d'inscription mardi 9 octobre 2012 Statut Membre Dernière intervention 10 février 2015 - 24 janv. 2014 à 11:18
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 - 27 janv. 2014 à 12:56
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

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
24 janv. 2014 à 11:46
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
laura54960 Messages postés 17 Date d'inscription mardi 9 octobre 2012 Statut Membre Dernière intervention 10 février 2015
26 janv. 2014 à 16:08
Bonjour Polux31,

Merci beaucoup pour cette réponse. Cela fonctionne, toutes mes données se retrouvent au bon endroit. En revanche, j'ai un message d'erreur qui apparaît : code 1004, erreur définie par l'objet ou l'application. Et du coup, la suite de mon programme ne s'execute pas. Une idée ?

Merci d'avance
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
26 janv. 2014 à 16:33
Bonjour Laura,

L'erreur est détectée sur quelle ligne du code ?

Peux-tu poster tout ton code ? Ou alors déposer le fichier en enlevant les données confidentielles et en les remplaçant par des données bidons sur cjoint.com et en postant ensuite le lien ici. Merci
0
laura54960 Messages postés 17 Date d'inscription mardi 9 octobre 2012 Statut Membre Dernière intervention 10 février 2015
26 janv. 2014 à 17:22
Voici le code que j'ai tapé (je n'ai pas exactement suivi votre réponse puisqu'étant étudiante, je n'ai pas vu certaine fonction et je ne peux donc pas les insérer dans 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
Dim i As Long
codeclient = InputBox("Veuillez saisir le code client : ", "SAISIE", "")
Worksheets("Devis").Cells(7, 5).Value = codeclient
modepaiement = InputBox("Indiquez le mode de paiement : ", "SAISIE", "CB")
Worksheets("Devis").Cells(12, 2).Value = modepaiement
i = 4
Do While codeclient <> Worksheets("Clients").Cells(4, 1).Value
i = i + 1
If codeclient = Worksheets("Clients").Cells(i, 1).Value Then
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

L'erreur est en gras. J'ai également remarqué que le premier code client ne fonctionne pas, c'est à dire que ses coordonnées ne s'affichent pas. Je n'arrive pas à trouver d'où vient l'erreur. =/

Merci de vos réponses
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
26 janv. 2014 à 17:40
Il faut obligatoirement utiliser une boucle While ?
0
laura54960 Messages postés 17 Date d'inscription mardi 9 octobre 2012 Statut Membre Dernière intervention 10 février 2015 > Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016
26 janv. 2014 à 17:54
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
0
laura54960 Messages postés 17 Date d'inscription mardi 9 octobre 2012 Statut Membre Dernière intervention 10 février 2015
24 janv. 2014 à 11:34
Bonjour,

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

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

bonne Chance.
-1