Bonjour à tous,

Cela fait quelques temps que je n'ai pas eu recourt au forum, j'essais de me débrouiller seul, mais depuis quelques jour je bute sur un problème: tant bien que mal j'ai réussis à faire fonctionner plusieurs boucles imbriquées, sauf une qui ne fonctionne qu'une fois.

Voilà le problème :
Sur un UserForm j'ai des listbox et des textbox dont je veux écrire les valeurs sur une feuille excel
voici une capture d'écran



J'ai trois catégories de listbox personnels, fournitures et matériels (ordre dans le code) les listbox = désignation et les textbox qui les accompagnes représente les quantités

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
Dim stcolonne As Long
 Dim z As Long
Dim Q As Double
Dim A
Dim Lig As Long
 For i = 11 To 34 'les listbox
 For z = 115 To 137 'les textbox
        Select Case i
        Case 11 To 16
           Select Case z
           Case 115 To 120
 
            A = Me("ListBox" & i).Text 'valeur de la listbox
 
            stcolonne = Colonne 'je  stock la valeur de la colonne trouvé précédament dans le code car dans la zone graphique du diagramme j'écrit des 1 qui vont me servir de condition dans mes boucles et pour cela j'ai besoin de la colonne de départ de la tâche
 
            If Application.CountIf(Range("A39:A45"), "=" & A) <> 0 And A <> "" And Me.Controls("TextBox" & z).Value <> "" Then
'si A est déjà écrit sur la feuille, je recherche la ligne ou il est écrit
                Ligne = Application.Match(A, Columns(1), 0)
               Q = CDbl(Me.Controls("TextBox" & z).Value) ' J'incrémente la valeur de la TextBox qui correspond à la listbox du dessus
                compteur = 0
                Lig = Range("A36").End(xlUp).Row ' je cherche la ligne ou la tâche est écrite pour vérifier les cellule qui ont des 1 et je fais une boucle pour écrire les quantités
               While Cells(Lig, Colonne) = 1 And compteur <= CDbl(TextBox113.Value)
Cells(Ligne, Colonne).Value = Q
compteur = compteur + 1
Colonne = Colonne + 2
Wend
Colonne = stcolonne
                ElseIf Application.CountIf(Range("A39:A45"), "=" & A) = 0 And A <> "" And Me.Controls("TextBox" & z).Value <> "" Then
'c'est la même chose qu'en haut mais cette fois-ci A n'est pas sur la feuille et je dois l'écrire
                Range("A45").End(xlUp).Offset(1, 0) = A
                Ligne = Range("A45").End(xlUp).Row
               Q = CDbl(Me.Controls("TextBox" & z).Value)
                compteur = 0
                Lig = Range("A36").End(xlUp).Row
               While Cells(Lig, Colonne) = 1 And compteur <= CDbl(TextBox113.Value)
Cells(Ligne, Colonne).Value = Q
compteur = compteur + 1
Colonne = Colonne + 2
Wend
            End If
 
          End Select
          Le code est répété 3 fois pour les trois plage de la feuille
        Case 17 To 26
 
           Select Case z
           Case 121 To 129
            A = Me("ListBox" & i).Text
            Colonne = stcolonne
            If Application.CountIf(Range("A87:A128"), "=" & A) <> 0 And A <> "" And A <> "" And Me.Controls("TextBox" & z).Value <> "" Then
                Ligne = Application.Match(A, Columns(1), 0)
               Q = CDbl(Me.Controls("TextBox" & z).Value)
               Q = Q / TextBox113.Value
                compteur = 0
                Lig = Range("A36").End(xlUp).Row
               While Cells(Lig, Colonne) = 1 And compteur <= CDbl(TextBox113.Value)
Cells(Ligne, Colonne).Value = Q
compteur = compteur + 1
Colonne = Colonne + 2
Wend
                ElseIf Application.CountIf(Range("A87:A128"), "=" & A) = 0 And A <> "" And Me.Controls("TextBox" & z).Value <> "" Then
                Range("A128").End(xlUp).Offset(1, 0) = A
                Colonne = stcolonne
                Ligne = Range("A128").End(xlUp).Row
               Q = CDbl(Me.Controls("TextBox" & z).Value)
               Q = Q / TextBox113.Value
                compteur = 0
                Lig = Range("A36").End(xlUp).Row
               While Cells(Lig, Colonne) = 1 And compteur <= CDbl(TextBox113.Value)
Cells(Ligne, Colonne).Value = Q
compteur = compteur + 1
Colonne = Colonne + 2
Wend
            End If
          End Select
 
                Case 27 To 34
                   Select Case z
           Case 130 To 137
            A = Me("ListBox" & i).Text
            Colonne = stcolonne
              If Application.CountIf(Range("A49:A83"), "=" & A) <> 0 And A <> "" And Me.Controls("TextBox" & z).Value <> "" Then
                Ligne = Application.Match(A, Columns(1), 0)
                Q = CDbl(Me.Controls("TextBox" & z).Value)
                compteur = 0
                Lig = Range("A36").End(xlUp).Row
                While Cells(Lig, Colonne) = 1 And compteur <= CDbl(TextBox113.Value)
Cells(Ligne, Colonne).Value = Q
compteur = compteur + 1
Colonne = Colonne + 2
Wend
                ElseIf Application.CountIf(Range("A49:A83"), "=" & A) = 0 And A <> "" And Me.Controls("TextBox" & z).Value <> "" Then
                Range("A83").End(xlUp).Offset(1, 0) = A
                Colonne = stcolonne
               Ligne = Range("A83").End(xlUp).Row
               Q = CDbl(Me.Controls("TextBox" & z).Value)
               compteur = 0
                Lig = Range("A36").End(xlUp).Row
               While Cells(Lig, Colonne) = 1 And compteur <= CDbl(TextBox113.Value)
Cells(Ligne, Colonne).Value = Q
compteur = compteur + 1
Colonne = Colonne + 2
Wend
            End If
          End Select
      End Select
    Next z
   Next i
Par exemple si je sélectionne sur l'userform 1 chef de chantier puis 2 ouvriers
le code m'écrit bien chef de chantier et sur la ligne du dessous ouvrier, il impute aussi dans la zone graphique les quantité du chef de chantier sur sa durée d'utilisation, mais oublie totalement les ouvriers, les fournitures et les quantités ; en fait la boucle While ne fonctionne qu'une seule fois et il y a certainement quelque chose que je n'arrive pas a comprendre

J'espère avoir été explicite mais mon projet est une véritable usine à gaz et un peu compliquer comme mon esprit ; j'espère quand même que quelqu'un pourra m'aider car je suis vraiment bloquer

Je mets le code complet du bouton au cas ou le problème vienne de la première partie du code, mais celle-ci fonctionne bien grâce à l'aide précédente du forum

Merci pour votre aide

Cordialement

Didier