Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 probleme bouton valide et propriete [TAG]

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

  • ger 2.xlsm
    147.8 KB · Affichages: 7

vgendron

XLDnaute Barbatruc
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
 

vgendron

XLDnaute Barbatruc
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
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…