Problème Target.Column après ajout de colonne

Bonjour,
J'ai 2 soucis dans une macro. Celle-ci permet de "cocher" facilement des cases dans des colonnes et de supprimer la croix dans les autres colonnes sur la même ligne.
Cependant, mon premier soucis est que je ne peux pas inserrer de nouvelle colonne sans devoir changer toutes les valeurs "Target.Column", et il y en a un paquet.
Par exemple, pour If Target.Column = 15, si j'insers une colonne, je voudrais que ça passe à 16.
J'aimerais avoir un Target.Column = "nomdecolonne" avec le nomdecolonne = la cellule "A1" par exemple.

Mon deuxième soucis est l'apparition d'un message d'erreur d'exécution '13' si je selectionne plusieurs colonnes. J'aimerais que mon code soit plus propre que ce que j'ai fait pour éviter ce genre de chose (je n'y connais rien à la base en VBA).

Merci de votre aide

Voici mon code (réduit à 3 colonnes) :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Column = 15 And Target = "" Then
Flag = True
Target = "x"
Target.Offset(0, 1).ClearContents
Target.Offset(0, 2).ClearContents
Target.Offset(0, 3).ClearContents
Target.Offset(0, 4).ClearContents
Target.Offset(0, 5).ClearContents
Flag = False

Else
If Target.Column = 15 And Target = "x" Then
Target = ""

End If
End If

If Target.Column = 16 And Target = "" Then
Flag = True
Target = "x"
Target.Offset(0, 1).ClearContents
Target.Offset(0, 2).ClearContents
Target.Offset(0, 3).ClearContents
Target.Offset(0, 4).ClearContents
Target.Offset(0, -1).ClearContents
Flag = False

Else
If Target.Column = 16 And Target = "x" Then
Target = ""

End If
End If

If Target.Column = 17 And Target = "" Then
Flag = True
Target = "x"
Target.Offset(0, 1).ClearContents
Target.Offset(0, 2).ClearContents
Target.Offset(0, 3).ClearContents
Target.Offset(0, -2).ClearContents
Target.Offset(0, -1).ClearContents
Flag = False

Else
If Target.Column = 17 And Target = "x" Then
Target = ""

End If
End If

[...]

End Sub

3 réponses

  1. Bonjour

    Est ce que cette colonne "15" est repérable/identifiable (en tête, dernière colonne de la feuille, une cellule particulière, etc ...)

    Cdlmnt
    0
    1. Bonjour,

      A tester :
      Après avoir nommé la cellule O1 "Reference", tu appliques le code suivant
      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If Selection.Columns.Count > 1 Or Selection.Rows.Count > 1 Then Exit Sub
      If Not Application.Intersect(Target, Range("Reference").Resize(, 3).EntireColumn) Is Nothing Then
      If Target = "" Then
      Cells(Target.Row, Range("Reference").Column).Resize(, 6).ClearContents
      Target = "x"
      Else
      Target = ""
      End If
      End If
      End Sub

      A+
      0
      1. Merci Gyrus, ça va pas mal m'avancer !

        @ccm81 : oui, la ligne 10 est repérable (les cases à cocher commencent à la ligne 11).

        Avec les infos de Gyrus, je pense pouvoir facilement m'en tirer
        0