sos code userform

marti018

XLDnaute Junior
bonjour le forum, bonjour à tous..
j'ouvre ce fil pour vous demander un peu d'aide:
je suis en train de créer un userform qui distribuerai les données que l'on lui donne vers différentes feuilles..le souci c'est que je suis novice sous vba alors je creuse sur le forum je trouve plein de donnée, certaines applicables d'autres pas...mais avant tout j'aimerai recueillir vos conseils car sans doute que je mis prends mal..je joins un fichier peu élaboré car je suis pas sur pas sur du tout du reste...mon userform est dans le compilateur.."j'y retourne!! "
(comme dirai le mec de la pub ovomaltine dans son champs de céréales)

merci d'avance à tous ...bonne fin d'aprem et bonne soirée

julien.:)
 

marti018

XLDnaute Junior
Re : sos code userform

je vais devoir partir, me deconnecter...........mais ce n'est pas de l'impolitesse, juste qu'il faut que j'aille chercher ma voiture chez le garagiste..je me reconnecterai dans la soirée..ma seule crainte c'est que vous ayez des questions à me poser pendant ce tps...sans doute d'ailleur ce temps là sera nécessaire à mon cerveau pour reprendre son souffle, car toute la journée à tenter de comprendre il en peut plus le pauvre il a pas l'habitude:eek:

bye à tous
 
Dernière édition:

marti018

XLDnaute Junior
Re : sos code userform

Bonjour le forum, le fil

j'ai relu mes messages passés, ce n'était pas clair, pas ordonnés, pire j'ai même répondu à côté de la plaque...mea culpa je reprends les choses en main:

Ce que je souhaiterai faire: en feuille 1, un usf qui me permettra de remplir trois feuilles différentes: francis, sylvain, Jérome

Ces feuilles sont présentent sur le fichier et elles sont semblables.(j’ai simplifié la mise en forme pour ne pas poser trop de problème)



Au final mon objectif est de comparez les différentes dépenses (% de main d'oeuvre, de Fourniture, part des différentes fournitures, des différentes main d'oeuvre et de mettre tout ça dans de beaux graph)

le usf me sert donc pour rentrer les données, dans ces différentes feuilles.
la difficulté c'est que certaines affaires (c'est assez fréquent) s'étalent sur plus d'une année.. j'aimerai alors que si la date de début est différente de la date de fin alors apparaissent les cases de répartition en fonction du nombre d'années
(pour cela je pensais me servir par exemple de "CB_pourc_mo1.visible=false")

de mon côté on m’a fourni des info sur les usf (merci Pierrot et Gorfael ) je vais donc tenter de mettre ça en place..

a++ bonne journée
Julien
 

Pièces jointes

  • suivi CA userform5 .zip
    43.1 KB · Affichages: 24

marti018

XLDnaute Junior
Re : sos code userform

bonjour le forum, le fil

merci Bebere de m'avoir montré la voie, je comprends mieux quantité de petites choses, malheuresement comme d'habitude aprés ça je m'enflame :eek: et je produit du code que ne marche pas!!!lol:D

enfin ça c'est ce que j'ai fait (je me suis attardé sur l'aspect visuel et pratique de l'usf, bon ça ne marche pas mais bon c'est pas grave lol maintenant je m'occupe des calculs)

PHP:
Dim Plg As Variant
Dim Nom As String, Valdeb As Variant, Valfin As Variant
Private Sub ComboBox1_Change()
Dim L As Integer, Nbre As Byte
Dim MonNumero As Variant, Plage As Range
'pour aller sur la bonne feuille
Nom = ComboBox1.Value

End Sub

Private Sub CommandButton1_Click()
Dim DerL As Integer, i As Byte
'si une textbox est vide fin procédure
For i = 1 To 12
If Controls("TextBox" & i).Value = "" Then
MsgBox "remplir toutes les textbox,svp"
Exit Sub
End If
Next i
'si nom est vide fin procédure
If Nom = "" Then Exit Sub
End If


With Sheets(Nom)
DerL = .Range("A65536").End(xlUp).Row + 1
.Range("A" & DerL).Value = Nom
.Range("B" & DerL).Value = TextBox1.Value
.Range("C" & DerL).Value = TextBox3.Value
.Range("D" & DerL).Value = TextBox4.Value
.Range("E" & DerL).Value = TextBox5.Value
.Range("W" & DerL).Value = TextBox6.Value
.Range("H" & DerL).Value = TextBox7.Value
.Range("J" & DerL).Value = TextBox8.Value
.Range("M" & DerL).Value = TextBox9.Value
.Range("O" & DerL).Value = TextBox10.Value
.Range("Q" & DerL).Value = TextBox11.Value
.Range("S" & DerL).Value = TextBox12.Value
.Range("U" & DerL).Value = TextBox13.Value

End With

'vide les textbox
For i = 1 To 13
Controls("TextBox" & i).Value = ""
Next i

End Sub

Private Sub CommandButton2_Click()
Unload UserForm1
End Sub


Private Sub Label19_Click()

End Sub

Private Sub TextBox2_Change()
'année de début de chantier
Valdeb = TextBox24.Value
'année de fin de chantier
Valfin = TextBox25.Value
'visuel:textbox et label invisibles
'affaire sur deux années
If Valfin - Valdeb = 1 Then
TextBox14.Visible = True
TextBox15.Visible = True
TextBox19.Visible = True
TextBox20.Visible = True
Label10.Visible = True
Label11.Visible = True
Label15.Visible = True
Label16.Visible = True
'affaire sur trois années
ElseIf Valfin - Valdeb = 2 Then
TextBox14.Visible = True
TextBox15.Visible = True
TextBox16.Visible = True
TextBox19.Visible = True
TextBox20.Visible = True
TextBox21.Visible = True
Label10.Visible = True
Label11.Visible = True
Label12.Visible = True
Label15.Visible = True
Label16.Visible = True
Label17.Visible = True
'affaire sur quatre années
ElseIf Valfin - Valdeb = 3 Then
TextBox14.Visible = True
TextBox15.Visible = True
TextBox16.Visible = True
TextBox17.Visible = True
TextBox19.Visible = True
TextBox20.Visible = True
TextBox21.Visible = True
TextBox22.Visible = True
Label10.Visible = True
Label11.Visible = True
Label12.Visible = True
Label13.Visible = True
Label15.Visible = True
Label16.Visible = True
Label17.Visible = True
Label18.Visible = True
'affaire sur cinq années
ElseIf Valfin - Valdeb = 4 Then
TextBox14.Visible = True
TextBox15.Visible = True
TextBox16.Visible = True
TextBox17.Visible = True
TextBox18.Visible = True
TextBox19.Visible = True
TextBox20.Visible = True
TextBox21.Visible = True
TextBox22.Visible = True
TextBox23.Visible = True
Label10.Visible = True
Label11.Visible = True
Label12.Visible = True
Label13.Visible = True
Label14.Visible = True
Label15.Visible = True
Label16.Visible = True
Label17.Visible = True
Label18.Visible = True
Label19.Visible = True
End If
End Sub

Private Sub UserForm_Initialize()
TextBox1.MaxLength = 4
texbox1.AutoTab = True
TextBox2.MaxLength = 4
texbox2.AutoTab = True
Dim Plg As Variant
Dim i As Byte
'masque les textbox et les label inutiles(pour l'instant)
For i = 14 To 23
Controls("textbox" & i).Visible = False
Next i
For i = 10 To 19
Controls("label" & i).Visible = False
Next i
With Sheets("liste") 'tri croissant des noms
.Range("A1").Sort Key1:=.Range("A1"), Order1:=xlAscending, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Plg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
ComboBox1.List = Plg

End Sub

à trés bientot je l'espère

Julien
 

Gorfael

XLDnaute Barbatruc
Re : sos code userform

salut marti018, et les autres

Code:
-----------------------------
If Valfin - Valdeb = 1 Then
-----------------------------
'affaire sur trois années
ElseIf Valfin - Valdeb = 2 Then
-----------------------------
'affaire sur quatre années
ElseIf Valfin - Valdeb = 3 Then
-----------------------------
'affaire sur cinq années
ElseIf Valfin - Valdeb = 4 Then
-----------------------------
End If
End Sub
peut être remplacé par
Code:
-----------------------------
select case (Valfin - Valdeb)
     case 1
-----------------------------
     case  2  'affaire sur trois années
-----------------------------
     case  3 'affaire sur quatre années
-----------------------------
     case  4 'affaire sur cinq années
-----------------------------
     case else ' toutes les autres valeurs
-----------------------------
End select
End Sub

A+
 

marti018

XLDnaute Junior
Re : sos code userform

Bonjour le forum, le fil..

merci Gorfael pour ta suggestion: je savais que select case existait mais ce que je n'avais pas compris c'est que la valeur aprés case était la valeur à rechercher..
donc désormait mon code à cette forme là:
PHP:
Dim Plg As Variant
Dim Nom As String, Valdeb As Variant, Valfin As Variant
Private Sub ComboBox1_Change()
Dim L As Integer, Nbre As Byte
Dim MonNumero As Variant, Plage As Range
'pour aller sur la bonne feuille
Nom = ComboBox1.Value

End Sub

Private Sub CommandButton1_Click()
Dim DerL As Integer, i As Byte
'si une textbox est vide fin procédure
For i = 1 To 12
If Controls("TextBox" & i).Value = "" Then
MsgBox "remplir toutes les textbox,svp"
Exit Sub
End If
Next i
'si nom est vide fin procédure
If Nom = "" Then Exit Sub
End If


With Sheets(Nom)
DerL = .Range("A65536").End(xlUp).Row + 1
.Range("A" & DerL).Value = Nom
.Range("B" & DerL).Value = TextBox1.Value
.Range("C" & DerL).Value = TextBox3.Value
.Range("D" & DerL).Value = TextBox4.Value
.Range("E" & DerL).Value = TextBox5.Value
.Range("W" & DerL).Value = TextBox6.Value
.Range("H" & DerL).Value = TextBox7.Value
.Range("J" & DerL).Value = TextBox8.Value
.Range("M" & DerL).Value = TextBox9.Value
.Range("O" & DerL).Value = TextBox10.Value
.Range("Q" & DerL).Value = TextBox11.Value
.Range("S" & DerL).Value = TextBox12.Value
.Range("U" & DerL).Value = TextBox13.Value

End With

'vide les textbox
For i = 1 To 13
Controls("TextBox" & i).Value = ""
Next i

End Sub

Private Sub CommandButton2_Click()
Unload UserForm1
End Sub


Private Sub Label19_Click()

End Sub

Private Sub TextBox2_Change()
'année de début de chantier
Valdeb = TextBox24.Value
'année de fin de chantier
Valfin = TextBox25.Value
'visuel:textbox et label invisibles
'affaire sur deux années
Select Case (Valfin - Valdeb)
     Case 1
TextBox14.Visible = True
TextBox15.Visible = True
TextBox19.Visible = True
TextBox20.Visible = True
Label10.Visible = True
Label11.Visible = True
Label15.Visible = True
Label16.Visible = True
     Case 2   'affaire sur trois années
TextBox14.Visible = True
TextBox15.Visible = True
TextBox16.Visible = True
TextBox19.Visible = True
TextBox20.Visible = True
TextBox21.Visible = True
Label10.Visible = True
Label11.Visible = True
Label12.Visible = True
Label15.Visible = True
Label16.Visible = True
Label17.Visible = True
     Case 3  'affaire sur quatre années
TextBox14.Visible = True
TextBox15.Visible = True
TextBox16.Visible = True
TextBox17.Visible = True
TextBox19.Visible = True
TextBox20.Visible = True
TextBox21.Visible = True
TextBox22.Visible = True
Label10.Visible = True
Label11.Visible = True
Label12.Visible = True
Label13.Visible = True
Label15.Visible = True
Label16.Visible = True
Label17.Visible = True
     Case 4  'affaire sur cinq années
TextBox14.Visible = True
TextBox15.Visible = True
TextBox16.Visible = True
TextBox17.Visible = True
TextBox18.Visible = True
TextBox19.Visible = True
TextBox20.Visible = True
TextBox21.Visible = True
TextBox22.Visible = True
TextBox23.Visible = True
Label10.Visible = True
Label11.Visible = True
Label12.Visible = True
Label13.Visible = True
Label14.Visible = True
Label15.Visible = True
Label16.Visible = True
Label17.Visible = True
Label18.Visible = True
Label19.Visible = True
     Case Else ' toutes les autres valeurs
End Select
End Sub

Private Sub UserForm_Initialize()
TextBox1.MaxLength = 4
texbox1.AutoTab = True
TextBox2.MaxLength = 4
texbox2.AutoTab = True
Dim Plg As Variant
Dim i As Byte
'masque les textbox et les label inutiles(pour l'instant)
For i = 14 To 23
Controls("textbox" & i).Visible = False
Next i
For i = 10 To 19
Controls("label" & i).Visible = False
Next i
With Sheets("liste") 'tri croissant des noms
.Range("A1").Sort Key1:=.Range("A1"), Order1:=xlAscending, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Plg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
ComboBox1.List = Plg

End Sub
lorsque je tente d'exécuter la formule par le biais du bouton implanté en feuille liste, j'ai alors un message d'erreur 424 ..

svp un petit coup de pouce...

bonne journée a++
 

Bebere

XLDnaute Barbatruc
Re : sos code userform

bonjour le fil

Marti 2 fautes

Private Sub UserForm_Initialize()
TextBox1.MaxLength = 4
'faute1
texbox1.AutoTab = True
TextBox2.MaxLength = 4
'faute2
texbox2.AutoTab = True
Dim Plg As Variant
Dim i As Byte
'masque les textbox et les label inutiles(pour l'instant)
For i = 14 To 23
Controls("textbox" & i).Visible = False
Next i
For i = 10 To 19
Controls("label" & i).Visible = False
Next i
With Sheets("liste") 'tri croissant des noms
.Range("A1").Sort Key1:=.Range("A1"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Plg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
ComboBox1.List = Plg

End Sub


Private Sub TextBox2_Change()
'année de début de chantier
'le contenu d'une textbox,c'est du texte
'pour du numérique,écrire comme suit
Valdeb = cdbl(TextBox24.Value)
'année de fin de chantier
Valfin = cdbl(TextBox25.Value)

'visuel:textbox et label invisibles
'affaire sur deux années
Select Case (Valfin - Valdeb)
 

marti018

XLDnaute Junior
Re : sos code userform

Bonsoir Bebere,
avant tout merci pour tes conseils...je comprends désormais que la valeur d'une textbox c'est du texte..donc ça ok merci

par contre ce que je ne comprends pas ce sont les deux erreur que tu me signale..: qu'est ce qui est est faux, autotab??

enfin voilà merci pour tout, à bientot je l'espère..
a++
 

marti018

XLDnaute Junior
Re : sos code userform

bonjour, le forum,le fil

je suis toujours bloqué, je ne vois toujours pas comment créer sur les feuilles autant de lignes qu'il y a d'année entre le début de l'affaire et la fin de l'affaire, ni même comment calculer les pourcentage pour chaque année..
si vous avez une idée je suis preneur..je post mon code ...
PHP:
Dim Plg As Variant
Dim Nom As String, Valdeb As Variant, Valfin As Variant
Private Sub ComboBox1_Change()
Dim L As Integer, Nbre As Byte
Dim MonNumero As Variant, Plage As Range
'pour aller sur la bonne feuille
Nom = ComboBox1.Value

End Sub

Private Sub CommandButton1_Click()
Dim DerL As Integer, i As Byte
'si une textbox est vide fin procédure
For i = 1 To 14
If Controls("TextBox" & i).Value = "" Then
MsgBox "remplir toutes les textbox,svp"
Exit Sub
End If
Next i
'si nom est vide fin procédure
If Nom = "" Then Exit Sub
End If
'année de début de chantier
Valdeb = CDbl(TextBox2.Value)
'année de fin de chantier
Valfin = CDbl(TextBox3.Value)
If Valdeb = Valfin Then
With Sheets(Nom)
DerL = .Range("A65536").End(xlUp).Row + 1
.Range("A" & DerL).Value = Nom
.Range("B" & DerL).Value = TextBox1.Value
.Range("C" & DerL).Value = TextBox3.Value
.Range("D" & DerL).Value = TextBox4.Value
.Range("E" & DerL).Value = TextBox5.Value
.Range("W" & DerL).Value = TextBox6.Value
.Range("H" & DerL).Value = TextBox7.Value
.Range("J" & DerL).Value = TextBox8.Value
.Range("M" & DerL).Value = TextBox9.Value
.Range("O" & DerL).Value = TextBox10.Value
.Range("Q" & DerL).Value = TextBox11.Value
.Range("S" & DerL).Value = TextBox12.Value
.Range("U" & DerL).Value = TextBox13.Value

End With
Else
End If
'vide les textbox
For i = 1 To 13
Controls("TextBox" & i).Value = ""
Next i

End Sub

Private Sub CommandButton2_Click()
Unload UserForm1
End Sub



Private Sub TextBox2_Change()
'année de début de chantier
Valdeb = CDbl(TextBox2.Value)
'année de fin de chantier
Valfin = CDbl(TextBox3.Value)
'visuel:textbox et label invisibles
'affaire sur deux années
Select Case (Valfin - Valdeb)
     Case 1
TextBox14.Visible = True
TextBox15.Visible = True
TextBox16.Visible = True
TextBox17.Visible = True
Label18.Visible = True
Label19.Visible = True
Label20.Visible = True
Label21.Visible = True
Label28.Visible = True
Label29.Visible = True
     Case 2   'affaire sur trois années
TextBox14.Visible = True
TextBox15.Visible = True
TextBox16.Visible = True
TextBox17.Visible = True
TextBox18.Visible = True
TextBox19.Visible = True
Label18.Visible = True
Label19.Visible = True
Label20.Visible = True
Label21.Visible = True
Label22.Visible = True
Label23.Visible = True
Label28.Visible = True
Label29.Visible = True
     Case 3  'affaire sur quatre années
TextBox14.Visible = True
TextBox15.Visible = True
TextBox16.Visible = True
TextBox17.Visible = True
TextBox18.Visible = True
TextBox19.Visible = True
TextBox20.Visible = True
TextBox21.Visible = True
Label18.Visible = True
Label19.Visible = True
Label20.Visible = True
Label21.Visible = True
Label22.Visible = True
Label23.Visible = True
Label17.Visible = True
Label28.Visible = True
Label29.Visible = True
     Case 4  'affaire sur cinq années
TextBox14.Visible = True
TextBox15.Visible = True
TextBox16.Visible = True
TextBox17.Visible = True
TextBox18.Visible = True
TextBox19.Visible = True
TextBox20.Visible = True
TextBox21.Visible = True
TextBox22.Visible = True
TextBox23.Visible = True
Label10.Visible = True
Label11.Visible = True
Label12.Visible = True
Label13.Visible = True
Label14.Visible = True
Label15.Visible = True
Label16.Visible = True
Label17.Visible = True
Label18.Visible = True
Label19.Visible = True
Label28.Visible = True
Label29.Visible = True
     Case Else ' toutes les autres valeurs
End Select
End Sub

Private Sub UserForm_Initialize()
TextBox2.MaxLength = 4
TextBox2.AutoTab = True
TextBox3.MaxLength = 4
TextBox3.AutoTab = True
Dim Plg As Variant
Dim i As Byte
'masque les textbox et les label inutiles(pour l'instant)
For i = 14 To 23
Controls("textbox" & i).Visible = False
Next i
For i = 18 To 29
Controls("label" & i).Visible = False
Next i
With Sheets("liste") 'tri croissant des noms
.Range("A1").Sort Key1:=.Range("A1"), Order1:=xlAscending, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Plg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
ComboBox1.List = Plg

End Sub

bonne journée, merci d'avance...
a++
 

Bebere

XLDnaute Barbatruc
Re : sos code userform

salut Marti


ce serait plus facile de mettre ton fichier avec le code
on ne sait plus ou tu en es
un bout de code pour te donner une idée
qui ne traitent que d'un cas,içi 3 ans
basé sur tes entrées de dates début et fin
Private Sub TextBox4_Change()
Dim diff As Variant
If Nom = "" Then Exit Sub
If TextBox3 = "" Then
MsgBox "entrer une année,svp"
TextBox3.SetFocus
Exit Sub
End If
If Len(TextBox4) <> 4 Then Exit Sub
diff = CDbl(TextBox4) - CDbl(TextBox3)
If diff = 3 Then
TextBox14 = "20" & "%"
TextBox15 = "60" & "%"
TextBox16 = "20" & "%"

With Sheets(Nom)
If .Range("A7").Value = "" Then
.Range("A7:A10") = CDbl(TextBox3)
Else: .Range("A" & .Range("a65536").End(xlUp).Row & ":A" & .Range("a65536").End(xlUp).Row + diff) = CDbl(TextBox3)
End If
.Range("A" & .Range("a65536").End(xlUp).Row & ":A" & .Range("a65536").End(xlUp).Row + diff) = CDbl(TextBox3)+1
.Range("A" & .Range("a65536").End(xlUp).Row & ":A" & .Range("a65536").End(xlUp).Row + diff) = CDbl(TextBox3)+2

End With

à bientôt
 

marti018

XLDnaute Junior
Re : sos code userform

Bonsoir Bebere,
merci pour ta réponse, je joins tout de suite mon fichier...

je vais m'atteler à comprendre tout ce que tu utilises...
merci beaucoup

a++



ps: le pc familial a planté hier soir je n'ai donc pas pu envoyer ce message
 

Pièces jointes

  • userform5Martigffyiiyr.zip
    43.4 KB · Affichages: 32

marti018

XLDnaute Junior
Re : sos code userform

bonjour le forum, le fil..

Bebere je viens de lire le code que tu as posté et j'avoue mon ignorance, à partir de là:
PHP:
If diff = 3 Then
TextBox14 = "20" & "%"
TextBox15 = "60" & "%"
TextBox16 = "20" & "%"

With Sheets(Nom)
If .Range("A7").Value = "" Then
.Range("A7:A10") = CDbl(TextBox3)
Else: .Range("A" & .Range("a65536").End(xlUp).Row & ":A" & .Range("a65536").End(xlUp).Row + diff) = CDbl(TextBox3)
End If
.Range("A" & .Range("a65536").End(xlUp).Row & ":A" & .Range("a65536").End(xlUp).Row + diff) = CDbl(TextBox3) + 1
.Range("A" & .Range("a65536").End(xlUp).Row & ":A" & .Range("a65536").End(xlUp).Row + diff) = CDbl(TextBox3) + 2
je ne sais plus ce que cela signifie...en particulier....
PHP:
TextBox14 = "20" & "%"
TextBox15 = "60" & "%"
TextBox16 = "20" & "%"
je continue de creuser...merci
a++
 

Discussions similaires

Réponses
39
Affichages
3 K
  • Question
Microsoft 365 Userform
Réponses
8
Affichages
880
Réponses
13
Affichages
778

Statistiques des forums

Discussions
312 695
Messages
2 091 047
Membres
104 746
dernier inscrit
Eva_M