Besoin d'aide ! Je peine à me servir de la boucle "Do ... Loop"

Fermé
Bouzy - 7 sept. 2014 à 12:04
 Bouzy - 11 sept. 2014 à 23:24
Bonjour

Je reviens à nouveau vers vous avec un nouveau projet.
J'ai commencé à créer un fichier me permettant de gérer les commandes, le suivi des délais, ...
Pour vous faire un aperçu de ce qu'il fait :

1) J'ai une page d'accueil avec trois boutons, chacun ouvrant un Userform différent.

-1)-1 Le premier Userform est un simple formulaire qui sert à saisir les données en générant un N° de commande et à la validation, ces données sont retranscrites sur une trame qui me sert de Bon de Commande.

-1)-2 Le deuxième sert à valider la réception lors de la livraison. Et comme le premier, les données sont elles aussi retranscrites sur un tableau de suivi qui reprend la date de livraison, la quantité livrée, le N° de la commande d'origine, le N° du bordereau de livraison, ...
Sachant que la livraison est très souvent partielle, sur la ligne qui sera saisie sur le tableau de suivi, les références non livrées sont validées à "0". Ce qui implique que pour les futures livraisons, les lignes à venir seront à "0" jusqu'à ce que la référence soit livrée et prenne donc une valeur différente de "0".
À l'inverse de cette référence, la première référence à avoir été livrée sera succédée de plusieurs "0" avant la réception finale de toute la commande.

-1)-3 Le troisième et donc le dernier, est supposé me permettre de lancer une recherche par notre N° de Commande. De manière à visualiser toute le Commande, ainsi que les dates de livraison de chaque référence. Sauf qu'il ne marche pas correctement et je peine à trouver la bonne formule qui conviendrait.

2) Ce Userform compte donc une Combobox1 pour la sélection du numéro de commande et un bouton de lancement.
Une fois le N° de commande choisi, en lançant la recherche, un tri s'effectue sur le tableau de suivi, une frame apparait sur le Userform et sur laquelle se trouve la liste des 9 références. À chaque bout de référence il y a un Checkbox. En cochant ce Checkbox, trois Textbox apparaisse dans la continuité de la ligne et sur lesquels on peut visualiser la quantité livrée dans le premier ; dans le deuxième la date de la livraison et dans le troisième, le N° du bordereau de livraison du prestataire.

3) J'arrive à lui dire :
-3)-1 Une fois le Checkbox coché, que le Userform1, aille chercher les information sur le tableau de suivi

-3)-2 Qu'il sélectionne la colonne équivalente et en partant du bas, qui m'affiche la dernière valeur saisie.

-3)-3 Si la valeur trouvée est égale à "0", qu'il se décale d'une cellule vers le haut et qu'elle affiche cette valeur.

-3)-4 Si cette valeur est différente de "0", qu'il la prenne en compte et que la Textbox2 affiche la date contenu dans la cellule d'à côté et non celle trouvée de la première cellule non vide en partant du bas.

-3)-5 Idem pour le numéro de bordereau de livraison correspondant à la date de cette livraison.

4) Sauf que tout ceci ne marche que jusqu'à la deuxième cellule.
Si la valeur qui serait différente de "0" est situé sur la ligne d'après, il ne la voit pas et donc me marque un "0". Car il n'arrive pas à monter jusqu'à ce qu'il la trouve.
J'aimerais donc trouver une boucle lui disant que "Tant que la valeur trouvée n'est pas différente de "0", qu'il continue son ascension jusqu'à ce qu'elle la trouve. A défaut de cette valeur, qu'il n'envoie que le "0" de la dernière ligne saisie.
Et c'est là que je peine. Je n'ai jamais utilisé la boucle "Do ... Loop". Les premières tentatives m'ont faits bugger le PC au point de l'éteindre pour pouvoir annuler l'action. Donc avant de me relance, je souhaiterais avoir une un peu plus d'explications sur le fonctionnement de cette boucle pour pouvoir y introduire les bonnes informations.
Alors si quelqu'un peut me dire comment fonctionne réellement cette boucle, les choses à faire et à ne pas faire, ... je serais vraiment ravi.

J'espère que mes explications vous paraitront limpides car c'est souvent trop le cas lol.
Je vous remercie donc par avance en attendant vos réponses

Bouzy

6 réponses

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
7 sept. 2014 à 12:56
Bonjour,

Peu importe le langage, c'est une question d'algo. Les boucles Do ... Loop, While ... etc fonctionnent de la même manière quelque soit le langage.

Il faut qu'une condition soit remplie pour sortir d'une boucle.




1
Sonar97432 Messages postés 4 Date d'inscription dimanche 7 septembre 2014 Statut Membre Dernière intervention 7 septembre 2014
7 sept. 2014 à 12:06
Bonjour précisez le language
0
Bonjour Sonar97432 et Polux31

Désolé pour le manque de précision
le langage utilisé est le VBA sur EXCEL
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
7 sept. 2014 à 16:27
Ne connaissant pas ton projet, je te propose de jeter un oeil >> ici << et >> <<
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour Polux31

au fait je souhaite faire en sorte qu'en cliquant sur ma checkbox1
que la textbox1 e 2 s'affichent.
qu'il aille trouver les informations dans la colonne B par exemple en partant du bas vers le haut.
la valeur trouvée, qu'il me l'affiche dans la textbox1 et dans la 2 celle de la cellule d'à coté.
si cette valeur est égale 0, qu'il se décale d'une cellule vers le haut et la valeur trouvée est différente de 0, qu'il me l'envoie dans la textbox1.
sinon qu'il continue à se décaler jusqu'à ce qu'il tombe sur une valeur différente de 0.
et c'est là que je bug.
j'espère que tu me comprendras, parce que j'avoue que ça m'a l'air tout simple à entendre , mais ça fait des jour que j'y suis et ça ne vas pas lol.

à plus et merci par avance
0
ça y est
j'ai fini par la trouver cette boucle.
Pour l'instant elle s'excute comme je le souhaite et je suis content.
Pour les plus expérimentés, vous me direz qu'elle est un peu trop long,
ce qui doit être forcément vrai.
et je tiens à souligner que je reste toujours ouvert à l'idée de découvrir une nouvelle façon de faire ce que le code ci dessous fait.
"
'Selection de la Feuille, de la dernière cellule Non Vide de la colonne C
Sheets("DETAIL_RECEPTIONS").Select
Range("C1048576").End(xlUp).Select

'Si la valeur de la cellule seletionnée est égale = 0, se décaler sur celle du dessus
Do While ActiveCell.Value = 0
ActiveCell.Offset(-1, 0).Select
Loop

'Si la valeur trouvée est différent de 0, alors envoyer les valeurs dans les Textbox
If ActiveCell <> 0 Then
TextBox1.Value = ActiveCell.Value
TextBox10.Value = ActiveCell.Offset(0, -1).Value
TextBox19.Value = ActiveCell.Offset(0, 9).Value
End If
"
En tous les cas merci à ceux qui m'ont répondu et à bientôt

Bouzy
0