Mauvaise utilisation du if
Bonjour tout le monde,
J'espère pouvoir trouver une solution a mon problème en posant cette question. Mon problème étant que je penses j'utilises mal la fonction If. Mon but est que lorsque j'ouvre mon userform je puisses sélectionner des checkbox qui vont me permettre de supprimer des "ranges". Le soucis est que lorsque je sélectionne plusieurs checkbox une seule "range" est supprimer. Je ne sais pas si je sui clair je vous laisse mon programme pour vous aider je reste à votre disposition pour toute question
Private Sub CommandButton1_Click()
Sheets("Feuil1").Unprotect Password:="faucigny"
Dim plg$
If CheckBox1 Then plg = "A2:D2"
If CheckBox2 Then plg = "A3:D3"
If CheckBox3 Then plg = "A4:D4"
If CheckBox4 Then plg = "A5:D5"
If CheckBox5 Then plg = "A6:D6"
If CheckBox6 Then plg = "A7:D7"
If CheckBox7 Then plg = "A8:D8"
If CheckBox8 Then plg = "A9:D9"
If CheckBox9 Then plg = "A10:D10"
If CheckBox10 Then plg = "A11:D11"
With Worksheets("Feuil2")
If plg <> "" Then
.Unprotect "faucigny"
.Range(plg).Delete 2
.Protect "faucigny"
End If
End With
End SubBonjour tanguy2604, le forum,
Un essai....à affecter au bouton....
Sub TEST2()
Dim i As Integer, j As Integer, derlig As Integer
Application.ScreenUpdating = False 'évite le scintillement de l'écran
With Worksheets("Feuil2") 'on agit sur la feuille 2
.Activate 'affiche la feuille 2 (facultatif)
For i = 1 To Sheets("Feuil1").OLEObjects.Count 'boucle sur les checkbox
If Sheets("Feuil1").OLEObjects("CheckBox" & i).Object.Value Then 'si checkbox cochée
derlig = .UsedRange.Rows.Count + 1 'dernière ligne utilisée de la feuille 2
'derlig = .Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne utilisée de la colonne A de la feuille 2
.Unprotect "faucigny"
If Application.WorksheetFunction.CountA(.Range("A" & i + 1 & ":D" & i + 1)) = 4 Then .Range("A" & i + 1 & ":D" & i + 1).ClearContents 'si la la ligne correspondant à la checkbox est remplie de A à D, on efface les données
End If
Next i
For j = derlig To 2 Step -1 'boucle de la dernière ligne à la ligne 2
If Application.WorksheetFunction.CountA(.Range("A" & j & ":D" & j)) = 0 Then .Rows(j).EntireRow.Delete 'si aucune donnée de A à D, on supprime la ligne
Next j
.Protect "faucigny"
End With
Application.ScreenUpdating = True
End Sub
Il y a peut-être moyen de faire plus simple....
Cordialement,
Effectivement ta solution est exactement le fonctionnement que je recherche mais je ne suis pas très bon en VBA
Bonsoir tanguy2604, le forum,
J'ai pas mal galéré ( je ne suis pas un pro non plus,
Si j'ai bien compris, les données de la feuille1 (colonnes O,P,Q,R) seront toujours semblables aux données de la feuille2 (colonnes A,B,C,D) ?
- J'ai finalement abandonné l'idée des checkbox et privilégié une listbox à sélection multiple.
- A l'aide de l'USF 2 , on alimente simultanément les 2 feuilles au moyen de tableaux structurés
- Avec l'USF 3, on supprime simultanément les lignes des 2 feuilles dont le nom de l'entreprise correspond au(x) choix de la listbox
En espérant que cela te convienne,
Cordialement,
Ah oui alors la c'est exactement ce que je recherchais à faire, je ne pensais pas que l'ont pourrais passer par une ListBox merci beaucoup
Re,
Merci pour ton retour,
est-ce que tu sais si il est possible d'ajuster automatiquement la taille de l'USF3 en fonction de la taille de la ListBox (donc du nombre d'entrprise en fait)
Heu non....mais pourquoi faire ?
Dès que tu dépasse la taille que tu as définie pour ta listbox, une barre de défilement apparait à droite....
Cordialement,