Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA modifier table

5 réponses
Avatar
Emilie
Bonjour à tous

J'ai crée une Table "Noms" avec 2 champs :
* Nom : Texte 50 caractères - sans doublons
* Tri : Entier Long - sans doublons

Puis une requête "Noms Requête" qui trie les noms par ordre croissant

Puis un formulaire avec :
* une liste "L_Noms" basée sur la requête "Noms Requête"
* un bouton "Nouveau" qui ajoute un nouveau nom dans la liste et qui affecte
la valeur par défaut au Tri =MaxDom("[Tri]","[Noms]")+1
* un bouton "Monter"

Exemple de la liste :
Nom Tri
aaa 1
bbb 2
ccc 3
ddd 4
...

Mon curseur étant actif sur "ccc" tri n°3, j'aimerais en cliquant sur le
bouton "Monter" passer le tri de "ccc" à 2 et celui de "bbb" à 3 afin que
"ccc" se positionne avant "bbb".

Je dois donc en VBA aller modifier les Tris dans la table "Noms"(sachant que
le champ Tri n’accepte pas les doublons)

Cet exemple simple me permettra de savoir comment modifier le tri d'éléments
d'une liste ou formulaires ou états.

Quelqu'un peut-il me donner le code VBA nécessaire ou une autre méthode pour
réaliser cette action.

Par avance merci.

5 réponses

Avatar
Eric
Bonjour Emilie,

Avec du SQL par exemple, ça conviendrait ?

Private Sub cmdMonter_Click()
Dim tmp1 As Long, tmp2 As Long, strSQL As String
If Me.Liste_Noms.ItemsSelected.Count = 0 Then
MsgBox "Aucune sélection - Abandon"
Exit Sub
ElseIf Me.Liste_Noms.ListIndex = 0 Then
MsgBox "C'est le 1er - Abandon"
Exit Sub
Else
tmp1 = CLng(Me.Liste_Noms.Column(1))
tmp2 = DMax("Tri", "Noms") + 1
strSQL = "Update Noms Set Tri =" & tmp2 & " where Tri = " &
tmp1 - 1
DoCmd.RunSQL strSQL
strSQL = "Update Noms Set Tri =" & tmp1 - 1 & " where Tri = " &
tmp1
DoCmd.RunSQL strSQL
strSQL = "Update Noms Set Tri =" & tmp1 & " where Tri = " & tmp2
DoCmd.RunSQL strSQL
Me.Liste_Noms.Requery
End If
End Sub

Bonjour à tous

J'ai crée une Table "Noms" avec 2 champs :
* Nom : Texte 50 caractères - sans doublons
* Tri : Entier Long - sans doublons

Puis une requête "Noms Requête" qui trie les noms par ordre croissant

Puis un formulaire avec :
* une liste "L_Noms" basée sur la requête "Noms Requête"
* un bouton "Nouveau" qui ajoute un nouveau nom dans la liste et qui affecte
la valeur par défaut au Tri =MaxDom("[Tri]","[Noms]")+1
* un bouton "Monter"

Exemple de la liste :
Nom Tri
aaa 1
bbb 2
ccc 3
ddd 4
...

Mon curseur étant actif sur "ccc" tri n°3, j'aimerais en cliquant sur le
bouton "Monter" passer le tri de "ccc" à 2 et celui de "bbb" à 3 afin que
"ccc" se positionne avant "bbb".

Je dois donc en VBA aller modifier les Tris dans la table "Noms"(sachant que
le champ Tri n’accepte pas les doublons)

Cet exemple simple me permettra de savoir comment modifier le tri d'éléments
d'une liste ou formulaires ou états.

Quelqu'un peut-il me donner le code VBA nécessaire ou une autre méthode pour
réaliser cette action.

Par avance merci.



--
A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
3stone
Bonjour,

"Emilie"
| J'ai crée une Table "Noms" avec 2 champs :
| * Nom : Texte 50 caractères - sans doublons
| * Tri : Entier Long - sans doublons
<snip>


Il te manque une clé primaire dans ta table...


Mais pour ton problème:
Ce que tu souhaite, c'est d'avoir un système permettant un tri qui ne repose
sur aucun raisonnement ! Pour pouvoir trié "a vue de nez" et "au pif"...

Cela ne s'appelle pa un tri ;-)

Il serait plus raisonnable, soit d'incorporer dans la table, soit de lier par
une requête, les données qui permettraient de décrire le tri souhaité.

A moins que tu ne doive simplement trier la liste sur le nom ??


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw
Avatar
Eric
Bonjour Pierre,

Bon, j'aurais du shunter le post ;-)
Mais pour ne pas perdre l'honneur, je dirai qu'il ne s'agit pas de tri
stricto sensu mais de critères de classement dont le rang peut, dans un
futur immédiat pour Emilie, venir à être modifié !


Mais pour ton problème:
Ce que tu souhaite, c'est d'avoir un système permettant un tri qui ne repose
sur aucun raisonnement ! Pour pouvoir trié "a vue de nez" et "au pif"...

Cela ne s'appelle pa un tri ;-)



--
A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
3stone
Salut,

"Eric"
| Bon, j'aurais du shunter le post ;-)


Non, absolument pas !
Tu as donné ton avis, moi le mien... c'est ce qui fait la richesse d'un forum.

Ceci dit :
Depuis que je traîne sur ce forum, j'ai attrapé un nez pour les questions disons "spéciales" ;-)
Répondre simplement dans le sens de la question, fait que trop souvent le demandeur
s'enfoncer dans une construction ou raisonnement déjà bancal.
Et dans ce cas, c'est dans ma nature, je rame à contre-sens :o)))

Mais grâce aux réponses multiples, le demandeur fait *son* choix !

Tout le monde doit pouvoir s'exprimer, il faut juste éviter les affirmations
totalement fausses ou dangereuses!

Et se dire qu'en général, il n'y a pas LA solution, parce qu'il n'y à pas LE problème.

Bonne journée.


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw
Avatar
Emilie
Oui c'est OK avec du SQL.

Merci pour vos réponses et commentaires.
Ca me permettra de tenir compte de vos remarques et de mieux formuler mes
questions. La réponse de spécialiste est toujours la bienvenue.

Merci donc à tous les deux.



Bonjour Emilie,

Avec du SQL par exemple, ça conviendrait ?

Private Sub cmdMonter_Click()
Dim tmp1 As Long, tmp2 As Long, strSQL As String
If Me.Liste_Noms.ItemsSelected.Count = 0 Then
MsgBox "Aucune sélection - Abandon"
Exit Sub
ElseIf Me.Liste_Noms.ListIndex = 0 Then
MsgBox "C'est le 1er - Abandon"
Exit Sub
Else
tmp1 = CLng(Me.Liste_Noms.Column(1))
tmp2 = DMax("Tri", "Noms") + 1
strSQL = "Update Noms Set Tri =" & tmp2 & " where Tri = " &
tmp1 - 1
DoCmd.RunSQL strSQL
strSQL = "Update Noms Set Tri =" & tmp1 - 1 & " where Tri = " &
tmp1
DoCmd.RunSQL strSQL
strSQL = "Update Noms Set Tri =" & tmp1 & " where Tri = " & tmp2
DoCmd.RunSQL strSQL
Me.Liste_Noms.Requery
End If
End Sub

Bonjour à tous

J'ai crée une Table "Noms" avec 2 champs :
* Nom : Texte 50 caractères - sans doublons
* Tri : Entier Long - sans doublons

Puis une requête "Noms Requête" qui trie les noms par ordre croissant

Puis un formulaire avec :
* une liste "L_Noms" basée sur la requête "Noms Requête"
* un bouton "Nouveau" qui ajoute un nouveau nom dans la liste et qui affecte
la valeur par défaut au Tri =MaxDom("[Tri]","[Noms]")+1
* un bouton "Monter"

Exemple de la liste :
Nom Tri
aaa 1
bbb 2
ccc 3
ddd 4
...

Mon curseur étant actif sur "ccc" tri n°3, j'aimerais en cliquant sur le
bouton "Monter" passer le tri de "ccc" à 2 et celui de "bbb" à 3 afin que
"ccc" se positionne avant "bbb".

Je dois donc en VBA aller modifier les Tris dans la table "Noms"(sachant que
le champ Tri n’accepte pas les doublons)

Cet exemple simple me permettra de savoir comment modifier le tri d'éléments
d'une liste ou formulaires ou états.

Quelqu'un peut-il me donner le code VBA nécessaire ou une autre méthode pour
réaliser cette action.

Par avance merci.



--
A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr