Probleme avec boucles et variables

stealer85

XLDnaute Nouveau
Bonjour a tous,
Je viens solliciter votre aide sur une macro que je tente de mettre en place.
Mon but est de faire une boucle sous certaines conditions, voici mon code pour le moment :
Code:
Sub Zip_Selected_Files()
Dim i As Byte, Numb as Byte
 i = 8 'row number
Do While i < 122 
       
    If Cells(i, 10).Value <> 1 Then
    Else
    Numb = Cells(i, 9).Value

    FileNameXls = Array(Cells(i, 6), Cells(i + 1, 6), Cells(i + 2, 6))
    i = i + 1

call zipfiles

End If
Loop
End Sub

Je veux donc demander a la macro qu'elle verifie que pour chaque cellule de la colonne "J" = 1. Cette cellule contient une formule me permettant de definir la position d'un fichier dans un groupe. Je ne m'interesse donc qu'au 1er fichier de chaque groupe.
Je demande ensuite a regarder la valeur de colonne I qui contient le nombre de fichier a zipper correspondant.
En fonction de ce nombre je cherche a definir FilenameXLS qui doit etre un array comprenant entre 1 et 6 cellules. Je ne peux malheuresement pas utiliser array=range("F8:F10") car cela bloque au niveau de la compression des fichiers.
J'ai fais mes essais sur les 3 premieres cellules d'ou l'ecriture ci-dessus. Le 1er fichier est bien compresse avec les bons fichiers, mais Excel plante ensuite.
Si vous avez des pistes, je suis preneur !
 

Pièces jointes

  • sample.xls
    27 KB · Affichages: 81
  • sample.xls
    27 KB · Affichages: 78
  • sample.xls
    27 KB · Affichages: 72

Gael

XLDnaute Barbatruc
Re : Probleme avec boucles et variables

Bonsoir Stealer85,

A première vue, l'instruction "i=i+1" ne s'exécute que si la cellule J correspondante est égale à 1, ce qui a lieu la première fois et tu zippes les 3 premiers fichiers.

Ensuite, i=9 mais J9 <> 1, donc tu exécutes le loop et comme la valeur de i ne change plus, tu tombes dans une boucle infinie.

Sinon si Numb est <> 3, l'instruction Filename.xls=Array... ne varie pas et reste figée à 3 fichiers.

@+

Gael
 

stealer85

XLDnaute Nouveau
Re : Probleme avec boucles et variables

Merci pour la reponse, effectivement mon instruction etait mal placee et la macro tourne beaucoup mieux maintenant. Il me reste a definir correctement mon array, voici mon code :
Code:
Dim i As Byte, Numb as Byte
 i = 8 'row number
Do While i < 122 

    If Cells(i, 10).Value <> 1 Then
    Else
    Numb = Cells(i, 9).Value
    
    If Numb = 2 Then
    FileNameXls = Array(Cells(i, 6), Cells(i + 1, 6))
    Else
    If Numb = 3 Then
    FileNameXls = Array(Cells(i, 6), Cells(i + 1, 6), Cells(i + 2, 6))
    Else
    If Numb = 4 Then
    FileNameXls = Array(Cells(i, 6), Cells(i + 1, 6), Cells(i + 2, 6), Cells(i + 3, 6))
    Else
    If Numb = 5 Then
    FileNameXls = Array(Cells(i, 6), Cells(i + 1, 6), Cells(i + 2, 6), Cells(i + 3, 6), Cells(i + 4, 6))
    If Numb = 6 Then
    FileNameXls = Array(Cells(i, 6), Cells(i + 1, 6), Cells(i + 2, 6), Cells(i + 3, 6), Cells(i + 4, 6), Cells(i + 5, 6))
    Else
call zipfiles

End If
    i = i + 1
Loop
      MsgBox "The macro is ready"
End Sub

VBA me dit "Loop without do". Dois-je changer de place mon end if ou en mettre autant qu'il y a de conditions (5) ?
Merci !
 

Excel-lent

XLDnaute Barbatruc
Re : Probleme avec boucles et variables

Bonsoir Stealer,

Ne pouvant pas tester ta macro, je ne pourrais pas être catégorique, mais à mon avis, comme sont construits tes conditions, tu dois mettre End If à la fin de chaque condition!

Ce qui devrait te donner ceci :
Code:
Dim i As Byte, Numb As Byte
 i = 8 'row number
Do While i < 122

    If Cells(i, 10).Value <> 1 Then
    Else
          Numb = Cells(i, 9).Value
    End If
    
    If Numb = 2 Then
                  FileNameXls = Array(Cells(i, 6), Cells(i + 1, 6))
    Else
      If Numb = 3 Then
                  FileNameXls = Array(Cells(i, 6), Cells(i + 1, 6), Cells(i + 2, 6))
      Else
        If Numb = 4 Then
                  FileNameXls = Array(Cells(i, 6), Cells(i + 1, 6), Cells(i + 2, 6), Cells(i + 3, 6))
        Else
            If Numb = 5 Then
                  FileNameXls = Array(Cells(i, 6), Cells(i + 1, 6), Cells(i + 2, 6), Cells(i + 3, 6), Cells(i + 4, 6))
            Else
               If Numb = 6 Then
                  FileNameXls = Array(Cells(i, 6), Cells(i + 1, 6), Cells(i + 2, 6), Cells(i + 3, 6), Cells(i + 4, 6), Cells(i + 5, 6))
               [COLOR="Red"][B]Else[/B][/COLOR]
                  Call zipfiles
               End If
            End If
       End If
     End If
   End If
   
   i = i + 1
Loop
      MsgBox "The macro is ready"
End Sub

Il me semble que tu as oublié ceci en route : Else! Non ?

Pour information, ta ligne de commande : Call zipfiles

-> dans mon cas, ne s'exécute que lorsque Numb est supérieur à 6.
-> dans ton cas, elle ne s'exécutais que lorsque Numb était égal à 6 (ce qui me semble bizarre - mais ne connaissant pas ton projet dans sa globalité ...)

Bonne fin de soirée
 

Gael

XLDnaute Barbatruc
Re : Probleme avec boucles et variables

Bonjour Stealer85, bonjour Excel_lent,

Dans ton cas et si tu dois vraiment utiliser "Array", le code suivant me paraît plus indiqué:

Code:
...
Select Case Numb
    Case 2
    Filenamexls = Array(Cells(i, 6), Cells(i + 1, 6))
    Case 3
    Filenamexls = Array(Cells(i, 6), Cells(i + 1, 6), Cells(i + 2, 6))
    Case 4
    Filenamexls = Array(Cells(i, 6), Cells(i + 1, 6), Cells(i + 2, 6), Cells(i + 3, 6))
    Case 5
    Filenamexls = Array(Cells(i, 6), Cells(i + 1, 6), Cells(i + 2, 6), Cells(i + 3, 6), Cells(i + 4, 6))
    Case 6
    Filenamexls = Array(Cells(i, 6), Cells(i + 1, 6), Cells(i + 2, 6), Cells(i + 3, 6), Cells(i + 4, 6), Cells(i + 5, 6))
    Case Else
End Select
...

Mais si la procédure "Zipfiles" peut fonctionner avec un tableau simple, j'aurais plutot écrit:

Code:
For j = 0 To Numb - 1
    Filenamexls(j) = Cells(i + j, 6)
Next j

@+

Gael
 

stealer85

XLDnaute Nouveau
Re : Probleme avec boucles et variables

Bonjour Excel-lent et Gael,
Merci beaucoup pour votre precieuse aide!
Je connaissais pas la fonction Select Case et c'est exactement ce que je recherchais ! La macro marche parfaitement a part une petite exception, je vais voir ca dans mon coin et reviendrai avec plaisir vous demander conseil si besoin !
Merci !
 

Discussions similaires

Statistiques des forums

Discussions
312 343
Messages
2 087 442
Membres
103 546
dernier inscrit
mohamed tano