XL 2013 probleme bouton valide et propriete [TAG]

  • Initiateur de la discussion Initiateur de la discussion bredeche
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

bredeche

XLDnaute Occasionnel
bonjour
j'ai un problème dans mon code
merci de votre aide
ci joints en plus mon fichier

VB:
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
'propriété TAG de TextBoxobjet : C/B3
'propriété TAG de ComboBox4 : Y/G6
'propriété TAG de TextBoxfiche : Z/A6
'propriété TAG de TextBoxdate : AA/B6
'propriété TAG de TextBoximputation : AB/C6
'etc.
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...
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
 

Pièces jointes

Bonjour
plusieurs choses:
1) inutile de faire plusieurs posts pour le meme sujet: meme si tu as plusieurs soucis, il vaut mieux les mettre dans le meme post, puisuqu'il s'agit du meme fichier
2) justement.. le fichier, il vaut mieux le mettre dès le début.. ca évite des posts sans réponse
3) le code que tu as mis dans ce post, ne semble pas etre le meme que celui que je vois dans ton fichier...
4) c'est quoi le problème exactement?

au hasard.. ca plante quand le code essaie de renommer la feuille "trame(2)"
le nom utilisé pour renommé est pris en B10.. mais je ne vois nulle part le moment ou tu mets quelque chose en B10
 
avec ton code complet..
VB:
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)
Dim NomFeuille As String
 
With Sheets("Recap")
    NewLig = Application.Max(10, .Range("A" & Rows.Count).End(xlUp).Row + 1)
'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

        NomFeuille = .Range("B" & NewLig).Value
    
    .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*
With OD
    .Name = NomFeuille    '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
End With

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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
599
Réponses
3
Affichages
1 K
Réponses
14
Affichages
1 K
Retour