IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Création d'onglets vba [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2015
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2015
    Messages : 110
    Par défaut Création d'onglets vba
    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

    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
     
     
    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 Sub

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour cbredeche, bonjour le forum,

    Je pense que le problème venait de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Worksheets(ThisWorkbook.Sheets.Count)
    le code ci-dessous devrait fonctionner (non testé). Regarde comment le code est allégé en utilisant la propriété [Tag] des contrôles... :
    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
    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

  3. #3
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2015
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2015
    Messages : 110
    Par défaut
    Merci par contre je n'ai jamais utilisé la propriété de tag cela me parait génial
    comment mon code devrait-il être

    'propriété TAG de TextBoxobjet : C/B3

    encore merci de ton aide

  4. #4
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Re,

    Dans Visual Basic Editor,
    - tu clique sur un contrôle (TextBoxobjet par exemple)
    - Une fois sélectionné vas dans la propriété [Tag] dans la Fenêtres des Propriétés.
    - Là tu écris la colonne où va être renvoyée la valeur de ce contrôle dans l'onglet Recap = C, suivit d'un slash = / suivit de l'adresse où va être renvoyée la valeur de ce contrôle dans l'onglet OD = B3.
    - Ce qui fait : C/B3.

    Tu fais pareil pour tous les contrôles à renseigner...
    C'est juste pour alléger le code mais tu peux aussi garder le tien et juste modifier avec l'onglet destination OD.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. DEMANDE D'AIDE code vba
    Par amiinaa dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 07/12/2016, 18h16
  2. Aide code VBA
    Par auxboman dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 23/03/2010, 20h43
  3. Aide Code VBA
    Par Dan21 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 15/02/2010, 17h07
  4. Aide code VBA, fonction SubdatasheetExpanded
    Par Fredo67 dans le forum VBA Access
    Réponses: 2
    Dernier message: 21/02/2008, 10h28
  5. demande d'aide sur VBA
    Par aralth dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/07/2007, 05h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo