Action sur cellules sélectionnées via Application.InputBox

Bonjour à tous,

Dans la cadre d'une macro, je propose à l'utilisateur ce tableau ( exemple) :

image

Je lui demande de sélectionner les lignes qu'il veut supprimer.Avec Application.inputBox

Il choisit par exemple avec la souris: $B$6;$B$8,$B$10,$B$12 que je rapatrie dans un Range : cell1

Ca fonctionne très bien le code : cell1.EntireRow.Delete shift:=xlUp

Par contre si je ne veux supprimer que les plages des colonnes B à G des cellules sélectionnées, le code :

Range(cell1, cell1.Offset(0, 6)).Delete shift:=xlUp , ne me supprime que la plage de la première cellule choisie (soit B6:G6)

J'ai beau chercher, je ne trouve pas la bonne syntaxe !

Merci d'avance pour votre aide

Michael

Bonjour,

Vous devriez mettre vos données sous tableau structuré. Ensuite, pouvez-vous poster votre code ?

Voici le principe, en faisant une union des cellules à supprimer, surtout si les lignes ne sont pas collées :

Sub ClicSuppress()

Dim rselect As Range, rsupp As Range

On Error GoTo fin
Set rselect = Application.InputBox("Cliquez une cellule du tableau pour en supprimer la ligne", , , , , , , 8)

For Each cell In rselect
    If Not Intersect(cell, Range("Tableau1")) Is Nothing Then
        If rsupp Is Nothing Then
            Set rsupp = Intersect(cell.EntireRow, Range("Tableau1"))
        Else
            Set rsupp = Union(rsupp, Intersect(cell.EntireRow, Range("Tableau1")))
        End If
    End If
Next cell

rsupp.Interior.Color = 255

If MsgBox("Vous êtes sur le point de supprimer les cellules " & rsupp.Address & " !" & vbCrLf & vbCrLf & _
    "Voulez-vous continuer ?", vbCritical + vbYesNo, "Demande de confirmation") = vbYes Then
    rsupp.Delete
Else
    rsupp.Interior.Color = xlNone
End If

fin:
End Sub

Cdlt,

Merci 3GB pour votre réponse,

Non, je ne récupère pas la réponse sous forme de tableau.Et je voudrais l'éviter, si possible.

Je vous joins un exemple Excel ,ainsi qu"un bout de code :

Dim cell1 As Range

On Error Resume Next

Set cell1 = Application.InputBox _
("Si vous souhaitez supprimer des lignes : Sélectionner une OU PLUSIEURS cellules, COLONNE B, avec la souris", , , , , , , 8)

Sheets("CLIENT").Range("B1").Formula = cell1.Address

If (Err.Number > 0) Then
MsgBox "Vous avez choisi de ne pas supprimer de lignes"

End If

'supprimer les lignes sélectionnées :

'cell1.EntireRow.Delete shift:=xlUp '
2classeur2.xlsm (15.98 Ko)

pour supprimer les lignes entières

Range(cell1, cell1.Offset(0, 6)).Delete shift:=xlUp ' pour supprimer les plages des cellules sélectionnées

Ce que je ne comprends pas, c'est que cela fonctionne pour supprimer des lignes entières, mais pas des plages

Merci de vos conseils

Michael

En fait cell1 est un objet range. Donc cell1.entirerow renvoie la ligne entière de cell1, un autre objet range.

Alors que range(cell1, ...) renvoie une erreur car il faut une adresse, de type string. Ceci marcherait :

cell1.resize(1, 6).Delete shift:=xlUp
'ou
Range(cell1.resize(1, 6).address).Delete shift:=xlUp

Cdlt,

Désolé, mais ça ne fonctionne pas

En fait cela fonctionne si l'utilisateur ne sélectionne qu'une cellule, mais pas plusieurs...

Salut Michael,

Oui, le .resize donne la méthode à appliquer pour retailler l'ensemble de cellules duquel on part.

Voici un fichier avec un tableau structuré.

Bonne soirée,

4michaelh.xlsm (18.35 Ko)

Bonjour 3GB,

Merci c'est parfait !

Je ne connaissais pas ce principe de tableau normé.

Encore bravo et bon week-end

Michael

Bonjour Michael,

Oui, souvenez-vous qu'il faut mettre les données sous forme de tableau structuré dès que possible, vous verrez que ça facilite grandement les choses !

Merci et très bon week-end à vous aussi !

Rechercher des sujets similaires à "action selectionnees via application inputbox"