While ou Do While, passer à l'itération suivante KO ?

Bonjour à tous,

Dans ma boucle While ou Do While, je voudrais passer automatiquement à l'itération suivante si une condition n'est pas respectée.

Mais le Continue Do dans la boucle Do While, ni le Continue While dans une boucle While ne marchent pas... J'ai un message d'erreur quand je tape le code :

" Erreur de Compilation : Attendu Expression"

Comment faire pour que ça marche ? ...

Précision : Non, je ne souhaite pas utiliser de boucle For

Par avance, merci pour votre aide !

'Boucle tant que la fin du tableau n'est pas atteinte
Do While ActiveCell.Value <> Empty
    ' Paramètres du Forçage ou Blocage
    NumCompte = ActiveCell.Value

    If ActiveCell.Offset(0, 1) Is Empty Then
                  'Compte Suivant
                  ActiveCell.Offset(1, 0).Select        

                  'Le code "Continue Do" n'est pas reconnu ... !!
                  continue do
    End If
'(reste du code)
'Compte Suivant
ActiveCell.Offset(1, 0).Select        

Loop

Bonjour, Oui !

Où as-tu vu 'continue' dans les mots-clés VBA ?

En pareil cas c'est le code à exécuter dans la boucle qu'on met sous condition :

If Not IsEmpty(ActiveCell...) Then

(Utilisation de la fonction préférable...)

et la boucle continuera sans exécuter le code si la condition n'est pas vérifiée.

Remarque occasionnelle : l'utilisation de ActiveCell permet de créer des procédures instables puisque dépendantes de la sélection ou activation. Il y a sûrement moyen de faire autrement. A moins que ce ne soit pour ralentir VBA...

Bonjour MFerrand,

Merci pour les remarques.

Et,

tu veux dire que :

NumCompte = ActiveCell.Value

Do While NumCompte <> Empty

       CycleOrigine = Trim(ActiveCell.Offset(0, 1).Value)
       If Not IsEmpty(CycleOrigine) Then
       (...)
       End If

      ' Paramètres du Forçage ou Blocage
      NumCompte = ActiveCell.Value
      ActiveCell.Offset(1, 0).Select

Loop

Serait plus rapide à exécuter que :

Do While ActiveCell.Value <> Empty
    ' Paramètres du Forçage ou Blocage
    NumCompte = ActiveCell.Value

If Not IsEmpty(ActiveCell.Offset(0, 1)) Then
(...)
End If

ActiveCell.Offset(1, 0).Select

Loop

?

En tout cas, l'ensemble de mon code est surement à optimiser, je fais beaucoup de contrôles au niveau de certains champs, et même, je fais beaucoup de select ADODB afin de vérifier les données renseignées dans l'excel.

vinzmeister a écrit :

Bonjour MFerrand,

Merci pour les remarques.

Ou j'ai vu le mot clé "continue" ? : ici par exemple => https://msdn.microsoft.com/fr-fr/library/eked04a7.aspx

Et,

tu veux dire que :

NumCompte = ActiveCell.Value

Do While NumCompte <> Empty

       CycleOrigine = Trim(ActiveCell.Offset(0, 1).Value)
       If Not IsEmpty(CycleOrigine) Then
       (...)
       End If

      ' Paramètres du Forçage ou Blocage
      NumCompte = ActiveCell.Value
      ActiveCell.Offset(1, 0).Select

Loop

Serait plus rapide à exécuter que :

Do While ActiveCell.Value <> Empty
    ' Paramètres du Forçage ou Blocage
    NumCompte = ActiveCell.Value

If Not IsEmpty(ActiveCell.Offset(0, 1)) Then
(...)
End If

ActiveCell.Offset(1, 0).Select

Loop

?

En tout cas, l'ensemble de mon code est surement à optimiser, je fais beaucoup de contrôles au niveau de certains champs, et même, je fais beaucoup de select ADODB afin de vérifier les données renseignées dans l'excel.

Pas vraiment. Le fait de se référer à ActiveCell induit de sélectionner une nouvelle cellule à chaque tour, soit une action supplémentaire dans Excel. L'incrémentation d'une variable serait sensiblement meilleure.

Je vois, merci du conseil !

Rechercher des sujets similaires à "while passer iteration suivante"