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 :

Remplissage tableau structuré VBA via un Userform


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Amélioration Continue
    Inscrit en
    Novembre 2019
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amélioration Continue
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2019
    Messages : 46
    Par défaut Remplissage tableau structuré VBA via un Userform
    Bonsoir à tous,
    Je reviens vers vous car j'ai un problème avec un tableau structuré. Je souhaite le afire remplir a partir d'un Userform cependant les valeurs se placent sur les lignes en dessous du tableau.
    Auriez vous une idée du problème :
    ci joint le code utilisé:
    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
    Dim O As Worksheet 'd?clare la variable O (Onglet)
    Dim TVA As Variant 'd?clare la variable TV (Tableau des Valeurs)
     
     
    no_ligne = Worksheets("BDD").Range("A65536").End(xlUp).Row + 1  'no_ligne = N? de ligne de la derni?re cellule non vide de la colonne +1
     
     
    Set O = Worksheets("BDD") 'd?finit l'onglet O
           TVA = O.Range("A1").CurrentRegion 'd?finit le tableau des valeurs TV
     
     
                If CheckBoxInterne.Value = True Then
                Worksheets("BDD").Cells(no_ligne, 11) = 1
                End If
                If CheckBoxReclamation.Value = True Then
                Worksheets("BDD").Cells(no_ligne, 12) = 1
                End If
                If CheckBoxRetourClient.Value = True Then
                Worksheets("BDD").Cells(no_ligne, 13) = 1
                End If
     
        LI = Responsable_1.ListBox1
        With Sheets("DATA")
        Set Plage = .Range("G2:G" & [G65536].End(xlUp).Row)
        For Each Cel In Plage
        If Cel.Value = LI Then L = Cel.Row
        Next Cel
            Worksheets("BDD").Cells(no_ligne, 1) = .Cells(L, "A").Value
            Worksheets("BDD").Cells(no_ligne, 3) = .Cells(L, "C").Value
            Worksheets("BDD").Cells(no_ligne, 5) = .Cells(L, "E").Value
     
            Unload Me
     
            Unload Responsable_1
            Responsable_1.Show
     
     
    End With
     
    End Sub

    Merci d'avance ,

    n'hésitez pas a me demander le fichier si nécessaire


    Bonne soirée et bonne année!!

  2. #2
    Membre averti
    Homme Profil pro
    Amélioration Continue
    Inscrit en
    Novembre 2019
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amélioration Continue
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2019
    Messages : 46
    Par défaut
    Ci-joint vous retrouverez le fichier Excel.
    Pour créer des lignes dans la feuille BDD. Utilisez le bouton3 de la feuille DATA => double cliquez sur une ligne de la listbox et appuyer sur "validation BC ".

    Merci d'avance.
    Fichiers attachés Fichiers attachés

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Un tableau structuré en VBA est un objet ListObject donc pourquoi ces lignes ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    no_ligne = Worksheets("BDD").Range("A65536").End(xlUp).Row + 1  'no_ligne = N? de ligne de la derni?re cellule non vide de la colonne +1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set O = Worksheets("BDD") 'd?finit l'onglet O
     TVA = O.Range("A1").CurrentRegion 'd?finit le tableau des valeurs TV
    Je pense que la lecture de ce tutoriel vous apportera déjà un éclaircissement Excel: Les tables de données en VBA
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre averti
    Homme Profil pro
    Amélioration Continue
    Inscrit en
    Novembre 2019
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amélioration Continue
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2019
    Messages : 46
    Par défaut
    Bonsoir,
    Merci pour votre réponse réactive. ces codes ont parfaitement fonctionnés pour mes autres programmes. C'est la première fois que j'ai un tel problème.

  5. #5
    Membre averti
    Homme Profil pro
    Amélioration Continue
    Inscrit en
    Novembre 2019
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amélioration Continue
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2019
    Messages : 46
    Par défaut
    Malheureusement votre lien ne m'a pas aidé pour mon problème.

    merci.

  6. #6
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 549

  7. #7
    Membre averti
    Homme Profil pro
    Amélioration Continue
    Inscrit en
    Novembre 2019
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amélioration Continue
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2019
    Messages : 46
    Par défaut
    Bonjour,

    Merci beaucoup pour ce tuto, je n'ai pas réussi a faire fonctionner les userform du tuto avec le fichier lié au tuto.
    Je ne vous caches pas que j'ai pas vraiment compris les différents codes pour pouvoir écrire de l'userform au tableau.

    Merci quand même.

    Petite question supplémentaire, une fois le programme finit, j'aimerai que mes userforms n'écrivent plus dans le même fichier excel mais dans une base access. est-il préférable de garder des tableaux structurés ou de passer en lignes normalesou est-ce tout simplement pareil pour exporter dans une base extérieur?
    Merci d'avance.

  8. #8
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 022
    Par défaut
    Salut

    Il y a deux contributions récentes qui peuvent t'aider à réaliser ce que tu souhaites, celle de Pierre Fauconnier et de moi-même.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  9. #9
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 549
    Par défaut
    Bonjour

    As-tu bien supprimé l'extension txt du fichier comme indiqué ?

    Si tu crées un bouton appelant ShowCityForm ou ShowContactForm tu pourras voir le fonctionnement.

    Il utilise un module de classe donc c'est un exemple très élaboré.

    Le 1er lien donné https://fauconnier.developpez.com/tu...structuresvba/
    explique qu'on ne doit pas manipuler Tableau structuré comme une plage de cellule et explique notamment au III-B-5 le modèle objet du Listobject

    Un ListObjet est proche d'une table de BD : dans Access tu n'utilises pas des positions topologiques pour gérer les tables, les enregistrements ni les champs.
    Eh bien bien c'est pareil. On oublie donc comme indiqué par Philippe Tulliez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    no_ligne = Worksheets("BDD").Range("A65536").End(xlUp).Row + 1
    Pour chercher si un NUM_BC existe tu peux utiliser Find
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Set BC_N = Range("Tableau1[Num_BC]").Find(What:=numBC, LookIn:=xlFormulas, LookAt _
            :=xlPart, MatchCase:=False, SearchFormat:=False)
        If Not BC_N Is Nothing Then
            a = MsgBox("Le BC est déjà enregistré !", vbCritical + vbOKCancel, "ERREUR") 'on affiche un message ou l'utilisateur repond par OK ou annuler
    Tu peux ajouter une ligne au tableau et la remplir
    soit ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    With Worksheets("DATA").ListObjects("Tableau1")
                Set y = .ListRows.Add
                With y.Range.Cells(1, 1)
                    .Offset(0, 0) = LabelBC.Caption
                    .Offset(0, 2) = TextBoxInitRed
                    .Offset(0, 4) = Section
                End With
            End With
    Soit en utilisant les nom des colonnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With Worksheets("DATA").ListObjects("Tableau1")
                Set y = .ListRows.Add
                Z = y.Range.Row
                .ListColumns("Num_BC").Range.Cells(Z, 1) = LabelBC.Caption
                .ListColumns("REDACTEUR").Range.Cells(Z, 1) = TextBoxInitRed
                .ListColumns("SECTION").Range.Cells(Z, 1) = Section
            End With
    En ayant une gestion homogène des noms d'objets du formulaire et des titres du tableaux, cela peux être très lisible...

    En ce qui concerne Access, je trouve cela tordu d'alimenter une base Access par des userform Excel. Il y a tout ce qu'il faut dans Access.

  10. #10
    Membre averti
    Homme Profil pro
    Amélioration Continue
    Inscrit en
    Novembre 2019
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amélioration Continue
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2019
    Messages : 46
    Par défaut
    Bonsoir Chris,

    Merci beaucoup pour ta réponse très détaillé, dès demain matin je vais réessayer le programme du tuto et essayer de rajouter les lignes à mon programme.
    Concernant le lien avec Access. Je souhaitais passer par un userform excel car mon programme sera utilisé par plusieurs utilisateurs en même temps. Je vraiment débutant dans la programmation et les bases de données. Après il existe surement d'autres solutions pour permettre l'écrire sur une base de donnée en simultanée.

    Bonne soirée et bonne année à tous !

  11. #11
    Membre averti
    Homme Profil pro
    Amélioration Continue
    Inscrit en
    Novembre 2019
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amélioration Continue
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2019
    Messages : 46
    Par défaut
    Citation Envoyé par Qwazerty Voir le message
    Salut

    Il y a deux contributions récentes qui peuvent t'aider à réaliser ce que tu souhaites, celle de Pierre Fauconnier et de moi-même.

    ++
    Qwaz
    Merci Qwazerty je viens de lire ta contribution , cela va bien m'aider pour l'avancement de mon projet.

  12. #12
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 022
    Par défaut
    Citation Envoyé par Jeremy.fuego Voir le message
    mon programme sera utilisé par plusieurs utilisateurs en même temps.
    Oulala, Excel + Base de donnée + utilisation simultané... Bon courage
    Je serais toi je changerais rapidement mon fusil d'épaule, surtout si tu débutes.
    Pas moyen d'utiliser Access?

    A minima il te faudrait utiliser un base Access et la "nourrir" via Excel mais c'est plus la même gâche
    Un début de réflexion sur le sujet

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  13. #13
    Membre averti
    Homme Profil pro
    Amélioration Continue
    Inscrit en
    Novembre 2019
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amélioration Continue
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2019
    Messages : 46
    Par défaut
    Bonjour Qwazerty,

    Merci pour ta contribution et pour ton conseil. Oui j'ai la possibilité d'utiliser access pour ce projet. IL me semblait plus facile d'utiliser Excel au départ car je pensais que les utilisateurs pourrait utiliser cette interface simultanément. N'hésitez pas a me conseiller pour bien partir sur ce projet. Le "but" final étant que plusieurs utilisateurs puisse écrire dans une base de donnée unique à partir d'un Userform.


    Merci d'avance,

    Bonne journée.

  14. #14
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 549
    Par défaut
    RE

    Access est multi utilisateurs (en nombre raisonnable) et on peut en plus découper en base frontale et base dorsale

    Excel n'est pas prévu en multi utilisateurs

    La gestion des formulaires Access, est bien plus adaptée que des userform Excel pour gérer ajouter, modifier les données de la base.

    Le plus important est de bien structurer la base, tables, relations en respectant les règles des bases de données et surtout pas pas avec une approche tableur.

  15. #15
    Membre averti
    Homme Profil pro
    Amélioration Continue
    Inscrit en
    Novembre 2019
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amélioration Continue
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2019
    Messages : 46
    Par défaut
    Bonjour Chris,
    Merci beaucoup pour cette info, je vais donc abandonner mon projet sur Excel et me pencher directement sur Access lol. Moi qui pensait être presque arrivé au bout de mon projet :p .

  16. #16
    Membre averti
    Homme Profil pro
    Amélioration Continue
    Inscrit en
    Novembre 2019
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amélioration Continue
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2019
    Messages : 46
    Par défaut
    Re,

    Concernant le passage d'excel à access , est-il possible de recuperer du code que j'avais deans mon programme pour l'adapter à Access ?

    J'avais un pdf qui se générer automatiquement dans mon programme , est-il possible de faire de meme pour access ?

    merci d'avance.

  17. #17
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 549
    Par défaut
    Bonjour

    Le mode de fonctionnement d'Access est assez différent

    Déjà on sépare stockage et présentation des données

    La présentation se fait
    • soit à l'écran via des formulaires (qui ne sont pas des userforms) où notamment les listes déroulantes et contrôles associés peuvent se créer automatiquement si la structure de la base est bien faite,
    • soit sur papier via des états


    On peut paramétrer ceux-ci assez facilement pour restituer les données sous la forme voulue et imprimer en état en pdf

  18. #18
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 022
    Par défaut
    Salut

    il y a la méthode d'analyse Merise pour aider à structurer correctement sa base de donnée (tables / relations). Je ne suis pas spécialiste dans ce secteur mais je l'avais utiliser pour structurer des base et j'avais trouvé ça plutôt pratique. Si on suit bien la méthode ça évite de se retrouver un des n vers n entre deux tables par exemple...

    Bon courage pour ta reconversion vers Access

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  19. #19
    Membre averti
    Homme Profil pro
    Amélioration Continue
    Inscrit en
    Novembre 2019
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amélioration Continue
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2019
    Messages : 46
    Par défaut
    Bonjour,
    Merci beaucoup Qwazerty lol.

  20. #20
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 549
    Par défaut
    Bonjour

    Petit correctif à mon #9 car les tableaux ne commencent par toujours en ligne 1
    Soit en utilisant les nom des colonnes

    ligne 3 du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With Worksheets("DATA").ListObjects("Tableau1")
                Set y = .ListRows.Add
                Z = y.Range.Row - .Range.Row + 1
                .ListColumns("Num_BC").Range.Cells(Z, 1) = LabelBC.Caption
                .ListColumns("REDACTEUR").Range.Cells(Z, 1) = TextBoxInitRed
                .ListColumns("SECTION").Range.Cells(Z, 1) = Section
            End With

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

Discussions similaires

  1. Excel | Tableau Structuré | Base de données | UserForm
    Par Qwazerty dans le forum Contribuez
    Réponses: 13
    Dernier message: 08/01/2023, 18h17
  2. Réponses: 25
    Dernier message: 19/09/2018, 14h03
  3. [XL-2016] EXCEL + VBA 2016 Générer référence dans un tableau via un UserForm
    Par EXCELFORME dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/10/2016, 21h29
  4. [XL-2010] Probleme de remplissage d'un tableau via un userform
    Par Leo_ajay dans le forum Excel
    Réponses: 3
    Dernier message: 25/02/2015, 17h34
  5. [Toutes versions] Tableau structuré & VBA
    Par triumphk dans le forum Excel
    Réponses: 4
    Dernier message: 09/01/2015, 16h29

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