Boucle DO WHILE

Résolu
laura54960 Messages postés 17 Statut Membre -  
Polux31 Messages postés 7219 Statut Membre -
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

  1. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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
    1. laura54960 Messages postés 17 Statut Membre
       
      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
    2. Polux31 Messages postés 7219 Statut Membre 1 204
       
      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
    3. laura54960 Messages postés 17 Statut Membre
       
      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
    4. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Il faut obligatoirement utiliser une boucle While ?
      0
    5. laura54960 Messages postés 17 Statut Membre > Polux31 Messages postés 7219 Statut Membre
       
      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
  2. laura54960 Messages postés 17 Statut Membre
     
    Bonjour,

    Merci de votre réponse.
    En revanche, la commande do while se termine par le LOOP dans ce cas ci.
    0
  3. hkaab Messages postés 8 Statut Membre
     
    Bonjour ;

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

    bonne Chance.
    -1