Supprimer une colonne selon une combobox

Imer2007

XLDnaute Occasionnel
Bonjour à tous,

Petit problème qui je suis sur ne vous rebutera pas.

Comment est il possible de supprimer une colonne en fonction d'une combobox.

Je sais le faire pour la suppression de ligne avec cette formule:
Nomdelafeuille.Rows(userform.combobox.ListIndex).Delete

Mais pour une colonne, j'ai essayé
Nomdelafeuille.Columns(userform.combobox.ListIndex).Delete

Et ca ne marche pas, ca me supprime la toute première colonne de ma feuille et non la colonne correspondant à la valeur du combobox.

Quelqu'un aurait-il une idée ?

D'avance merci !
 

Imer2007

XLDnaute Occasionnel
Re : Supprimer une colonne selon une combobox

Bonjour Pierrot, le forum,

Cette fois ci ca devrait être bon pour le fichier joint.

En espérant que tu puisses voir mon problème.

Cordialement,
 

Pièces jointes

  • test.xls
    46 KB · Affichages: 45
  • test.xls
    46 KB · Affichages: 40
  • test.xls
    46 KB · Affichages: 40

Pierrot93

XLDnaute Barbatruc
Re : Supprimer une colonne selon une combobox

Bonjour Imer

comprends pas trop ce que tu cherches à faire ? supprimer les lignes ou les colonnes, nous étions partis sur des colonnes..... il n'y a que 2 lignes de renseignées sur la colonne A....

commence déjà par enlever dans ton code le "on error resume next" qui permet de continuer l'exécution du code sans se préoccuper des erreurs. Cela engendre bien souvent des résultats surprenants quant à la suite lorsque ces erreurs ne sont pas gérées....

A noter tu utilise la propriété "rowsource" pour alimenter ta combo, et ce à partir d'une plage nommée, regarde bien la référence de cette plage après suppression... elle n'est plus valide....

bonne journée
@+
 
Dernière édition:

Imer2007

XLDnaute Occasionnel
Re : Supprimer une colonne selon une combobox

Re,

Alors pour faire simple (alors que j'aime énormément le compliqué), le principe est le suivant :

dans la feuille BDBAL, la colonne A récupère les valeurs du combobox de création de BAL et j'ai affecté un nom a cet ensemble (listedyn_bal).
Dans la feuille BAL, les 2 premieres colonnes concernent les agents et service.
La colonne C récupère la valeur de la 2eme ligne de listedyn_bal, D la 3 eme, E, la 4 eme, etc.

En gros, pour exemple j'ai

Feuil BDBAL

A1 : titre
A2 : *** (ligne qui ne doit pas être supprimée sinon la référence à listedyn_bal n'est plus valide)
A3 : nom_bal1
A4 : nom_bal2
A5 : nom_bal3
etc.

Le petit +, c'est que ma listedyn_bal est triée automatiquement lorsqu'une nouvelle BAL est ajoutée à la liste

Feuil BAL

A1 | B1 | C1 | D1 | E1 | etc.
Nom | Service | Nom_bal1 | Nom_bal2 | Nom_bal3 | etc.

En espérant que cela a été plus clair.

Jusuqu'à présent, mon code fonctionne pour :
- la création des bal (nom_bal1, nom_bal2, etc.)
- le tri automatique
- la récupération des noms des bals dans la feuil BAL
- le seul souci c'est si je veux supprimer une BAL, la suppression fonctionne quand même sauf pour la dernière colonne.

C'est vraiment du pinaillage que je demande, donc si c'est pas possible, c'est pas grave! :D
 

Pierrot93

XLDnaute Barbatruc
Re : Supprimer une colonne selon une combobox

Re,

regarde le code ci-dessous si il peut t'aider, mais avant enlève ta ligne "on error resume next" et déclare les variables :

Code:
Dim x As Range
If list_bal.ListIndex <> -1 Then
    Set x = Feuil2.Range("1:1").Find(list_bal.Value, , xlValues, xlWhole, , , False)
    If Not x Is Nothing Then x.EntireColumn.Delete
End If
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Supprimer une colonne selon une combobox

Bonjour à tous,
il faudrait déjà modifier ceci ( remplacer a1 par a3)
Code:
'Tri de la BD BAL
Range("[B][COLOR=red]a3[/COLOR][/B]:A50").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
pour que les deux premières cellules restent à leur place
............. mais il y a d'autres problèmes

à+
Philippe
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Supprimer une colonne selon une combobox

Re,
Je suis sur que c'est un truc tout con
effectivement, c'était tout con mais pas évident à découvrir
le problème venait du fait qu'entre les suppressions effectuées sur une feuille et ensuite sur l'autre ,l'index avait changé de valeur
voir la variable "cherche" dans le code
j'ai également changé la définition de la liste dynamique qu alimente le combobox

à+
Philippe

PS: absent cet après-midi, je suis dans mon jardin :):):)
 

Pièces jointes

  • 111.zip
    17.8 KB · Affichages: 26
  • 111.zip
    17.8 KB · Affichages: 36
  • 111.zip
    17.8 KB · Affichages: 21

Imer2007

XLDnaute Occasionnel
Re : Supprimer une colonne selon une combobox

Philippe,

Ton code marche excepté pour 2 choses :
- si on rajoute plus de 3 valeurs dans la liste, ca ne s'affiche pas (alors du coup il faut modifier la référence de listedyn_bal.
L'avantage de la formule avec le DECALER permet, quoiqu'il se passe (suppression ou création de valeur), la longueur de la liste est modifiée aussi.

- Si je supprime "Alain", ca créé un espace vide dans la liste déroulante et ainsi de suite (et là aussi la fonction DECALER permet d'éviter ces blancs). Et si je supprime tout, listedyn_bal n'est plus valide

Donc en gros, j'en suis au même point.

Après si c'est trop complexe, comme je l'ai dit, c'est pas grave, mais c'était juste histoire d'améliorer encore plus l'application.
 

Imer2007

XLDnaute Occasionnel
Re : Supprimer une colonne selon une combobox

Sinon, vu qu'apparement la suppression fait défaut, j'ai bien une autre idée :
ne pas supprimer mais "modifier" la cellule.
Je cherche ma valeur de combobox et au lieu de supprimer la colonne correspondante, je mets la nouvelle valeur à "rien".

Un bouton de commande qui exécuterait quelque chose comme :

recherche list_bal.value dans feuille BAL
modifie son contenu en ""
Puis trier la ligne
 

Imer2007

XLDnaute Occasionnel
Re : Supprimer une colonne selon une combobox

Re à tous,

J'ai finalement trouvé la solution !!!

Et quand je dis qu'elle est con, c'est qu'elle est vraiment bête !
J'ai tenté plusieurs manip' et à chaque fois ca ne marchait pas...
Et tout simplement, après 30000 essais, j'ai juste inversé l'ordre dans le vba, c'est à dire qu'il supprime en premier le contenu de BAL puis le contenu de la BD BAL et là ca marche !!!

Philippe, j'ai résolu aussi le problème des espaces vides en truquant un peu. En fait ma liste dynamique se termine par "---".
Cette ligne ne peut pas être supprimée et donc le contenu de ma liste dynamique évolue entre "***" et "---". :cool:

Voilà le code pour ceux que ca intéresse.

Private Sub suppr_bal_Click()
If list_bal.Value = "***" Or list_bal.Value = "'---" Then
Exit Sub
End If

'Suppression dans BAL Code de Pierrot93
Dim x As Range
If list_bal.ListIndex <> -1 Then
Set x = Feuil8.Range("1:1").Find(creabal.list_bal.Value, , xlValues, xlWhole, , , False)
If Not x Is Nothing Then x.EntireColumn.Delete
End If

'Tri dans la feuille BAL
Range("C1:AZ150").Select
Selection.Sort Key1:=Range("C1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal
MsgBox "La BAL a été supprimée"
Sheets("Menu").Select

'Suppression dans la BD BAL
Feuil10.Rows(creabal.list_bal.ListIndex + 2).Delete
creabal.list_bal.RowSource = "listedyn_bal"

'Tri de la BD BAL
Sheets("BDBAL").Select
Range("A3:A50").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Cells(3, 1).Select
Selection.Cut
[A65000].End(xlUp).Offset(1, 0).Select
Selection.Insert Shift:=xlDown

'RAZ du userform
Unload Me
creabal.Show
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 715
Messages
2 091 278
Membres
104 831
dernier inscrit
lilouevan