Ajouter une donnée dans un tableau via un bouton

marco -  
 marco -
Bonjour,

je me permet de vous demander encore de l'aide
Voilà j'ai dans une feuille un tableau de données qui sert à la création d'une liste déroulante.
Je souhaiterais que l'utilisateur indique dans une cellule définie une nouvelle donnée et qu'il puisse la faire rajouter dans le tableau de données à l'aide d'un bouton "valider".
Et pour pousser la perfection que les données après ce rajout soit mises systématiquement par ordre alphabétique.
J'espère que vous pourrez m'aider; Merci d'avance.

Configuration: Windows / Firefox 73.0

10 réponses

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    1
    1. marco
       
      Bonjour,

      tout d'abord merci de votre réponse.
      mais ce que vous me montrez c'est l'état actuel de ma feuille excel avec un tableau dynamique.
      Ce que je souhaiterais c'est que l'utilisateur entre une nouvelle donnée dans une cellule définie (par exemple A1) et qu'en validant via un bouton que j'ai créer qui s’appellerait par exemple "enregistrer" cette donnée vienne s'incrémenter à mon tableau tout en gardant si possible un tri alphabétique (ce serait un plus).
      Merci d'avance
      0
      1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730 > cs_Le Pivert Messages postés 8437 Statut Contributeur
         
        J'ai fait une liste déroulante dynamique en suivant le lien que je t'ai donné.

        La liste se situe sur le Feuillle1 dans la colonne A. La liste déroulante en C2.
        La cellule définie pour entrer une nouvelle ligne en F2.

        Il faut que tu l'adaptes suivant le nom des feuilles et des cellules à ton environnement.

        Voici le code:

        Option Explicit
        Private Sub CommandButton1_Click()
        Dim derniereLigne As Long
        derniereLigne = Range("A" & Rows.Count).End(xlUp).Row + 1
        If Range("F2").Value = "" Then Exit Sub
        Range("A" & derniereLigne).Value = Range("F2").Value
        Trier 'de A à Z
        End Sub
        'macro faite avec l'enregistreur de macro
        Sub Trier()
            ActiveWorkbook.Worksheets("Feuil1").ListObjects("Tableau1").Sort.SortFields. _
                Clear
            ActiveWorkbook.Worksheets("Feuil1").ListObjects("Tableau1").Sort.SortFields. _
                Add Key:=Range("Tableau1[[#All],[Mois]]"), SortOn:=xlSortOnValues, Order _
                :=xlAscending, DataOption:=xlSortNormal
            With ActiveWorkbook.Worksheets("Feuil1").ListObjects("Tableau1").Sort
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        End Sub
        
        


        Pour trier sers-toi de l'enregistreur de macro comme moi en faisant le tri manuellement.

        Voilà

        @+ Le Pivert
        0
    2. marco
       
      merci parfait !
      0
  2. MARCO
     
    Bonjour,

    merci de votre réponse.
    Ma situation est un peu différente, car ma "liste déroulante" est dans une autre feuille du classeur nommé "TEST"
    Voici les informations :
    "Le tableau" se trouve sur une feuille nommée "BASE DONNEES"
    La liste déroulante est sur une feuille nommée "TEST" en B12
    et ma cellule pour rentrer la nouvelle valeur à insérer dans le tableu en D3 sur la feuille "BASE DONNEES"
    J'ai modifier votre code avec ces éléments mais ça ne fonctionne pas.
    Voici le code :

    Option Explicit
    Private Sub CommandButton1_Click()
    Dim derniereLigne As Long
    derniereLigne = Range("C" & Rows.Count).End(xlUp).Row + 1
    If Range("D3").Value = "" Then Exit Sub
    Range("C" & derniereLigne).Value = Range("D3").Value
    Trier 'de A à Z
    End Sub
    'macro faite avec l'enregistreur de macro
    Sub Trier()
    ActiveWorkbook.Worksheets("BASE DONNEES").ListObjects("Tableau1").Sort.SortFields. _
    Clear
    ActiveWorkbook.Worksheets("BASE DONNEES").ListObjects("Tableau1").Sort.SortFields. _
    Add Key:=Range("Tableau1[#All,[Mois]]"), SortOn:=xlSortOnValues, Order _
    :=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("BASE DONNEES").ListObjects("Tableau1").Sort
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
    End With


    Merci d'avance.
    Bonne journée
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Il faut que tu l'adaptes suivant le nom des feuilles et des cellules à ton environnement

      il suffit de voir la macro enregistrée pour avoir la bonne syntaxe

      comme ceci:

      Private Sub CommandButton1_Click()
      Dim derniereLigne As Long
      derniereLigne = Worksheets("BASE DONNEES").Range("C" & Rows.Count).End(xlUp).Row + 1
      If Worksheets("BASE DONNEES").Range("D3").Value = "" Then Exit Sub
      Worksheets("BASE DONNEES").Range("C" & derniereLigne).Value = Worksheets("BASE DONNEES").Range("D3").Value
      Trier 'de A à Z
      End Sub


      @+ Le Pivert
      0
      1. MARCO > cs_Le Pivert Messages postés 8437 Statut Contributeur
         
        Bonjour,

        encore désolé, mais j'ai collé votre code sur le code du bouton.
        Créer une macro appelé Trier dans laquelle j'ai collé ce code
        'macro faite avec l'enregistreur de macro
        Sub Trier()
        ActiveWorkbook.Worksheets("BASE DONNEES").ListObjects("Tableau1").Sort.SortFields. _
        Clear
        ActiveWorkbook.Worksheets("BASE DONNEES").ListObjects("Tableau1").Sort.SortFields. _
        Add Key:=Range("Tableau1[#All,[Mois]]"), SortOn:=xlSortOnValues, Order _
        :=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("BASE DONNEES").ListObjects("Tableau1").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
        End With

        et cela ne fonctionne pas.
        Pouvez-vous me confirmer que ma démarche et la bonne et m'indiquer ce qui ne va pas ?
        Merci
        0
  3. MARCO
     
    Bonjour,

    si je colle le code de mon dernier message à la suite du code du bouton, le rajout fonctionne, sauf qu'une erreur VB est indiquée "erreur de compilation" "end sub attendu".
    Et autre point le rajout ce fait à la fin de la liste mais pas par ordre alphabétque.
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      erreur VB est indiquée "erreur de compilation" "end sub attendu".

      C'est pourtant clair

      il manque le End Sub a la fin de la macro Trier donc le tri ne se fait pas!!!!!!!!!!!!!!!!
      0
  4. Marco
     
    Bonjour,

    désolé mais encore une fois je débute.
    J'ai rajouté "end sub" et effectivement c'est logique.
    Une nouvelle erreur apparait :
    "erreur d'execution '1004'
    La méthode 'Range' de l'objet '_Worksheet' a échoué
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      La méthode 'Range' de l'objet '_Worksheet' a échoué

      il manque un s à Worksheet:

      Worksheets("BASE DONNEES").Range("C" & derniereLigne).Value = Worksheets("BASE DONNEES").Range("D3").Value


      en programmation il faut être précis!
      0
      1. marco > cs_Le Pivert Messages postés 8437 Statut Contributeur
         
        Je suis désolé mais j'ai bien vérifier mon code est il y a bien un S à workshetts . Ce message s'affiche pourtant.
        voici le code
        Sub savepdf()
        Dim nom As String ' nom du pdf
        Dim chemin As String 'chemin du dossier d'enregistrement
        nom = Range("H6").Value 'adapter cellule
        chemin = ActiveWorkbook.Path & "\" ' même dossier que le classeur
        'enregistrement en PDF
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        chemin & nom, Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        False
        End Sub

        Option Explicit
        Private Sub CommandButton1_Click()
        Dim derniereLigne As Long
        derniereLigne = Worksheets("BASE DONNEES").Range("B" & Rows.Count).End(xlUp).Row + 1
        If Worksheets("BASE DONNEES").Range("D3").Value = "" Then Exit Sub
        Worksheets("BASE DONNEES").Range("B" & derniereLigne).Value = Worksheets("BASE DONNEES").Range("D3").Value
        Trier 'de A à Z
        End Sub
        Sub Trier()
        ActiveWorkbook.Worksheets("BASE DONNEES").ListObjects("Tableau1").Sort.SortFields. _
        Clear
        ActiveWorkbook.Worksheets("BASE DONNEES").ListObjects("Tableau1").Sort.SortFields. _
        Add Key:=Range("Tableau1[#All,[Mois]]"), SortOn:=xlSortOnValues, Order _
        :=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("BASE DONNEES").ListObjects("Tableau1").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
        End With
        End Sub
        0
      2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730 > marco
         
        Il ne faut rien mettre au dessus de Option Explicit

        Sur qu'elle ligne se produit l erreur surlignee en jaune
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. marco
     
    si je ne mais pas le code au dessus de la ligne où dois-je le mettre ?
    L'erreur s produit sur les lignes ci-dessous avec une flèche sur la dernière ligne :
    ActiveWorkbook.Worksheets("BASE DONNEES").ListObjects("Tableau1").Sort.SortFields. _
    Add Key:=Range("Tableau1[#All,[Mois]]"), SortOn:=xlSortOnValues, Order _
    :=xlAscending, DataOption:=xlSortNormal
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Tu mets ta macro a la suite de la Sub Trier

      Pour l'erreur sers-toi de l’enregistreur de macro une nouvelle fois en faisant le tri manuellement.
      Il y a peut-être quelque chose que tu as changé depuis le dernier enregistrement Tableau, la colonne de la liste n'est plus la C mais la B etc.
      0
  7. marco
     
    Bonjour,

    ok pour l'enregistreur pour la macro Trier
    Pour la colonne pour des raisons pratiques je les effectivement déplacée en B mais j'ai fait les modifications dans le code.
    Par contre concernant le code suivant est-il normal qu'il n'y est rien avant les ":" ?
    :=xlAscending
    Merci
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Par contre concernant le code suivant est-il normal qu'il n'y est rien avant les ":" ?
      :=xlAscending


      oui car on peut l'écrire comme cela:

      Add Key:=Range("Tableau1[#All,[Mois]]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal


      Voilà
      0
  8. marco
     
    merci de votre retour.
    J'ai remplacer par le code que vous m'avez demandé mais l'erreur perciste
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      mets le code complet
      0
  9. marco
     
    Bonjour,

    voici. Merci

    Option Explicit
    Private Sub CommandButton1_Click()
    Dim derniereLigne As Long
    derniereLigne = Worksheets("BASE DONNEES").Range("B" & Rows.Count).End(xlUp).Row + 1
    If Worksheets("BASE DONNEES").Range("D3").Value = "" Then Exit Sub
    Worksheets("BASE DONNEES").Range("B" & derniereLigne).Value = Worksheets("BASE DONNEES").Range("D3").Value
    Trier 'de A à Z
    End Sub
    Sub Trier()
    ActiveWorkbook.Worksheets("BASE DONNEES").ListObjects("Tableau1").Sort.SortFields. _
    Clear
    ActiveWorkbook.Worksheets("BASE DONNEES").ListObjects("Tableau1").Sort.SortFields. _
    Add Key:=Range("Tableau1[#All,[Mois]]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("BASE DONNEES").ListObjects("Tableau1").Sort
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
    End With
    End Sub
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      C'est bien la dernière macro que tu as faite avec l'enregistreur?

      Car si tu as bien fait la manip il n'y a aucune raison que cela ne fonctionne pas
      0
  10. marco
     
    Bonjour,

    je viens de supprimer la macro puis de la recréer et toujours la même erreur.
    Y a t'il un moyen pour que je vous envoi le fichier ?
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Passez par ce site et ensuite coller le lien ici

      https://www.cjoint.com/
      0
  11. marco
     
    voici l'adresse du lien.
    merci
    https://www.cjoint.com/c/JBzkrbVbPMo
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Voilà


      https://www.cjoint.com/c/JBzkXbUK3aQ

      j'ai ajouté un bouton, mais tu peux mettre le code sur ton bouton (erreur de ma part)

      @+ Le Pivert
      0