Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Déplacer des cellules d'un tableau au moyen d'un SpinButton

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Magic_Doctor

XLDnaute Barbatruc
Supporter XLD
Bonjour,

J'ai un tableau avec des items. Je voudrais pouvoir déplacer certains items de ce tableau vers le haut ou le bas au moyen d'un SpinButton. Je pense que les explications sont nettement plus claires sur la feuille.

Merci pour toute aide.
 

Pièces jointes

Re : Déplacer des cellules d'un tableau au moyen d'un SpinButton

Bonjour Si..., pierrejean, job75,

Merci pour vos réponses. J'étais rentré dans une solution à partir de dictionnaires qui commençait bien mais se compliquait par la suite pour finir en prise de tête. Mais ça m'a fait un peu progresser dans les dictionnaires...
La solution de Si... me paraît la plus adaptée pour mon projet. Seulement voilà, pour des raisons de présentation minimaliste j'avais mis, dans ma question, un tableau avec une seule colonne. En fait (et c'est indispensable par la suite) quand on sélectionne une cellule du tableau et que l'on veuille la déplacer dans un segment de ce tableau, la cellule contiguë à gauche (qui contient le Nº de couleur de cellule) doit elle aussi se déplacer. J'ai un peu modifié les routines de Si... en fonction d'une plage au départ nommée, mais je ne suis pas parvenu à faire en sorte que les 2 cellules contiguës se déplacent simultanément.
En tout vous m'avez été encore une fois d'une grande aide.
 

Pièces jointes

Re : Déplacer des cellules d'un tableau au moyen d'un SpinButton

Bonjour Magic_Doctor, le fil,

J'ai adapté ma macro à l'USF :

Code:
Private Sub SpinButton1_Change()
If SpinButton1 = 1 Then Exit Sub
Dim P As Range
Set P = [TableauCF].Offset(IIf(SpinButton1, 2, 1)).Resize([TableauCF].Count - 4)
If Not Intersect(ActiveCell, P) Is Nothing Then
  With ActiveCell
    .Offset(, -1).Resize(, 2).Cut
    .Offset(IIf(SpinButton1, -1, 2), -1).Insert
    .Select
  End With
End If
SpinButton1 = 1
End Sub
Nota 1 : les propriétés Min et Max du SpinButton sont à 0 et 2.

Nota 2 : la plage TableauCF commence en C5 (c'est indispensable, voir mon post #12).

Fichier joint.

A+
 

Pièces jointes

Re : Déplacer des cellules d'un tableau au moyen d'un SpinButton

Re,

Cela dit je ne vois pas ce qu'un USF apporte de plus par rapport à un contrôle de formulaire dans la feuille.

C'est nettement moins souple d'utilisation en tout cas.

A+
 
Re : Déplacer des cellules d'un tableau au moyen d'un SpinButton

salut

dans ce cadre (n'est-ce pas job75 ? 😉)
 

Pièces jointes

Re : Déplacer des cellules d'un tableau au moyen d'un SpinButton

Bonjour job,

D'abord je réponds à ta question. Pourquoi un USF plutôt qu'un contrôle de formulaire ?
D'une part, modifier la position d'un item dans la portion de la liste l'autorisant est quelque chose qui, dans le fond, se fera à "chaque mort d'évèque" ; donc pourquoi "encombrer" la feuille avec un objet très peu utilisé ? Mais aussi placer le SpinButton dans un USF me permet, par la même occasion, de mettre dans cet USF un CommandButton qui permettra de trier (la portion de) la liste par ordre alphabétique si le besoin s'en faisait sentir (toujours à chaque mort d'évèque...). Tout ça dans le fond ne sert pas à grand chose quant au résultat final, mais pouvoir trier cette liste comme bon nous semble est, ma foi, sympathique.

Ta solution marche impec et d'un "laconicisme jobien" ! Seulement voilà, à un détail près. La plage nommée "TaleauCF" est fondamentale dans mes procédures. Nombre de macros s'articulent autour de cette "balise" qui conserve toujours le même nom quand on modifie sa longueur. Or, dans ta solution, la plage "TableauCF" englobe le titre de la colonne ce qui, fatalement, perturbera les macros qui font appel à "TableauCF". Qu'à cela ne tienne, je renomme la plage "TableauCF" sans le titre et, dans tes macros, fais les modifications nécessaires (Offset, Resize...) pour conserver ce que tu avais écrit. Ça marche, mais je vérifie "TableauCF" et me rends compte que la plage est tronquée, à savoir qu'il lui manque le 1er item de la liste. J'avais remarqué ce problème avec ta précédente solution, voilà pourquoi, ne pouvant le résoudre, je me suis orienté vers la solution de Si...
 
Re : Déplacer des cellules d'un tableau au moyen d'un SpinButton

Re Magic_Doctor,

Retour de soirée...

Puisque tu ne veux pas le titre dans la définition de TableauCF, j'ai ajouté :

Code:
Range(.Cells, [TableauCF]).Name = "TableauCF"
Ainsi la définition de la plage est toujours reconstituée.

Fichier (2).

A+
 

Pièces jointes

Re : Déplacer des cellules d'un tableau au moyen d'un SpinButton

Bonjour Magic_Doctor, le forum,

Tu ouvres l'USF en non modal (propriété ShowModal à False).

Pour éviter le bug quand on change de feuille j'ai donc ajouté :

Code:
P.Parent.Activate 'si l'on change de feuille
Fichier (3).

A+
 

Pièces jointes

Re : Déplacer des cellules d'un tableau au moyen d'un SpinButton

Bonjour à tous et plus particulièrement à Si... et à job75,

Merci pour vos réponses, ça marche enfin très bien, quelles que soient les solutions. Je n'ai plus que l'embarras du choix.
job, tu as rajouté "P.Parent.Activate" au cas où l'on change de feuille. Qu'entends-tu par là ?

Bonne journée à tous.
 
Re : Déplacer des cellules d'un tableau au moyen d'un SpinButton

Bonjour,

Job, je n'avais pas rafraîchi l'écran. Je viens de voir ton dernier post. ¡Caramba! ¡Bravo! je n'avais pas pensé aux touches de direction. C'est nettement plus simple et pratique. Adopté !

Bonne journée à tous.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…