"Effacer"ou supprimer une plage de cellules à partir d'un userform

florent@77

XLDnaute Junior
Bonjour à tous,

Je souhaiterais effacer ou supprimer un plage de cellules dans un autre feuille de mon classeur via un userform.
J'arrive à "effacer" une cellule en écrivant du blanc par dessus mais je n'arrive pas à le faire sur une plage de cellules. Le must serait même de pouvoir les supprimer.
J'ai regardé pas mal de choses dans le forum et sur le net, mais je n'arrive pas à l'effet désirer
Est ce que quelqu'un pourrait m'aider ou m'aiguiller sur ce sujet
Ci joint un exemple où j'arrive bien à "effacer" la cellule mais pas la plage de cellules
 

Pièces jointes

  • Effacement plage données.xlsm
    23.2 KB · Affichages: 47

vgendron

XLDnaute Barbatruc
hello

Voici une proposition

Code:
Private Sub CommandButton1_Click()

Dim cellule As Range

With Sheets("Test")
    'on set la zone de recherche = colonne F du tableau
    Set zone = .Range("F2:F" & Range("F" & Rows.Count).End(xlUp).Row)
    'on cherche en colonne F la valeur sélectionnée dans le combobox
    Set c = zone.Find(ComboBox1.Value, lookat:=xlWhole)
    ' si le nom est trouvé
    If Not c Is Nothing Then
        'on efface les données sur les 4 colonnes
        c.Resize(, 4).ClearContents
    End If
   
End With
   
MsgBox ("terminé")
   
End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub

Private Sub UserForm_Initialize()

With Sheets("Données")
    ComboBox1.List = .Range("A2:A" & .Range("A65536").End(xlUp).Row).Value
End With

End Sub
 

vgendron

XLDnaute Barbatruc
en fait. je pense que ca ne fonctionne pour aucun nom..
avec ce code dans lequel j'ai ajouté l'activation de la feuille Tests
Code:
Private Sub CommandButton1_Click()

Dim cellule As Range
Sheets("Test").Activate

With Sheets("Test")
    'on set la zone de recherche = colonne F du tableau
    Set zone = .Range("F2:F" & Range("F" & Rows.Count).End(xlUp).Row)
    'on cherche en colonne F la valeur sélectionnée dans le combobox
    Set c = zone.Find(ComboBox1.Value, lookat:=xlWhole)
    ' si le nom est trouvé
    If Not c Is Nothing Then
        'on efface les données sur les 4 colonnes
        c.Resize(, 4).ClearContents
    End If
 
End With
MsgBox ("terminé")
 
End Sub

encore une subtilité de with sheets("..") que je n'ai pas saisie..
malgré ce with sheets.
la ligne c.resize.clearcontents se fait dans la feuille active.. cad:; Données puisque le bouton de la macro est dans cette feuille

Edit.. ah bah non. la version précédente marche très bien chez moi. je peux tout effacer les uns après les autres. dans n'importe quel ordre..
 
Dernière édition:

florent@77

XLDnaute Junior
Re-bonjour vgendron,

J'ai trouvé et maintenant cela marche

A la place : Set zone = .Range("F2:F" & Range("F" & Rows.Count).End(xlUp).Row)
j'ai mis : Set zone = .Range("F2:F" & Range("F" & Rows.Count).End(xlDown).Row)

et pour supprimer :

A la place de : c.Resize(, 4).ClearContents
J'ai mis : C.Resize(, 4).Delete

un grand MERCI à toi
 

vgendron

XLDnaute Barbatruc
Bizarre ce que tu me dis la..
A la place : Set zone = .Range("F2:F" & Range("F" & Rows.Count).End(xlUp).Row)
j'ai mis : Set zone = .Range("F2:F" & Range("F" & Rows.Count).End(xlDown).Row)

parce que le
Code:
.Range("F2:F" & Range("F" & Rows.Count).End(xlUp).Row)
équivaut à .Range("F2:F65536".End(xlUp)

65536 étant le max de lignes pour du excel 98 (je crois)
et pour les nouvelles versions, c'est plutot beaucoup plus..

donc; en partant de la toute dernière ligne, on remonte.
alors que ce que tu as remplacé. fait qu'on descend..
bref. tu fais un set zone=.range("F:F") = toute la colonne

bon. si ca fonctionne. tant mieux..
 

Discussions similaires

Statistiques des forums

Discussions
312 895
Messages
2 093 383
Membres
105 714
dernier inscrit
POKITO