Supprimer des colonnes selon les checkbox cochées VBA

Résolu/Fermé
Lili! Messages postés 1 Date d'inscription vendredi 3 juin 2016 Statut Membre Dernière intervention 3 juin 2016 - 3 juin 2016 à 15:52
 Lili! - 6 juin 2016 à 13:49
Bonjour,

J'ai dans un UserForm une liste de checkbox qui ont pour texte les noms de chaque colonne de ma feuille Excel. Le numéro d'une checkbox correspond au numéro de la colonne qu'elle représente.
Je voudrais lorsque j'en sélectionne une ou plusieurs que la ou les colonnes correspondantes soit supprimées. Cela fonctionne mais cela ne me supprime pas les bonnes colonnes. Voilà le code de mon UserForm :



Private Sub CommandButton2_Click()

Dim Chbx As Control
Dim i As Long
For Each Chbx In Frame1.Controls
If Left$(Chbx.Name, 8) = "checkbox" And Chbx.Value = True Then
i = Mid(Chbx.Name, 9, 1)
Sheets("Feuil1").Columns(i).Delete
End If

Next Chbx

End Sub

Private Sub UserForm_Initialize()

Me.StartUpPosition = 2
CommandButton2.Caption = "Supprimer"
UserForm1.Caption = "Compteurs"
Frame1.Caption = "Compteurs"
With Me.Frame1
.ScrollBars = fmScrollBarsVertical
.ScrollHeight = .InsideHeight * 10
.ScrollWidth = .InsideWidth * 9
End With

Dim i As Long
Dim LastColumn As Long
Dim Cpt As Control
LastColumn = Sheets("Feuil1").Cells(1, 200).End(xlToLeft).Column
For i = 2 To LastColumn
Set Cpt = Frame1.Controls.Add("Forms.CheckBox.1", "checkbox" & i)
Cpt.Caption = Sheets("Feuil1").Cells(1, i).Value
Cpt.Left = 5
Cpt.Top = 5 + ((i - 1) * 20)
Cpt.Width = 120
Cpt.Height = 15

Next i

End Sub


Quelqu'un aurait-il une solution s'il vous plaît ?

Merci d'avance pour votre aide :)
A voir également:

6 réponses

Labdreun Messages postés 12 Date d'inscription vendredi 3 juin 2016 Statut Membre Dernière intervention 7 juin 2016
3 juin 2016 à 17:02
Bonjour,

oui mais quand tu en supprimes une, tout est recalculé dans >Excel
et ta colonne suivant la supprimé, était deux colonnes plus loin avant,
elle s'appelait Z, par exemple tu supprimes Y, elle devient Y...

c''est cà qui me gène:
Sheets("Feuil1").Columns(i).Delete
le i n'est plus le même après le premier delete, non ?
et si tu masques simplement ?
à mon avis
sinon il faut reconnaitre le nom de la colonne plutôt que son rang i

et bon WE...ça sent le repos !
0
Bonjour
je pense a un truc comme ça

Dim LastColumn As Long

Private Sub UserForm_Initialize()
Me.StartUpPosition = 2
CommandButton2.Caption = "Supprimer"
Me.Caption = "Compteurs"
Frame1.Caption = "Compteurs"
   With Me.Frame1
      .ScrollBars = fmScrollBarsVertical
      .ScrollHeight = .InsideHeight * 10
      .ScrollWidth = .InsideWidth * 9
   End With
Dim i As Long
Dim Cpt As Control
LastColumn = Sheets("Feuil1").Cells(1, 200).End(xlToLeft).Column
   For i = 2 To LastColumn
      Set Cpt = Frame1.Controls.Add("Forms.CheckBox.1", "CheckBox" & i)
      Cpt.Caption = Sheets("Feuil1").Cells(1, i).Value
      Cpt.Left = 5
      Cpt.Top = 5 + ((i - 1) * 20)
      Cpt.Width = 120
      Cpt.Height = 15
   Next i
End Sub

Private Sub CommandButton2_Click()
Dim C As Long
   For C = LastColumn To 2 Step -1
      If Controls("CheckBox" & C).Value = True Then
         Sheets("Feuil1").Columns(C).Delete
      End If
   Next
End Sub

A+
Maurice
0
Merci pour vos réponses,

Maurice j'ai essayé ton code, rien ne se passe.
Labdreun j'ai fait en masquant les colonnes mais j'ai un problème pour la dernière colonne. Je ne sais pas pourquoi quand je coche la dernière checkbox qui devrait me masquait la dernière colonne, cela me masque la première. Pourtant il n'y a aucune checkbox qui doit correspondre à la première colonne !
0
Bonjour
Renvoie ton model pour voie ce que tu a fais

A+
Maurice
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
6 juin 2016 à 12:10
Bonjour

si tes chekbox renvoie le nom de la colonne, utilise peut-^tre la fonction Find qui te donnera le numéro de la colonne..

col=rows(1).find(nomdelacolonne,Range("A1"),xlvalues).column

0
Michel,

C'est ce que j'ai essayé de faire ce matin mais je trouvais pas le bon code ^^
Ça marche très bien avec le tien, merci ! :)
0