Problème de boucles

dmoluc

XLDnaute Occasionnel
Bonsoir tout le monde,

Depuis un UserForm je souhaite remplir une feuille excel, j'ai donc créer un bouton à cet effet mais mon soucis est que j'ai 30 feuilles à remplir, j'ai trouver une boucle pour les condition mais je ne sais pas comment changer de feuille avec une autre boucle :(
Bien sur les feuilles à remplir sont toutes identiques


Code:
Private Sub CommandButton9_Click()
For i = 6 To 36
If Range("D" & i) = "" And _
       Range("D" & i - 1) <> "" _
       Or Application.WorksheetFunction.Sum(Range("G" & i - 1 & ":Zz" & i - 1)) = 0 _
       And Application.WorksheetFunction.Sum(Range("G" & i & ":Zz" & i)) > 0 Then

'mon problème est là, je commence à la feuil2
With Sheets("Feuil2")

.Range("A11").Value = ListBox10.Value
.Range("A12").Value = ListBox27.Value
.Range("A13").Value = ListBox28.Value
.Range("A14").Value = ListBox29.Value
.Range("A15").Value = ListBox30.Value
.Range("A16").Value = ListBox31.Value
.Range("A17").Value = ListBox32.Value
.Range("A18").Value = ListBox33.Value
.Range("A19").Value = ListBox34.Value
.Range("A3").Value = ListBox11.Value
.Range("A4").Value = ListBox12.Value
.Range("A5").Value = ListBox13.Value
.Range("A6").Value = ListBox14.Value
.Range("A7").Value = ListBox15.Value
.Range("A8").Value = ListBox16.Value
.Range("A21").Value = ListBox17.Value
.Range("A22").Value = ListBox18.Value
.Range("A23").Value = ListBox19.Value
.Range("A24").Value = ListBox20.Value
.Range("A25").Value = ListBox21.Value
.Range("A26").Value = ListBox22.Value
.Range("A27").Value = ListBox23.Value
.Range("A28").Value = ListBox24.Value
.Range("A29").Value = ListBox25.Value
.Range("A30").Value = ListBox26.Value
End With
End Sub

La macro n'est pas terminer car j'ai trois fois plus de valeurs à imputer sur la feuille alors je pense que si je fais du copier coller 30 fois je vais obtenir un beau dépassement de capacité, alors comment faire pour passer de la feuille 2 à la feuille 3 etc....

Merci pour votre aide car le problème dépasse mes connaissances
cordialement Didier
 
C

Compte Supprimé 979

Guest
Re : Problème de boucles

Salut Dmoluc

1èrement : a quoi te sert ta boucle de départ qui na pas de "Next" ?

2èmement : en numérotant correctement tes Listbox, tu pourrais en 3 ligne remplir chaque cellule de tes feuilles

A+
 
Dernière modification par un modérateur:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Problème de boucles

Bonjnour le fil, bonjour le forum,

Peut être comme ça :
Code:
Private Sub CommandButton9_Click()
Dim i As Byte 'déclare la variable i (incrément)
Dim x As Byte 'déclare la variable o (Onglet)

For i = 6 To 36
    If Range("D" & i) = "" And _
       Range("D" & i - 1) <> "" _
       Or Application.WorksheetFunction.Sum(Range("G" & i - 1 & ":Zz" & i - 1)) = 0 _
       And Application.WorksheetFunction.Sum(Range("G" & i & ":Zz" & i)) > 0 Then
    For x = 2 To Sheets.Count
        With Sheets(x)
            .Range("A11").Value = ListBox10.Value
            .Range("A12").Value = ListBox27.Value
            .Range("A13").Value = ListBox28.Value
            .Range("A14").Value = ListBox29.Value
            .Range("A15").Value = ListBox30.Value
            .Range("A16").Value = ListBox31.Value
            .Range("A17").Value = ListBox32.Value
            .Range("A18").Value = ListBox33.Value
            .Range("A19").Value = ListBox34.Value
            .Range("A3").Value = ListBox11.Value
            .Range("A4").Value = ListBox12.Value
            .Range("A5").Value = ListBox13.Value
            .Range("A6").Value = ListBox14.Value
            .Range("A7").Value = ListBox15.Value
            .Range("A8").Value = ListBox16.Value
            .Range("A21").Value = ListBox17.Value
            .Range("A22").Value = ListBox18.Value
            .Range("A23").Value = ListBox19.Value
            .Range("A24").Value = ListBox20.Value
            .Range("A25").Value = ListBox21.Value
            .Range("A26").Value = ListBox22.Value
            .Range("A27").Value = ListBox23.Value
            .Range("A28").Value = ListBox24.Value
            .Range("A29").Value = ListBox25.Value
            .Range("A30").Value = ListBox26.Value
        End With
    Next x
Next i
End Sub
 

dmoluc

XLDnaute Occasionnel
Re : Problème de boucles

merci c'est exactement ça que je cherchais
pardon pour le For qui manquait dans mon code, encore une étourderie de ma part
Les ListBox sont bien numérotées dans l'ordre mais sur les feuilles j'ai mélangé un peu les résultats Cela serait facile à changer mais comme je ne sais pas comment faire des boucles avec les listbox et les textbox, cela ne m'avait pas parut important.

Encore merci pour ce code ; j'ai une erreur Next sans for alors que cela à l'air d'être bon. J'espère que je vais trouver pourquoi

Cordialement A+

Didier
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Problème de boucles

Bonjour le fil, bonjour le forum,

Si tes listboxes son nommées de telle manière qu'elles correspondent à l'ordre des lignes tu peux utiliser une boucle sur les listboxes de ce genre :
Code:
Private Sub CommandButton9_Click()
Dim i As Byte 'déclare la variable i (incrément)
Dim x As Byte 'déclare la variable o (Onglet)
Dim z As Byte 'déclare la variable z
For i = 6 To 36
    If Range("D" & i) = "" And _
       Range("D" & i - 1) <> "" _
       Or Application.WorksheetFunction.Sum(Range("G" & i - 1 & ":Zz" & i - 1)) = 0 _
       And Application.WorksheetFunction.Sum(Range("G" & i & ":Zz" & i)) > 0 Then
    For x = 2 To Sheets.Count
        For z = 4 To 34
            On Error Resume Next
            Sheets(x).Cells(x, 1).Value = Me.Controls("ListBox" & z).Value
            If Err <> 0 Then Err = 0
            On Error GoTo 0
        Next z
    Next x
Next i
End Sub
 

dmoluc

XLDnaute Occasionnel
Re : Problème de boucles

Merci pour le renseignement mais impossible d'écrire sur les feuilles la boucle : For x = 2 To Sheets.Count ne fonctionne pas :(
J'ai simplifier un peu en supprimant la première boucle pour les conditions dont je peu finalement me passer et qui renvoyer l'erreur Next sans For mais rien ne fonctionne

Code:
Private Sub CommandButton9_Click()
Dim x As Byte 'déclare la variable o (Onglet)
Dim z As Byte 'déclare la variable z
    For x = 2 To Sheets.Count
        For z = 4 To 34
            On Error Resume Next
            Sheets(x).Cells(x, 1).Value = Me.Controls("ListBox" & z).Value
            If Err <> 0 Then Err = 0
            On Error GoTo 0
        Next z
    Next x

End Sub
je vais essayer sans la boucle des listBox mais je n'y crois pas trop

Merci encore pour ton aide

A+
 

dmoluc

XLDnaute Occasionnel
Re : Problème de boucles

Bonjour à tous,

http://cjoint.com/?3Hlg5WThbQi

J'ai mis la dernière version de mon fichier en ligne, autrement c'est impossible car il est trop gros .
Le problème se situe sur l'UserForm5, onglet déboursé pour la tâche, bouton sous détail qui doit inscrire les données de la page "déboursé pour la tâche" dans la feuil2, puis à chaque nouveau calcul vers la feuil3 ect... jusqu'à feuil32

Je me suis aperçue que la boucle avait écrit des données dans d'autres feuille et je me demande si Feuil2 correspond bien à la feuille 2 du classeur ; dans l'onglet feuille elle est au 10ème rang. Je vais donc modifier en conséquence et voir ce que cela donne

Merci encore pour votre aide précieuse

cordialement,

Didier
 

dmoluc

XLDnaute Occasionnel
Re : Problème de boucles

Code:
Private Sub CommandButton9_Click()
Dim x As Byte
For x = 10 To Sheets.Count
        With Sheets(x)
.Range("A1").Value = ListBox10.Value
.Range("A12").Value = ListBox27.Value
.Range("A13").Value = ListBox28.Value
.Range("A14").Value = ListBox29.Value
.Range("A15").Value = ListBox30.Value
.Range("A16").Value = ListBox31.Value
.Range("A17").Value = ListBox32.Value
.Range("A18").Value = ListBox33.Value
.Range("A19").Value = ListBox34.Value
.Range("A3").Value = ListBox11.Value
.Range("A4").Value = ListBox12.Value
.Range("A5").Value = ListBox13.Value
.Range("A6").Value = ListBox14.Value
.Range("A7").Value = ListBox15.Value
.Range("A8").Value = ListBox16.Value
.Range("A21").Value = ListBox17.Value
.Range("A22").Value = ListBox18.Value
.Range("A23").Value = ListBox19.Value
.Range("A24").Value = ListBox20.Value
.Range("A25").Value = ListBox21.Value
.Range("A26").Value = ListBox22.Value
.Range("A27").Value = ListBox23.Value
.Range("A28").Value = ListBox24.Value
.Range("A29").Value = ListBox25.Value
.Range("A30").Value = ListBox26.Value
End With
 Next x
End Sub
En fait c'était bien ça, comme quoi une bonne nuit de sommeil porte conseil, bien sur il me reste encore le problème de boucle avec les listbox et textbox qui raccourcirait grandement mon code

J'avais oublier : pour lancer l'UserForm5 c'est le bouton "calcul" dans l'onglet R/J de la feuille programme des travaux

Encore merci Robert, grâce à toi j'en ai appris un peu plus sur les boucles même si je ne suis pas encore au point avec les listBox

Cordialement
 

dmoluc

XLDnaute Occasionnel
Re : Problème de boucles

Re Bonjour
en fait j'ai parlé trop vite, la boucle sur les feuille fonctionne bien mais pas comme je voudrais :( elle prend les valeurs de l'userForm et les colles dans toutes les feuilles à partir de la dixième
ce qu'il faudrait qu'elle face c'est que si la feuil2 (10èmme rang) est vide, alors elle inscrit les valeurs de l'userform, puis nlorsque je fais un nouveau calcul (sans doute aprés fermeture et réouverture de l'userform) elle inscrive les valeur du nouveau calcul dans la feuille suivante
http://img185.imagevenue.com/img.php?image=66828_userform_122_371lo.jpg
En fait les feuille servent à sauver les calculs effectuer par l'userForm. J'ai créer 30 feuille car je limite le programme à 30 tâches car je m'en servirais pour la formation et non à des fin commerciales :)
Merci encore pour votre aide précieuse, je vais essayer de trouver une syntaxe pour la boucle mais je ne vois pas encore trop comment faire :(

Cordialement
 

dmoluc

XLDnaute Occasionnel
Re : Problème de boucles

Voici le code complet pour remplir une feuille

Code:
   With Sheets(Feuil2)
        If .Range("A3") = "" Then
.Range("A1").Value = ListBox10.Value
.Range("A11").Value = ListBox27.Value
.Range("A12").Value = ListBox28.Value
.Range("A13").Value = ListBox29.Value
.Range("A14").Value = ListBox30.Value
.Range("A15").Value = ListBox31.Value
.Range("A16").Value = ListBox32.Value
.Range("A17").Value = ListBox33.Value
.Range("A18").Value = ListBox34.Value

.Range("A3").Value = ListBox11.Value
.Range("A4").Value = ListBox12.Value
.Range("A5").Value = ListBox13.Value
.Range("A6").Value = ListBox14.Value
.Range("A7").Value = ListBox15.Value
.Range("A8").Value = ListBox16.Value

.Range("A21").Value = ListBox17.Value
.Range("A22").Value = ListBox18.Value
.Range("A23").Value = ListBox19.Value
.Range("A24").Value = ListBox20.Value
.Range("A25").Value = ListBox21.Value
.Range("A26").Value = ListBox22.Value
.Range("A27").Value = ListBox23.Value
.Range("A28").Value = ListBox24.Value
.Range("A29").Value = ListBox25.Value
.Range("A30").Value = ListBox26.Value

.Range("B11").Value = TextBox102.Value
.Range("B12").Value = TextBox103.Value
.Range("B13").Value = TextBox104.Value
.Range("B14").Value = TextBox105.Value
.Range("B15").Value = TextBox106.Value
.Range("B16").Value = TextBox107.Value
.Range("B17").Value = TextBox108.Value
.Range("B18").Value = TextBox109.Value

.Range("B3").Value = TextBox86.Value
.Range("B4").Value = TextBox87.Value
.Range("B5").Value = TextBox88.Value
.Range("B6").Value = TextBox89.Value
.Range("B7").Value = TextBox90.Value
.Range("B8").Value = TextBox91.Value

.Range("B21").Value = TextBox92.Value
.Range("B22").Value = TextBox93.Value
.Range("B23").Value = TextBox94.Value
.Range("B24").Value = TextBox95.Value
.Range("B25").Value = TextBox96.Value
.Range("B26").Value = TextBox97.Value
.Range("B27").Value = TextBox98.Value
.Range("B28").Value = TextBox99.Value
.Range("B29").Value = TextBox100.Value
.Range("B30").Value = TextBox101.Value

.Range("C11").Value = TextBox130.Value
.Range("C12").Value = TextBox131.Value
.Range("C13").Value = TextBox132.Value
.Range("C14").Value = TextBox133.Value
.Range("C15").Value = TextBox134.Value
.Range("C16").Value = TextBox135.Value
.Range("C17").Value = TextBox136.Value
.Range("C18").Value = TextBox137.Value

.Range("C3").Value = TextBox115.Value
.Range("C4").Value = TextBox116.Value
.Range("C5").Value = TextBox117.Value
.Range("C6").Value = TextBox118.Value
.Range("C7").Value = TextBox119.Value
.Range("C8").Value = TextBox120.Value

.Range("C21").Value = TextBox121.Value
.Range("C22").Value = TextBox122.Value
.Range("C23").Value = TextBox123.Value
.Range("C24").Value = TextBox124.Value
.Range("C25").Value = TextBox125.Value
.Range("B26").Value = TextBox126.Value
.Range("C27").Value = TextBox127.Value
.Range("C28").Value = TextBox128.Value
.Range("C29").Value = TextBox129.Value
.Range("C30").Value = TextBox1114.Value

.Range("E35").Value = TextBox111.Value

Dim D As Byte, compteur As Byte
For D = 3 To 9
If .Range("A" & D) <> "" Then
.Range("D" & D) = TextBox113.Value
End If
Next D

For D = 11 To 19
If .Range("A" & D) <> "" Then
.Range("D" & D) = TextBox113.Value
End If
Next D

For D = 21 To 32
If .Range("A" & D) <> "" Then
.Range("D" & D) = TextBox113.Value
End If
Next D
End With
End If

End Sub

Si quelqu'un avait une idée pour ne pas le répéter 30 fois, se serait super

Merci pour votre aide
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Problème de boucles

Bonjour le fil, bonjour le forum,

Une boucle, un condition, une sortie de la procédure quand la condition est remplie !
J'ai repris le code de ton fichier car le dernier que tu donnes est différent et je ne m'y retrouve plus... Tu adapteras... Le code :
Code:
Private Sub CommandButton9_Click()
Dim x As Byte

If Sheets("Programme des travaux").Range("A6") <> "" And Sheets("Programme des travaux").Range("A7") = "" Then
For x = 10 To 40 'ou for x = 2 to 32 'boucle
    With Sheets(x) 'ou With Sheets("Feuil" & x)
        'j'ai pris A1 pour l'exemple mais il faut que tu choissises une cellule qui sera obligatoirement remplie par l'utilisateur...
        If .Range("A1").Value <> "" Then 'condition : si A1 n'est pas vide
            .Range("A1").Value = ListBox10.Value
            .Range("A12").Value = ListBox27.Value
            .Range("A13").Value = ListBox28.Value
            .Range("A14").Value = ListBox29.Value
            .Range("A15").Value = ListBox30.Value
            .Range("A16").Value = ListBox31.Value
            .Range("A17").Value = ListBox32.Value
            .Range("A18").Value = ListBox33.Value
            .Range("A19").Value = ListBox34.Value
            .Range("A3").Value = ListBox11.Value
            .Range("A4").Value = ListBox12.Value
            .Range("A5").Value = ListBox13.Value
            .Range("A6").Value = ListBox14.Value
            .Range("A7").Value = ListBox15.Value
            .Range("A8").Value = ListBox16.Value
            .Range("A21").Value = ListBox17.Value
            .Range("A22").Value = ListBox18.Value
            .Range("A23").Value = ListBox19.Value
            .Range("A24").Value = ListBox20.Value
            .Range("A25").Value = ListBox21.Value
            .Range("A26").Value = ListBox22.Value
            .Range("A27").Value = ListBox23.Value
            .Range("A28").Value = ListBox24.Value
            .Range("A29").Value = ListBox25.Value
            .Range("A30").Value = ListBox26.Value
            Exit Sub 'sort de la procédure
        End If 'fin de la confition
    End With
Next x
End Sub
 

dmoluc

XLDnaute Occasionnel
Re : Problème de boucles

Bonjour Robert, je te remercie vraiment pour la peine que tu t'es donnée pour résoudre mon problème, mais même avec ton aide je n'arrive pas à faire ce que je voudrais. Le code continu à remplir toutes les feuilles :( mais je pense avoir trouver une solution : au lieu d'aller remplir une cellule sur les feuilles, je vais mettre une textBox à coté du bouton Sous Détail je vais l'incrémenter à 1 et cacher sa valeur quelque part sur une feuille, ensuite à chaque ouverture de l'userform je rajoute 1, comme ça j'aurai automatiquement mes numéro de feuille de 1 à 30 et je n'aurai plus qu'à faire une boucle avec un compteur pour chaque feuille. Peu être qu'aprés la sieste en réfléchissant un peu je vais y arriver

enfin merci pour ton aide car tu as fait avancé mes connaissances au niveau des boucles et c'est le plus important même si elles restent encore bien maigre

Cordialement
 

dmoluc

XLDnaute Occasionnel
Re : Problème de boucles

Grace à tes renseignement sur les boucles sur les feuilles j'ai adapté un truc un peu tordu qui fonctionne trés bien : j'ai mis un textbox sur le bouton de calcul qui me donne automatiquement le N° de la feuille à remplir mais que je peu aussi renseigner si je veux écrire sur une feuille déjà remplie. C'est pas le top mais ça roule

Code:
Private Sub CommandButton9_Click()
Dim x As Byte, compteur As Byte
compteur = 1
compteur = compteur + Sheets("Programme des travaux").Range("A170").Value
    Sheets("Programme des travaux").Range("A170").Value = (TextBox142.Value + 1)
   x = compteur + 8
    With Sheets(x)
    
.Range("A1").Value = ListBox10.Value
.Range("A11").Value = ListBox27.Value
.Range("A12").Value = ListBox28.Value
.Range("A13").Value = ListBox29.Value
.Range("A14").Value = ListBox30.Value
.Range("A15").Value = ListBox31.Value
.Range("A16").Value = ListBox32.Value
.Range("A17").Value = ListBox33.Value
.Range("A18").Value = ListBox34.Value
.Range("A3").Value = ListBox11.Value
.Range("A4").Value = ListBox12.Value
.Range("A5").Value = ListBox13.Value
.Range("A6").Value = ListBox14.Value
.Range("A7").Value = ListBox15.Value
.Range("A8").Value = ListBox16.Value
.Range("A21").Value = ListBox17.Value
.Range("A22").Value = ListBox18.Value
.Range("A23").Value = ListBox19.Value
.Range("A24").Value = ListBox20.Value
.Range("A25").Value = ListBox21.Value
.Range("A26").Value = ListBox22.Value
.Range("A27").Value = ListBox23.Value
.Range("A28").Value = ListBox24.Value
.Range("A29").Value = ListBox25.Value
.Range("A30").Value = ListBox26.Value

.Range("B11").Value = TextBox102.Value
.Range("B12").Value = TextBox103.Value
.Range("B13").Value = TextBox104.Value
.Range("B14").Value = TextBox105.Value
.Range("B15").Value = TextBox106.Value
.Range("B16").Value = TextBox107.Value
.Range("B17").Value = TextBox108.Value
.Range("B18").Value = TextBox109.Value
.Range("B3").Value = TextBox86.Value
.Range("B4").Value = TextBox87.Value
.Range("B5").Value = TextBox88.Value
.Range("B6").Value = TextBox89.Value
.Range("B7").Value = TextBox90.Value
.Range("B8").Value = TextBox91.Value
.Range("B21").Value = TextBox92.Value
.Range("B22").Value = TextBox93.Value
.Range("B23").Value = TextBox94.Value
.Range("B24").Value = TextBox95.Value
.Range("B25").Value = TextBox96.Value
.Range("B26").Value = TextBox97.Value
.Range("B27").Value = TextBox98.Value
.Range("B28").Value = TextBox99.Value
.Range("B29").Value = TextBox100.Value
.Range("B30").Value = TextBox101.Value

.Range("C11").Value = TextBox130.Value
.Range("C12").Value = TextBox131.Value
.Range("C13").Value = TextBox132.Value
.Range("C14").Value = TextBox133.Value
.Range("C15").Value = TextBox134.Value
.Range("C16").Value = TextBox135.Value
.Range("C17").Value = TextBox136.Value
.Range("C18").Value = TextBox137.Value
.Range("C3").Value = TextBox115.Value
.Range("C4").Value = TextBox116.Value
.Range("C5").Value = TextBox117.Value
.Range("C6").Value = TextBox118.Value
.Range("C7").Value = TextBox119.Value
.Range("C8").Value = TextBox120.Value
.Range("C21").Value = TextBox121.Value
.Range("C22").Value = TextBox122.Value
.Range("C23").Value = TextBox123.Value
.Range("C24").Value = TextBox124.Value
.Range("C25").Value = TextBox125.Value
.Range("B26").Value = TextBox126.Value
.Range("C27").Value = TextBox127.Value
.Range("C28").Value = TextBox128.Value
.Range("C29").Value = TextBox129.Value
.Range("C30").Value = TextBox114.Value

Dim D As Byte
For D = 3 To 9
If .Range("A" & D) <> "" Then
.Range("D" & D) = TextBox113.Value
End If
Next D

For D = 11 To 19
If .Range("A" & D) <> "" Then
.Range("D" & D) = TextBox113.Value
End If
Next D

For D = 21 To 32
If .Range("A" & D) <> "" Then
.Range("D" & D) = TextBox113.Value
End If
Next D
    End With

  

End Sub


Encore merci pour ton aide précieuse sans laquelle je restais bloqué

Cordialement

Didier