Boucle Do while et If
Résolu
loicen73
Messages postés
32
Date d'inscription
Statut
Membre
Dernière intervention
-
Pinzou76 Messages postés 614 Date d'inscription Statut Membre Dernière intervention -
Pinzou76 Messages postés 614 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai besoin de votre aide car mon code ne fonctionne pas. Il s'exécute mais rien ne s'écrit dans les cellules. Merci beaucoup
Sub bouclewhile2()
Dim k As Currency
k = 27
Do While Workbooks("Test boucles pour tronçons1.xlsm").Sheets("Bouclage").Cells(k, 2) Like " "
If Workbooks("Test boucles pour tronçons1.xlsm").Sheets("Bouclage").Cells(k, 3) = 1 Then
Workbooks("Test boucles pour tronçons1.xlsm").Sheets("Bouclage").Cells(k, 4) = Workbooks("Test boucles pour tronçons1.xlsm").Sheets("ECS").Cells(55, 2 * k - 50)
Else
Workbooks("Test boucles pour tronçons1.xlsm").Sheets("Bouclage").Cells(k, 4) = Workbooks("Test boucles pour tronçons1.xlsm").Sheets("ECS").Cells(55, 2 * k - 51)
End If
Loop
End Sub
J'ai besoin de votre aide car mon code ne fonctionne pas. Il s'exécute mais rien ne s'écrit dans les cellules. Merci beaucoup
Sub bouclewhile2()
Dim k As Currency
k = 27
Do While Workbooks("Test boucles pour tronçons1.xlsm").Sheets("Bouclage").Cells(k, 2) Like " "
If Workbooks("Test boucles pour tronçons1.xlsm").Sheets("Bouclage").Cells(k, 3) = 1 Then
Workbooks("Test boucles pour tronçons1.xlsm").Sheets("Bouclage").Cells(k, 4) = Workbooks("Test boucles pour tronçons1.xlsm").Sheets("ECS").Cells(55, 2 * k - 50)
Else
Workbooks("Test boucles pour tronçons1.xlsm").Sheets("Bouclage").Cells(k, 4) = Workbooks("Test boucles pour tronçons1.xlsm").Sheets("ECS").Cells(55, 2 * k - 51)
End If
Loop
End Sub
3 réponses
Bonjour,
Il manque l'incrémentation de k !!!!
Il manque l'incrémentation de k !!!!
Sub bouclewhile2() Dim k As Currency k = 27 With Workbooks("Test boucles pour tronçons1.xlsm").Sheets("Bouclage") Do While .Cells(k, 2).Value Like " " If .Cells(k, 3).Value = 1 Then .Cells(k, 4).Value = .Cells(55, 2 * k - 50).Value Else .Cells(k, 4).Value = .Cells(55, 2 * k - 51).Value End If k = k + 1 Loop End With End Sub
Bonjour, il me semble que la syntaxe pour affecter/récupérer la valeur d'une cellule est
et non pas simplement
Bonne journée
Cells(i,j).Value
et non pas simplement
Cells(i,j)
Bonne journée
Bonjour gb,
Entièrement d'accord avec le "malheureusement" !
Il est toujours préférable de préciser la propriété utilisée.
Depuis très longtemps, certains affirment que parfois, Excel utiliserait .Text au lieu de .Valeur.
Je n'ai jamais vu d'exemple qui le mette en évidence. En connaitrais-tu ???
Cordialement
Patrice
Entièrement d'accord avec le "malheureusement" !
Il est toujours préférable de préciser la propriété utilisée.
Depuis très longtemps, certains affirment que parfois, Excel utiliserait .Text au lieu de .Valeur.
Je n'ai jamais vu d'exemple qui le mette en évidence. En connaitrais-tu ???
Cordialement
Patrice
Bonjour Patrice,
certains affirment que parfois, Excel utiliserait .Text
Je ne t'apprendrais rien mais il ne faut pas se fier à ceux qui croient avoir découvert des failles qui souvent n'existent pas et sont dues à d'autres causes. Par contre je considère qu'en précisant la propriété utilisée, comme le suggérait Pinzou76, l'on n'a pas de surprise.
Bonne journée
certains affirment que parfois, Excel utiliserait .Text
Je ne t'apprendrais rien mais il ne faut pas se fier à ceux qui croient avoir découvert des failles qui souvent n'existent pas et sont dues à d'autres causes. Par contre je considère qu'en précisant la propriété utilisée, comme le suggérait Pinzou76, l'on n'a pas de surprise.
Bonne journée
Bonjour,
Déjà tu peux simplier ton code ainsi pour une lecture plus agréable et moins d'erreur de saisies
Cependant il ne va pas mieux fonctionner car ton 'k' n'évolue pas et comme l'on n'en connais pas la finalité c'est difficile d'interpréter. Apparemment 27 est une valeur mais tu l'utilises comme un n° de ligne.
Déjà tu peux simplier ton code ainsi pour une lecture plus agréable et moins d'erreur de saisies
Sub bouclewhile2() Dim k As Currency k = 27 With Workbooks("Test boucles pour tronçons1.xlsm").Sheets("Bouclage") Do While .Cells(k, 2) Like " " If .Cells(k, 3) = 1 Then .Cells(k, 4) = .Cells(55, 2 * k - 50) Else .Cells(k, 4) = .Cells(55, 2 * k - 51) End If Loop End With End Sub
Cependant il ne va pas mieux fonctionner car ton 'k' n'évolue pas et comme l'on n'en connais pas la finalité c'est difficile d'interpréter. Apparemment 27 est une valeur mais tu l'utilises comme un n° de ligne.
Bonjour,
Merci pour cette simplification. En revanche je souhaite récupérer des valeurs de la feuille ECS pour les retranscrire dans la feuille Bouclage (le classeur reste le même).
En effet k est le numéro de la ligne. J'aimerais qu'il varie par pas de 1 jusqu'à ce qu'il y ait du texte dans la colonne B. Je pensais que cette variation par pas de 1 se réalisait automatiquement...
Pouvez vous me dire la procédure à suivre ?
Merci beaucoup
Merci pour cette simplification. En revanche je souhaite récupérer des valeurs de la feuille ECS pour les retranscrire dans la feuille Bouclage (le classeur reste le même).
En effet k est le numéro de la ligne. J'aimerais qu'il varie par pas de 1 jusqu'à ce qu'il y ait du texte dans la colonne B. Je pensais que cette variation par pas de 1 se réalisait automatiquement...
Pouvez vous me dire la procédure à suivre ?
Merci beaucoup
il faut quand même la définir dans la déclaration de la boucle.
En vba, par défaut si vous ne la déclarez pas, elle est de 1 par défaut.
Ainsi
fonctionnera quand même et fera exactement la même chose que
Et si vous voulez compter de 3 en 3:
Step correspond à l'incrémentation effectuée à chaque tour de boucle.
Dans d'autres langages (ex: C++), vous devrez toujours déclarer le pas, même s'il est égal à 1.