Ajouter une donnée dans un tableau via un bouton

Fermé
marco - 20 févr. 2020 à 16:18
 marco - 25 févr. 2020 à 13:35
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
A voir également:

10 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
20 févr. 2020 à 16:33
1
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
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728 > marco
20 févr. 2020 à 18:03
Il faut trouver la dernière ligne de ta liste a laquelle tu ajoutes +1

https://vbaforexcel.wordpress.com/2013/08/31/determiner-la-derniere-lignecolonne-dun-tableau/

Tu mets ceci dans ton bouton

dernièreligne + 1 = Range("A1").Value


tout en gardant si possible un tri alphabétique

tu as d'origine le tri au clic droit sur ta liste

Voilà

@+ Le Pivert
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728 > cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
21 févr. 2020 à 10:56
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
merci parfait !
0
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
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
21 févr. 2020 à 12:09
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
MARCO > cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
21 févr. 2020 à 15:11
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
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
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
21 févr. 2020 à 16:01
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
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
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
21 févr. 2020 à 17:15
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
marco > cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
21 févr. 2020 à 17:32
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
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728 > marco
21 févr. 2020 à 17:38
Il ne faut rien mettre au dessus de Option Explicit

Sur qu'elle ligne se produit l erreur surlignee en jaune
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
21 févr. 2020 à 18:49
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
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
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
24 févr. 2020 à 17:58
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
merci de votre retour.
J'ai remplacer par le code que vous m'avez demandé mais l'erreur perciste
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
24 févr. 2020 à 18:35
mets le code complet
0
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
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
25 févr. 2020 à 08:01
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
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
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
25 févr. 2020 à 11:08
Passez par ce site et ensuite coller le lien ici

https://www.cjoint.com/
0
voici l'adresse du lien.
merci
https://www.cjoint.com/c/JBzkrbVbPMo
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
Modifié le 25 févr. 2020 à 11:58
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