Suppression de la colonne au lieu de la ligne

Bonsoir à Tous,

J'ai rajouté ce code dans ma feuille "Liste produit" :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Intersect(Target, Range("H:H")) Is Nothing Then

ActiveCell.Offset(0, 1).Select

End If

End Sub

Et quand je souhaite supprimer une ligne à l'intérieur de mon tableau, il me supprime la colonne B ?

Quelqu'un à une idée ou modif du code.

Merci pour votre Aide

13stock-sav-rev12.xlsm (448.43 Ko)

Bonsoir Marc1972,

Et quand je souhaite supprimer une ligne à l'intérieur de mon tableau, il me supprime la colonne B ?

Il ne supprime pas la colonne B, il sélectionne la cellule à droite de la cellule active....

ActiveCell.Offset(0, 1).Select

Si tu cliques en H2, il sélectionne I2.....

Bonne soirée,

Bonjour,

à tout hasard : tu as un écran pas très large, et avant exécution de la macro, les colonnes visibles sont de A à H ; donc ensuite, après exécution de la macro, c'est allé en colonne I ➯ l'écran a défilé à droite d'une colonne, donc maint'nant, les colonnes visibles sont B à I ; j'ai une très bonne nouvelle pour toi : ta colonne A qui n'est plus visible n'a pas été supprimée : elle est toujours à gauche de la colonne B ; il te suffit de faire défiler l'écran à gauche pour voir ta colonne A réapparaître miraculeusement !

(ça doit être ça, la magie de Noël ! )

dhany

ajout : après avoir téléchargé ton fichier, je confirme : sur mon écran large, cliquer sur une cellule de la colonne H fait que ça sélectionne la cellule de droite, en colonne I, cela sans faire défiler l'écran à gauche ➯ la colonne A reste visible ! sur ton écran riquiqui, il vaut mieux réduire ton gros zoom actuel de 140% à mettons 80% ! surtout, n'oublie pas de commander un écran plus grand au Père Noël !

screen

dhany

Bonjour,

Une proposition de modification :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rng As Range
    If Target.CountLarge > 1 Then Exit Sub
    If Target.ListObject Is Nothing Then Exit Sub
    Set rng = Me.ListObjects(1).ListColumns(8).DataBodyRange
    If Not Intersect(Target, rng) Is Nothing Then
        Target.Offset(, 1).Select
    End If
End Sub

Bonjour Jean-eric

Merci pour ta solution elle fonctionne à parfaitement.

Peux-tu me la commenter, pour mieux comprendre.

Merci

Dhany, merci également pour ta réponse

mais je viens de refaire un essaie mais j'ai bien ma colonne B qui ce supprime.

Merci à vous deux

Bonjour,

Ci-dessous les explications souhaitées.

A te relire.

Cdlt.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Déclaration des variables
Dim rng As Range
    'Une seule cellule doit être sélectionnée
    If Target.CountLarge > 1 Then Exit Sub
    'La cellule doit être dans le tableau
    If Target.ListObject Is Nothing Then Exit Sub
    'On détermine la plage de cellules à surveiller
    '[soit la colonne 8 (Quantité en stock) de T_Produits]
    Set rng = Me.ListObjects(1).ListColumns(8).DataBodyRange
    'Si la cellule sélectionnée est incluse dans la plage
    If Not Intersect(Target, rng) Is Nothing Then
        'La cellule à droite est sélectionnée
        Target.Offset(, 1).Select
    End If
End Sub

Bonsoir à tous.

Et merci beaucoup Jean-eric

par contre j'ai voulu que le code agisse également dans la colonne 9

Mais j'ai une erreur merci pour ta correction

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim rng As Range

If Target.CountLarge > 1 Then Exit Sub

If Target.ListObject Is Nothing Then Exit Sub

Set rng = Me.ListObjects(1).ListColumns(8, 9).DataBodyRange

If Not Intersect(Target, rng) Is Nothing Then

Target.Offset(, 1).Select

End If

End Su

Bonsoir Marc,

à tout hasard, essaye avec :

Set rng = Me.ListObjects(1).ListColumns(8 & ":" & 9).DataBodyRange

OU

Set rng = Me.ListObjects(1).ListColumns("8:9").DataBodyRange

dhany

Re,

On va finir par faire une usine à gaz.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rng As Range, rng2 As Range
    If Target.CountLarge > 1 Then Exit Sub
    If Target.ListObject Is Nothing Then Exit Sub
    Set rng = Me.ListObjects(1).ListColumns(8).DataBodyRange
    Set rng2 = Me.ListObjects(1).ListColumns(9).DataBodyRange
    If Not Intersect(Target, Union(rng, rng2)) Is Nothing Then
        Target.Offset(, -2).Select
    End If
End Sub

Re,

@ dhany,

A tout hasard, documente toi sur les propriétés et méthodes de l'objet ListObjet pour Excel 2007.

Cdlt.

Merci pour vos réponses

Est-ce possible de positionné toujours le curseur en colonne 10 que je sélectionne la colonne 8 ou 9 ??

Merci

Bonjour,

Une mise à jour.

Cdlt.

'Le tableau commence en A1 (impératif) et le nom et les colonnes sont figés
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rng As Range
    If Target.CountLarge > 1 Then Exit Sub
    If Target.ListObject Is Nothing Then Exit Sub
    Set rng = Range("T_Produits[[Quantité en stock]:[Emplacement]]")
    If Not Intersect(Target, rng) Is Nothing Then
        Select Case Target.Column
            Case 8: Target.Offset(, 2).Select
            Case 9: Target.Offset(, 1).Select
        End Select
    End If
End Sub

Bonjour Jean-Eric et au forum

Merci beaucoup c'est parfait.

Bonne soirée

Bonjour Jean-Eric et au forum

J'essaie de rajouter une colonne un peu plus loin la N°11

Voici le code mais j'ai une erreur ??

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim rng As Range

If Target.CountLarge > 1 Then Exit Sub

If Target.ListObject Is Nothing Then Exit Sub

Set rng = Range("T_Produits[[Quantité en stock]:[Emplacement], [Prix agent]]")

If Not Intersect(Target, rng) Is Nothing Then

Select Case Target.Column

Case 8: Target.Offset(, 2).Select

Case 9: Target.Offset(, 1).Select

Case 11: Target.Offset(, 1).Select

End Select

End If

End Sub

Bonjour,

Essaie ainsi :

Set rng = [T_Produits[Quantité en stock]:T_Produits[Emplacement]:T_Produits[Prix Agent]]

Bonsoir,

Merci

Rechercher des sujets similaires à "suppression colonne lieu ligne"