Boucle while jusqu'à ce que la valeur soit le vide

Résolu/Fermé
Robin - Modifié par pijaku le 2/03/2016 à 16:10
 Robin - 3 mars 2016 à 15:21
Bonjour,

J'ai un soucis avec la macros que je suis en train de créer en fait je chercher à faire une boucle while du type :

While OF1(val1, 0).Value <> ""

       val1 = L + 1
       
       While OF1(L, 0) = OF1(val1, 0)
          
          If OF1(val1, 7) = OF1(L, 7) Then
             If OF1(val1, 4) <> OF1(L, 4) & OF1(val1, 5) <> OF1(L, 5) Then
                OF2(Nolig, 5) = OF1(val1, 5) + OF1(L, 5)
             ElseIf OF1(val1, 4) = OF1(L, 4) & OF1(val1, 5) = OF1(L, 5) Then
                OF2(Nolig, 5) = OF1(L, 5)
             End If
          
          ElseIf OF1(val1, 7) <> OF1(L, 7) Then
             OF1(L, 2) = OF1(L, 2) + OF1(val1, 2)
             OF1(L, 7) = OF1(val1, 7)
          ElseIf OF1(val1, 1) = "L20" Then
             OF2(Nolig, 4) = OF1(val1, 4)
          ElseIf OF1(val1, 1) = "L30" Then
             OF2(Nolig, 3) = OF1(L, 3)
          ElseIf OF1(L, 1) = "L20" Then
             OF2(Nolig, 4) = OF1(val1, 4)
          ElseIf OF1(L, 1) = "L30" Then
             OF2(Nolig, 3) = OF1(L, 3)
          End If
          val1 = val1 + 1
       Wend
       OF2(Nolig, 2) = OF1(L, 2)
       L = val1
       Nolig = Nolig + 1
       
     Wend

Le problème c'est que ma variable val1 atteint la limite de mon tableau alors que normalement c'est impossible je devrais rencontrer une ligne vide bien avant.

Pouvez vous m'aider ?

Pour info voici les dimensions de mes variables:

Dim val1 As Variant, Nolig As Long
Dim L As Integer
Dim OF1(100, 10) As Variant, OF2(10, 8) As Variant


Merci d'avance


2 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
3 mars 2016 à 08:34
Bonjour

Pour boucler sur une variable-tableau tu peux utiliser les fonctions Lbound
et Ubound
Lbound =1° "ligne" de OF1
Ubound Fin de OF1

For xxxx=Llbound(OF1) to Ubound(OF1)
ou
For xxxx=0 to Ubound(OF1)
.....
If OF1(val1, 0)="" then exit for
....
next


0
Donc je viens de tester avec la boucle For et Ubound et ca fonctionne parfaitement!
Merci beaucoup Michel, j'ai grandement amélioré la vitesse de calcul de ma macros désormais.

A bientôt
0
Bonjour,

D'après ce que tu dis
Dim OF1(100, 10) As Variant
on comprend que OF1 est un tableau

Or quand on lit
While OF1(val1, 0).Value <> ""
on s'attend à ce que OF1 est un objet du type WorkSheet

Alors Tableau au Worksheet?
-1
Il s'agit bien d'un tableau.

Au départ je n'avais pas mit le .value je l'ai ajouter en pensant résoudre mon problème.
0