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
A voir également:

10 réponses

cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
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
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729 > marco
 
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 7904 Date d'inscription   Statut Contributeur Dernière intervention   729 > cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention  
 
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
marco
 
merci parfait !
0
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
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
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 7904 Date d'inscription   Statut Contributeur Dernière intervention  
 
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
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
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
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
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
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
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 7904 Date d'inscription   Statut Contributeur Dernière intervention  
 
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 7904 Date d'inscription   Statut Contributeur Dernière intervention   729 > marco
 
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
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
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
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
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
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
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
marco
 
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 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
mets le code complet
0
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
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
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
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
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Passez par ce site et ensuite coller le lien ici

https://www.cjoint.com/
0
marco
 
voici l'adresse du lien.
merci
https://www.cjoint.com/c/JBzkrbVbPMo
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
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