[VBA] transformer GoTo en Do while

Résolu
Noodlesnood Messages postés 33 Date d'inscription   Statut Membre Dernière intervention   -  
Noodlesnood Messages postés 33 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai un code qui fonctionne, mais étant donné que le GoTo n'est pas vraiment apprécié, on m'a conseillé de modifier mon code, j'ai donc pensé à une syntaxe Do While ... Loop


Code d'origine :

'inventaire CA
sommeCA = 0
compterCA= 0
For Each cell In ActiveSheet.UsedRange
If cell.Value = "CA" Then
On Error Resume Next
sommeCA= sommeCA + 1
On Error GoTo 0
compterCA = compterCA + 1
End If
Next
Range("C38") = (compterCA) - 1

J'ai tenté de le remplacer par :

'inventaire CA
sommeCA = 0
compterCA = 0
For Each cell In ActiveSheet.UsedRange
Do While cell.Value = "CA"
sommeCA = sommeCA + 1
compterCA = compterCA + 1
Loop
Range("C38") = (compterCA - 1)

Quelles sont mes erreurs?

3 réponses

ruzakruzak Messages postés 459 Date d'inscription   Statut Membre Dernière intervention   247
 
Ben le truc c'est que ton 1er code teste toute la plage, tandis que le 2e s'arrête au premier contenu différent de CA. Est-ce ce que tu veux vraiment faire ??
1
Noodlesnood Messages postés 33 Date d'inscription   Statut Membre Dernière intervention   2
 
Non je veux bien tester toute la plage et non m'arrêter au 1er non-CA, afin de les comptabiliser à la fin de la colonne.
1
domiH1 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   2
 
bonjour.
La règle syntaxique est :
"on error " est toujours suivi de "goto" + n°ligne ou étiquette (pour traitement suite à l'erreur) ou 0 (pour invalider) ou suivi de "resume next" pour continuer comme si rien ne s'était passé.
avec "on error " il n'y a donc pas le choix.
Ton programme est lisible facilement, ne change rien.
0
Sylvain Laurence
 
Bonjour,

J'ajouterais seulement que la seule bonne façon de faire de la gestion d'erreur dans VB et VBA, c'est l'utilisation du GOTO.

Tous mes programme ont cette forme. Ça fait en sorte que l'usager n'a pas la fenêtre permettant d'aller dans le code avec le bouton Debug.

Function Nom_de_fonction()
On Error GoTo Error_Sub

   'code

Exit_Sub:
    Exit Function
Error_Sub:
    MsgBox Err.Description
    Resume Exit_Sub
End Function


Au plaisir!

Sylvain Laurence
Groupe Conseil Lartis Inc.
Développeur Acomba
http://acomba-developpeur-revendeur-integrateur-formateur-laval.lartis.com/
http://www.lartis.com
0
Noodlesnood Messages postés 33 Date d'inscription   Statut Membre Dernière intervention   2
 
Merci pour vos précisions ; )
0