Supprimer des colonnes selon les checkbox cochées VBA

Résolu
Lili! Messages postés 1 Statut Membre -  
 Lili! -
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 :)

6 réponses

  1. Labdreun Messages postés 13 Statut Membre
     
    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
  2. Maurice
     
    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
  3. Lili!
     
    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
  4. Maurice
     
    Bonjour
    Renvoie ton model pour voie ce que tu a fais

    A+
    Maurice
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  7. Lili!
     
    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