Code
bonjour mon problème est sur la création d'onglet la macro me produit 3 onglet et mes données ne s'enregistrent pas dans la fiche et mon second problème est quand je réalise la deuxième fiche
ci dessous mon code
merci de votre aide
je peux vous joindre mon fichier sur demande
cordialement
Private Sub CommandButton2_Click() 'Bouton VALIDER
Dim NewLig As Long
Dim c As Range
With Sheets("Recap")
NewLig = Application.Max(10, .Range("A" & Rows.Count).End(xlUp).Row + 1)
.Range("A" & NewLig).Value = Application.WorksheetFunction.Max(Range("A:A")) + 1
.Range("C" & NewLig).Value = TextBoxobjet
.Range("Y" & NewLig).Value = ComboBox4
.Range("Z" & NewLig).Value = TextBoxfiche
.Range("AA" & NewLig).Value = CDate(TextBoxdate)
.Range("AB" & NewLig).Value = TextBoximputation
.Range("AC" & NewLig).Value = TextBoxlocalisation
.Range("AD" & NewLig).Value = ComboBox1
.Range("D" & NewLig).Value = ComboBox1
.Range("AE" & NewLig).Value = TextBoxannée
.Range("AF" & NewLig).Value = CheckBox1
.Range("AG" & NewLig).Value = CheckBox2
.Range("AH" & NewLig).Value = CheckBox3
.Range("AI" & NewLig).Value = TextBoxconstat
.Range("AJ" & NewLig).Value = TextBoxrisque
.Range("AK" & NewLig).Value = TextBoxorigine
.Range("AL" & NewLig).Value = TextBoxconservatoires
.Range("AM" & NewLig).Value = TextBoxtravaux
.Range("AN" & NewLig).Value = TextBoxobservation
.Range("AO" & NewLig).Value = TextBoxconstructeur
.Range("AP" & NewLig).Value = TextBoxdureevie1
.Range("AQ" & NewLig).Value = TextBoxdureevie2
.Range("AR" & NewLig).Value = TextBoximage
End With
Application.ScreenUpdating = False
'On crée les onglets qui sont listés à partir de la cellule
'A2 de l'onglet nommé Liste
Set c = Worksheets("RECAP").Range("B10") 'cellule de départ
'on copie le modèle en dernier
Worksheets("TRAME").Copy After:=Worksheets(ThisWorkbook.Sheets.Count)
With Worksheets(ThisWorkbook.Sheets.Count) 'avec l'onglet créé
.Name = c.Value 'je renome
'Je remplit mon modèle comme je veut...
.Range("B3") = TextBoxobjet
.Range("A6") = TextBoxfiche
.Range("B6") = TextBoxdate
.Range("C6") = TextBoximputation
.Range("D6") = TextBoxlocalisation
.Range("E6") = ComboBox1
.Range("F6") = TextBoxannée
.Range("G6") = ComboBox4
.Range("A9") = TextBoxconstat
.Range("E11") = CheckBox1
.Range("E12") = CheckBox2
.Range("E13") = CheckBox3
.Range("A16") = TextBoxrisque
.Range("A21") = TextBoxorigine
.Range("A26") = TextBoxconservatoires
.Range("A30") = TextBoxtravaux
.Range("A35") = TextBoxobservation
.Range("H15") = TextBoxconstructeur
.Range("K17") = TextBoxdureevie1
.Range("K18") = TextBoxdureevie2
.Range("H20") = TextBoximage
End With
Application.ScreenUpdating = True
Unload UserForm1
End SubBonjour,
Pas la peine d'attendre qu'on te demande : Joint directement le fichier...
Une longue macro incompréhensible est inutile ! Il suffit de dire que ton bouton valider ne marche pas.
A+
bonjour je prend bien note de vos conseil
ci-joins Mon fichier
mon bouton valide ne fonctionne pas correctement
Bonjours,
J'ai vraiment du mal a me repérer dans votre document. Vous devriez vraiment nommer tout vos bouton et fonction pour simplifier la lisibilités.
J'ai cependant observer que certaine de vos variable n'exister pour ou était mal déclarer comme TextBoxdate. Et comme vos bouton et label ne sont pas nommer je ne les repère pas dans votre userform.
Bonjours,
J'ai vraiment du mal a me repérer dans votre document. Vous devriez vraiment nommer tout vos bouton et fonction pour simplifier la lisibilités.
J'ai cependant observer que certaine de vos variable n'exister pour ou était mal déclarer comme TextBoxdate. Et comme vos bouton et label ne sont pas nommer je ne les repère pas dans votre userform.
j'ai modifier a en utilisant la propriété tag enfin je pense mais cela fonctionne pas
Private Sub CommandButton2_Click() 'Bouton VALIDER
Dim NewLig As Long
Dim c As Range
Dim CTRL As Control 'déclare la variable CTRL (ConTRôle)
Dim COL As String 'déclare la variable COL (COLonne)
Dim AD As String 'déclare la variable AD (ADresse)
Dim OD As Worksheet 'déclare la variable OD(Onglet Destination)
'il faut définir la propriété TAG tous les contrôles qui renvoient leur valeur dans les onglets : Colonne de l'onglet Recap / Adresse de la copie l'onglet Trame
.Range("C" & NewLig).Value = TextBoxobjet
.Range("Y" & NewLig).Value = ComboBox4
.Range("Z" & NewLig).Value = TextBoxfiche
.Range("AA" & NewLig).Value = CDate(TextBoxdate)
.Range("AB" & NewLig).Value = TextBoximputation
.Range("AC" & NewLig).Value = TextBoxlocalisation
.Range("AD" & NewLig).Value = ComboBox1
.Range("D" & NewLig).Value = ComboBox1
.Range("AE" & NewLig).Value = TextBoxannée
.Range("AF" & NewLig).Value = CheckBox1
.Range("AG" & NewLig).Value = CheckBox2
.Range("AH" & NewLig).Value = CheckBox3
.Range("AI" & NewLig).Value = TextBoxconstat
.Range("AJ" & NewLig).Value = TextBoxrisque
.Range("AK" & NewLig).Value = TextBoxorigine
.Range("AL" & NewLig).Value = TextBoxconservatoires
.Range("AM" & NewLig).Value = TextBoxtravaux
.Range("AN" & NewLig).Value = TextBoxobservation
.Range("AO" & NewLig).Value = TextBoxconstructeur
.Range("AP" & NewLig).Value = TextBoxdureevie1
.Range("AQ" & NewLig).Value = TextBoxdureevie2
.Range("AR" & NewLig).Value = TextBoximage
With Sheets("Recap")
NewLig = Application.Max(10, .Range("A" & Rows.Count).End(xlUp).Row + 1)
.Range("A" & NewLig).Value = Application.WorksheetFunction.Max(Range("A:A")) + 1
For Each CTRL In Me.Controls 'boucle sur tous les contrôles CTRL de l'UserForm
If CTRL.Tag <> "" Then 'condition : si la propriété TAG du contrôle n'est pas vide
COL = Split(CTRL.Tag, "/")(0) 'définit la colonne COL (texte avant le slash (/)
.Cells(NewLig, COL).Value = CTRL.Value 'renvoie la valeur du contrôle dans la cellule ligne Newlig, colonne Col de l'onglet Recap
End If 'fin de la condition
Next CTRL 'prochaine contrôle de la boucle
End With
Application.ScreenUpdating = False
'On crée les onglets qui sont listés à partir de la cellule
'A2 de l'onglet nommé Liste
Set c = Worksheets("RECAP").Range("B10") 'cellule de départ
'on copie le modèle en dernier
Worksheets("TRAME").Copy After:=Worksheets(ThisWorkbook.Sheets.Count)
Set OD = ActiveSheet 'définit l'onglet OD
OD.Name = c.Value 'je renome
'Je remplit mon modèle comme je veux...
.Range("B3") = TextBoxobjet
.Range("A6") = TextBoxfiche
.Range("B6") = TextBoxdate
.Range("C6") = TextBoximputation
.Range("D6") = TextBoxlocalisation
.Range("E6") = ComboBox1
.Range("F6") = TextBoxannée
.Range("G6") = ComboBox4
.Range("A9") = TextBoxconstat
.Range("E11") = CheckBox1
.Range("E12") = CheckBox2
.Range("E13") = CheckBox3
.Range("A16") = TextBoxrisque
.Range("A21") = TextBoxorigine
.Range("A26") = TextBoxconservatoires
.Range("A30") = TextBoxtravaux
.Range("A35") = TextBoxobservation
.Range("H15") = TextBoxconstructeur
.Range("K17") = TextBoxdureevie1
.Range("K18") = TextBoxdureevie2
.Range("H20") = TextBoximage
For Each CTRL In Me.Controls 'boucle sur tous les contrôles CTRL de l'UserForm
If CTRL.Tag <> "" Then 'condition : si la propriété TAG du contrôle n'est pas vide
AD = Split(CTRL.Tag, "/")(1) 'définit l'adresse AD (texte après le slash (/)
OD.Range(AD).Value = CTRL.Value 'renvoie la valeur du contrôle dans la cellule ayant AD comme adress de l'onglet OD
End If 'fin de la condition
Next CTRL 'prochaine contrôle de la boucle
Application.ScreenUpdating = True
Unload UserForm1
End Sub
Je peine un peu à comprendre ce qui cloche...
Essaie comme ça et dis moi:
Private Sub CommandButton2_Click() 'Bouton VALIDER
Dim NewLig As Long
With Sheets("Recap")
NewLig = Application.Max(10, .Range("A" & Rows.Count).End(xlUp).Row + 1)
.Range("A" & NewLig).Value = Application.WorksheetFunction.Max(Range("A:A")) + 1
.Range("C" & NewLig).Value = TextBoxobjet
.Range("Y" & NewLig).Value = ComboBox4
.Range("Z" & NewLig).Value = TextBoxfiche
.Range("AA" & NewLig).Value = CDate(TextBoxdate)
.Range("AB" & NewLig).Value = TextBoximputation
.Range("AC" & NewLig).Value = TextBoxlocalisation
.Range("AD" & NewLig).Value = ComboBox1
.Range("D" & NewLig).Value = ComboBox1
.Range("AE" & NewLig).Value = TextBoxannée
.Range("AF" & NewLig).Value = CheckBox1
.Range("AG" & NewLig).Value = CheckBox2
.Range("AH" & NewLig).Value = CheckBox3
.Range("AI" & NewLig).Value = TextBoxconstat
.Range("AJ" & NewLig).Value = TextBoxrisque
.Range("AK" & NewLig).Value = TextBoxorigine
.Range("AL" & NewLig).Value = TextBoxconservatoires
.Range("AM" & NewLig).Value = TextBoxtravaux
.Range("AN" & NewLig).Value = TextBoxobservation
.Range("AO" & NewLig).Value = TextBoxconstructeur
.Range("AP" & NewLig).Value = TextBoxdureevie1
.Range("AQ" & NewLig).Value = TextBoxdureevie2
.Range("AR" & NewLig).Value = TextBoximage
End With
Application.ScreenUpdating = False
'On crée les onglets
'on copie le modèle en dernier
Worksheets("TRAME").Copy After:=Worksheets(ThisWorkbook.Sheets.Count)
With ActiveSheet
.Name = Worksheets("RECAP").Range("B" & NewLig) 'je renome
'Je remplit mon modèle comme je veut...
.Range("B3") = TextBoxobjet
.Range("A6") = TextBoxfiche
.Range("B6") = TextBoxdate
.Range("C6") = TextBoximputation
.Range("D6") = TextBoxlocalisation
.Range("E6") = ComboBox1
.Range("F6") = TextBoxannée
.Range("G6") = ComboBox4
.Range("A9") = TextBoxconstat
.Range("E11") = CheckBox1
.Range("E12") = CheckBox2
.Range("E13") = CheckBox3
.Range("A16") = TextBoxrisque
.Range("A21") = TextBoxorigine
.Range("A26") = TextBoxconservatoires
.Range("A30") = TextBoxtravaux
.Range("A35") = TextBoxobservation
.Range("H15") = TextBoxconstructeur
.Range("K17") = TextBoxdureevie1
.Range("K18") = TextBoxdureevie2
.Range("H20") = TextBoximage
End With
Application.ScreenUpdating = True
Unload UserForm1
End SubA+