Problème boucle While et conditions
Fermé
azzi33
Messages postés
5
Date d'inscription
mardi 19 avril 2016
Statut
Membre
Dernière intervention
7 août 2018
-
Modifié le 3 août 2018 à 20:21
yg_be Messages postés 22701 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 - 7 août 2018 à 19:53
yg_be Messages postés 22701 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 - 7 août 2018 à 19:53
A voir également:
- Problème boucle While et conditions
- Mise en forme conditionnelle excel plusieurs conditions - Guide
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Google sheet mise en forme conditionnelle 2 conditions ✓ - Forum Bureautique
- Boucle excel sans macro - Forum Excel
- Freebox redémarre en boucle ✓ - Forum Freebox
7 réponses
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
643
6 août 2018 à 14:36
6 août 2018 à 14:36
Bonjour,
D'aprés ce que je crois avoir compris du besoin, voici une proposition de codage :
J'ai intégré le test sur les valeurs de 1 à 40 et j'ai supposé que la cellule vide était la condition d'arrêt.
A corriger si besoin
D'aprés ce que je crois avoir compris du besoin, voici une proposition de codage :
Public Sub Qtté_Poussières() Dim numéro As Integer Dim CelluleTrouvée As Range Dim lig As Integer Dim col As Integer Dim PoussNéc As Long Dim compteur As Integer Dim Continuer As Boolean compteur = 1 Continuer = True While Continuer numéro = Cells(3 + compteur, 5) Set CelluleTrouvée = Range("J3:J81").Find(numéro, lookat:=xlWhole) If CelluleTrouvée Is Nothing Then MsgBox ("Problème de codage..." & 3 + compteur) Continuer = False Else If CelluleTrouvée.Value >= 1 And CelluleTrouvée.Value <= 40 Then lig = CelluleTrouvée.Row col = CelluleTrouvée.Column PoussNéc = Cells(lig, (col + 3)) MsgBox "Niveau trouvé : poussière nécessaire : " & PoussNéc & ". Courage" Cells(3 + compteur, 7) = PoussNéc compteur = compteur + 1 Else MsgBox ("Problème de valeur..." & 3 + compteur) compteur = compteur + 1 End If End If Wend End Sub
J'ai intégré le test sur les valeurs de 1 à 40 et j'ai supposé que la cellule vide était la condition d'arrêt.
A corriger si besoin
Whismeril
Messages postés
19025
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
19 avril 2024
929
3 août 2018 à 18:58
3 août 2018 à 18:58
Bonjour
je ne suis pas un grand spécialiste de VBA, mais tu as déclaré
Par contre, il ne faut jamais utiliser de diacritique (accents, cédille, tilde, etc...) en programmation.
Admettons que tu fournisses ton fichier à un anglophone, ça va buguer, les accents n'existant pas en Anglais.
je ne suis pas un grand spécialiste de VBA, mais tu as déclaré
Dim CelluleTrouvée As Rangeet plus loin tu fais
While CelluleTrouvée > 0ce qui impliquerait que CelluleTrouvée soit un nombre, à mon avis, c'est là qu'il faut chercher.
Par contre, il ne faut jamais utiliser de diacritique (accents, cédille, tilde, etc...) en programmation.
Admettons que tu fournisses ton fichier à un anglophone, ça va buguer, les accents n'existant pas en Anglais.
Whismeril
Messages postés
19025
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
19 avril 2024
929
3 août 2018 à 18:59
3 août 2018 à 18:59
AU fait, pour tes prochains posts, utilise la coloration syntaxique, voir ici
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 775
Modifié le 3 août 2018 à 19:05
Modifié le 3 août 2018 à 19:05
Bonjour,
Sans le fichier, c'est très difficile à comprendre !
Erreur :
Au lieu de :
Autre erreur :
Sans le fichier, c'est très difficile à comprendre !
Erreur :
While CelluleTrouvée > 0CelluleTrouvée est un objet (une cellule ou rien), il faudrait tester sa valeur, mais pas sans savoir si elle à été trouvée !
Au lieu de :
lig = CelluleTrouvée.Row col = CelluleTrouvée.Column PoussNéc = Cells(lig, (col + 3))mettre :
PoussNéc = CelluleTrouvée.Offset(0,3).Value
Autre erreur :
For i = 1 To compteur '... compteur = compteur + 1
Kalissi
Messages postés
218
Date d'inscription
jeudi 2 mai 2013
Statut
Membre
Dernière intervention
15 juillet 2019
20
3 août 2018 à 19:14
3 août 2018 à 19:14
Bonjour,
Suggestion : Éviter les caractères accentué dans le code.
K
Suggestion : Éviter les caractères accentué dans le code.
K
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 775
3 août 2018 à 19:20
3 août 2018 à 19:20
Bonjour K
D'où vient cette phobie ?
Je les utilise très fréquemment et je n'ai jamais eu le moindre problème !
D'où vient cette phobie ?
Je les utilise très fréquemment et je n'ai jamais eu le moindre problème !
Whismeril
Messages postés
19025
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
19 avril 2024
929
3 août 2018 à 20:13
3 août 2018 à 20:13
Je l'ai expliqué dans ma réponse
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 775
>
Whismeril
Messages postés
19025
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
19 avril 2024
3 août 2018 à 20:35
3 août 2018 à 20:35
Ce serait le cas si on pouvait écrire le code en Unicode mais c'est de l'ASCII et Le code ASCII est international.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
azzi33
Messages postés
5
Date d'inscription
mardi 19 avril 2016
Statut
Membre
Dernière intervention
7 août 2018
4 août 2018 à 22:57
4 août 2018 à 22:57
Bonsoir,
merci pour vos réponses très rapides.
Si je comprends bien, je dois faire analyser la valeur de CelluleTrouvée à l'aide d'une fonction de VBA. Je peux faire ça :
Pour la 2e erreur, il faut que je mette le compteur au-dessus de la boucle For ?
Merci pour vos réponses.
Je transmettrai le programme modifié, selon vos retours.
Bonne soirée
merci pour vos réponses très rapides.
Si je comprends bien, je dois faire analyser la valeur de CelluleTrouvée à l'aide d'une fonction de VBA. Je peux faire ça :
While CelluleTrouvée.Value > 0?
Pour la 2e erreur, il faut que je mette le compteur au-dessus de la boucle For ?
Merci pour vos réponses.
Je transmettrai le programme modifié, selon vos retours.
Bonne soirée
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 775
5 août 2018 à 18:16
5 août 2018 à 18:16
1) probablement
2) en augmentant compteur à chaque boucle, la boucle For i = 1 To compteur est infinie.
Expliques ce que ta macro devrait faire, c'est difficilement compréhensible !
2) en augmentant compteur à chaque boucle, la boucle For i = 1 To compteur est infinie.
Expliques ce que ta macro devrait faire, c'est difficilement compréhensible !
yg_be
Messages postés
22701
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 avril 2024
1 471
5 août 2018 à 09:58
5 août 2018 à 09:58
bonjour, tu ne modifies pas la condition de la boucle (CelluleTrouvée) dans la boucle while, il me semble donc assez prévisible que la boucle soit infinie.
as-tu bien "option explicit" en début de module?
pourquoi ne pas nous présenter le programme qui fonctionnait bien? cela nous permettrait de comprendre ce que tu veux faire, difficile à deviner avec un programme sans commentaire et qui ne fonctionne pas correctement.
as-tu bien "option explicit" en début de module?
pourquoi ne pas nous présenter le programme qui fonctionnait bien? cela nous permettrait de comprendre ce que tu veux faire, difficile à deviner avec un programme sans commentaire et qui ne fonctionne pas correctement.
azzi33
Messages postés
5
Date d'inscription
mardi 19 avril 2016
Statut
Membre
Dernière intervention
7 août 2018
Modifié le 7 août 2018 à 16:49
Modifié le 7 août 2018 à 16:49
Bonjour, merci à tous pour votre aide. :)
Le programme que pilas31 propose correspond exactement à ce que j'essayais de faire. Merci énormément à toi.
Je viens de le tester, il fonctionne à merveille sauf quand le valeur vaut 39,5. Il met en application la ligne 18 du programme...
Auriez-vous une solution à ce problème ?
Cordialement
EDIT : j'ai pu résoudre ce problème en modifiant la type de la variable numéro, il était en Integer, je l'ai mis en Single et le problème est résolu.
Encore merci à tous et à pilas31.
Le programme que pilas31 propose correspond exactement à ce que j'essayais de faire. Merci énormément à toi.
Je viens de le tester, il fonctionne à merveille sauf quand le valeur vaut 39,5. Il met en application la ligne 18 du programme...
Auriez-vous une solution à ce problème ?
Cordialement
EDIT : j'ai pu résoudre ce problème en modifiant la type de la variable numéro, il était en Integer, je l'ai mis en Single et le problème est résolu.
Encore merci à tous et à pilas31.
yg_be
Messages postés
22701
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 avril 2024
1 471
7 août 2018 à 19:53
7 août 2018 à 19:53
parfait, peux-tu alors marquer le sujet comme résolu, via la roue dentée à droite du titre?