VBA - Bouton pour supprimer une colonne

Hello tout le monde !

Je me permets de vous écrire car je vis une situation presque désespérée

Vous trouverez en annexe un fichier Excel sur lequel nous avons la possibilité d'ajouter des colonnes à remplir lorsque l'on clique sur "Ajouter un article", jusque là tout va bien.

Vous constaterez que le bouton "Ajouter un article" ajoute également un bouton qui devrait servir à supprimer la colonne sur laquelle il se trouve.

Cependant, je n'arrive pas à "lier" le bouton "Supprimer l'article" à sa propre colonne pour qu'il la supprime et se supprime également.

Pourtant, le bouton "Bouton 25" arrive correctement à supprimer une colonne avec un bouton mais le problème est qu'il ne supprime que la colonne C...

J'ai pensé d'ajouter une variable mais pas trouvé de moyen de la définir correctement (on peut mettre une colonne comme variable d'ailleurs ?)

Si quelqu'un aurait une solution, une autre façon de faire ou un début de piste, cela serait trop chouette.

Merci beaucoup

19exemple.xlsm (31.91 Ko)

Bonjour,

Voici une solution : Plus besoin de créer de bouton celui existant permet de supprimer la colonne de la cellule sélectionnée

A+

bonjour

salut au passage galopin

je n'ai jamais vu personne ajouter d'articles en colonnes

pourquoi ce besoin ?

à quoi sert le fichier ? (remplir des cartables, gérer des billets, une association, un hôpital, faire des BL, des BC, des factures...)

amitiés

Bonjour,

Voici une solution : Plus besoin de créer de bouton celui existant permet de supprimer la colonne de la cellule sélectionnée

A+

Hello Galopin,

Je te remercie, je vais tester cela aujourd'hui et je te redis !

bonjour

salut au passage galopin

je n'ai jamais vu personne ajouter d'articles en colonnes

pourquoi ce besoin ?

à quoi sert le fichier ? (remplir des cartables, gérer des billets, une association, un hôpital, faire des BL, des BC, des factures...)

amitiés

Hello jmd

C'est pour définir une liste de commande d'article, mais étant donné que ce sont des articles qui doivent être ajouté à une BD les case grises foncées auront les intitulés des infos que l'on devra obtenir et, dans les case grises claires, les personnes doivent pouvoir remplir les champs librement.

Est-ce que cela t'aide ?

Bonjour à tous,

Tu pourrais grandement te faciliter la vie ... avec deux petites macros évènementielles :

( et plus aucun bouton ... )

pour Supprimer une Colonne

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
' Supprimer la Colonne de la cellule dans laquelle tu fais un double-clic 
Columns(Selection.Column).Delete
Cancel = True
End Sub

et pour Insérer une Colonne

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
' Insérer une Colonne avec un clic droit
Columns(Selection.Column).Insert
Cancel = True
End Sub

En espèrant que cela t'aide

Hello jmd

C'est pour définir une liste de commande d'article, mais étant donné que ce sont des articles qui doivent être ajouté à une BD les case grises foncées auront les intitulés des infos que l'on devra obtenir et, dans les case grises claires, les personnes doivent pouvoir remplir les champs librement.

Est-ce que cela t'aide ?

re

je fais divers logiciels de commandes, sous Excel ou d'autres, j'utilise aussi des progiciels

on ajoute toujours des lignes, jamais des colonnes

alors je ne comprends pas tes explications

Re,

A titre illustratif, ton fichier test ...

totalement désencombré ...

En espèrant que cela t'aide

re

suggestion classique

bonne journée à vous

Re,

A titre illustratif, ton fichier test ...

totalement désencombré ...

En espèrant que cela t'aide

C'est assez incroyable comme solution ! Je l'utiliserai certainement pour d'autres projets VBA !

Cependant, là, ça risque d'être critique car il y a toujours la peur que le "prospect" double-click sans le vouloir (on est vraiment jamais trop prudent quand on voit le niveau de certains avec un ordinateur entre les mains ) et que cela supprime ses données.

Mais sincèrement merci pour cette astuce, elle me sera super utile

Hello jmd

C'est pour définir une liste de commande d'article, mais étant donné que ce sont des articles qui doivent être ajouté à une BD les case grises foncées auront les intitulés des infos que l'on devra obtenir et, dans les case grises claires, les personnes doivent pouvoir remplir les champs librement.

Est-ce que cela t'aide ?

re

je fais divers logiciels de commandes, sous Excel ou d'autres, j'utilise aussi des progiciels

on ajoute toujours des lignes, jamais des colonnes

alors je ne comprends pas tes explications

Non mais tu as raisons, je devrai plutôt investiguer sur une solution en ligne, cependant, je trouvais ça beaucoup plus lisible en colonne mais en voyant vos réponses, je me demande si je ne me complique pas la vie pour pas grand chose si ce n'est du visuel plus agréable pour ma simple et unique personne

C'est assez incroyable comme solution ! Je l'utiliserai certainement pour d'autres projets VBA !

Cependant, là, ça risque d'être critique car il y a toujours la peur que le "prospect" double-click sans le vouloir (on est vraiment jamais trop prudent quand on voit le niveau de certains avec un ordinateur entre les mains ) et que cela supprime ses données.

Mais sincèrement merci pour cette astuce, elle me sera super utile

Re,

Content que la solution te plaise ...

Si tu penses que cela pourrait t'être utile pour éviter les erreurs de manipulation ... il est toujours possible d'insérer un Message pour l'utilisateur afin qu'il confirme ... ou annule la suppression ...

A titre d'illustration ... ta macro améliorée ...

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
' Supprimer la Colonne de la cellule dans laquelle tu fais un double-clic
Dim reponse
reponse = MsgBox("Etes vous sûr de vouloir supprimer cette Colonne ? ", vbYesNo + vbQuestion)
If reponse = vbYes Then Columns(Selection.Column).Delete
Cancel = True
End Sub

C'est assez incroyable comme solution ! Je l'utiliserai certainement pour d'autres projets VBA !

Cependant, là, ça risque d'être critique car il y a toujours la peur que le "prospect" double-click sans le vouloir (on est vraiment jamais trop prudent quand on voit le niveau de certains avec un ordinateur entre les mains ) et que cela supprime ses données.

Mais sincèrement merci pour cette astuce, elle me sera super utile

Re,

Content que la solution te plaise ...

Si tu penses que cela pourrait t'être utile pour éviter les erreurs de manipulation ... il est toujours possible d'insérer un Message pour l'utilisateur afin qu'il confirme ... ou annule la suppression ...

A titre d'illustration ... ta macro améliorée ...

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
' Supprimer la Colonne de la cellule dans laquelle tu fais un double-clic
Dim reponse
reponse = MsgBox("Etes vous sûr de vouloir supprimer cette Colonne ? ", vbYesNo + vbQuestion)
If reponse = vbYes Then Columns(Selection.Column).Delete
Cancel = True
End Sub

Alors tout d'abord t'es un dieu à mes yeux désormais.

La fonction est franchement parfaite ainsi ! Cependant, j'ai essayé de la custom pour que le clique droit reprenne la mise en forme de la colonne (avec les bordures notamment) mais je pense me tromper pas mal pour la pratique...

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) ' Insérer une Colonne avec un clic droit Columns(Selection.Column).Insert Cancel = True Range("B4:B28").Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False End Sub

En lisant d'autres cours sur le net, certains parlent encore d'une autre fonction....

De plus, j'essaie de bloquer le fait que les users puissent modifier la colonne "A" et qu'ils ne peuvent pas créer de colonne avant la colonne "A", sur internet, ils parlent de "vérouiller la feuille" mais lorsque je le fais, malgré que je sélectionne bien la colonne, toute la feuille se retrouve verrouillée.... Est-ce qu'il y aurait une possibilité de le faire en VBA ?

Je vous prie de bien vouloir croire en mes sincères excuses de vous faire perdre du temps avec tout ça mais c'est vrai que je suis totalement novice en VBA

Re,

Content que le mode de suppression avec le double-clic te convienne ...

Concernant le mode d'ajout/insertion d'une colonne, peux-tu dresser la liste des points que tu veux respecter ...

En ce qui concerne la macro ... je te rassure ... elle pourra réaliser ce qui te convient ...

A titre illustratif ... uniquement pour conserver le Format de la Colonne B ... se placer dans La Colonne C ...

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
' Insérer une Colonne avec un clic droit
' Pour utiliser le Format de la Colonne B ... se placer en Colonne C avant le clic droit
Columns(Selection.Column).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Cancel = True
End Sub

Re,

Ci-joint ta version 2 avec toutes les modifications ... ainsi que la protection des Colonnes A et B ...

En espèrant que cela t'aide

Re,

Content que le mode de suppression avec le double-clic te convienne ...

Concernant le mode d'ajout/insertion d'une colonne, peux-tu dresser la liste des points que tu veux respecter ...

En ce qui concerne la macro ... je te rassure ... elle pourra réaliser ce qui te convient ...

A titre illustratif ... uniquement pour conserver le Format de la Colonne B ... se placer dans La Colonne C ...

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
' Insérer une Colonne avec un clic droit
' Pour utiliser le Format de la Colonne B ... se placer en Colonne C avant le clic droit
Columns(Selection.Column).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Cancel = True
End Sub

Alors, en soit, la macro devrait :

Créer une nouvelle colonne reprenant la mise en page (uniquement) de la colonne « B » (couleur, bordure, …), mais les nouvelles colonnes ne doivent pas pouvoir être créées avant la colonne « A » (La colonne « A » sera figée pour que si le « user » créé 27 colonnes, il puisse suivre les intitulés des champs, je ne sais pas si c’est une information utile.)


De plus, la colonne « A » ne doit jamais pouvoir être modifiée par un user n’ayant pas le droit (je me demande tout de même si c’est possible cela). Et il ne doit pas avoir le droit d’écrire ou d’insérer quelque chose dans une cellule qui n’est pas soit la colonne de base "B", soit une colonne ajoutée avec le clique droit.


De plus, certains champs seront obligatoires et le « user » ne pourra pas fermer le fichier si ces champs donnés ne seront pas remplis. Mon idée serait de faire un « IF il y a un texte dans une colonne, les cellules telles, telles, telles, de la colonne doivent être remplies ELSE on ne peut pas le fermer ». La question que je me pose c’est comment définir les variables de ces mêmes champs ? Et est-ce que ma logique Excel est bonne ?


Pour la catégorie prix, il y aura 4 licences possible et il faut qu’au moins une des possibilités soient remplies dans les licences pour que cela soit valide, mais ça, dès que j’ai compris comment définir des variables, cela devrait être assez simple avec un IF.

Je crois que c’est tout… En écrivant ce que devait faire ma macro, je réalise que j’ai fait peut-être preuve de beaucoup trop d’ambition pour une première expérience VBA…

J’ai mis en annexe un exemple de ce à quoi cela pourrait ressembler histoire que tu puisses mieux visualiser de ce que je souhaiterai faire afin que tes lumières puissent me guider et me montrer le chemin dans l’obscurité qu’est le VBA pour moi pour le moment… (mais en même temps, je commence à bien aimer haha)

Une fois de plus, je ne sais pas si tout ça est possible et les limitations du langage.....

4testounet.xlsm (25.96 Ko)

Re,

Merci pour tes explications ...

Je vais les examiner l'une après l'autre ...

Entretemps ... as-tu testé ta version 2 ...?

Re,

Merci pour tes explications ...

Je vais les examiner l'une après l'autre ...

Entretemps ... as-tu testé ta version 2 ...?

Hello,

J'ai dû m'absenter quelques jours, je te présente mes excuses pour ce temps de latence.

Oui j'ai bien testé la version 2.

Alors au niveau de la reprise de la mise en page de la colonne B c'est parfait !

Cependant, pour la protection des colonnes, j'ai pas l'impression que cela fonctionne, j'ai pu modifié le contenu dans la colonne A (a la limite c'est pas trop important), mais c'est vrai que l'on ne peut plus créer de colonnes avant et ça c'est trop chouette !

D'ailleurs le code pour la protection d'une colonne c'est bien :

If Target.Column <= 2 Then Exit Sub ?

Hello,

Content que la Version 2 corresponde à ton attente ...

Concernant la protection de ta Colonne A ... il s'agit d'un problème totalement indépendant, je te conseille de créer une nouvelle discussion ...

Hello,

Content que la Version 2 corresponde à ton attente ...

Concernant la protection de ta Colonne A ... il s'agit d'un problème totalement indépendant, je te conseille de créer une nouvelle discussion ...

J'ai refais des tests à l'instant, je t'avoue que je ne comprends pas toujours comment la macro copie les informations.

Par exemple, j'ai mis la colonne "B" avec un fond jaune et ça a effectivement copié la couleur, mais, cette fois, les bordures ne se copiaient pas D:

Est-ce que j'ai cassé quelque chose ? J'ai pourtant remis le code comme toi tu l'avais mis (je me suis amusé à tester les protections)

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) ' Insérer une Colonne avec un clic droit ' Pour utiliser le Format de la Colonne B ... se placer en Colonne C avant le clic droit ' ' Protéger les Colonnes A et B If Target.Column <= 2 Then Exit Sub Columns(Selection.Column).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Cancel = True End Sub

De plus, mes attentes de mon commentaire précédent semblent réalisable tu penses ? Ou cela va me demander beaucoup trop de connaissance à la vue de mes connaissances actuelles ?

Rechercher des sujets similaires à "vba bouton supprimer colonne"