If Not Intersect([G5:G20], Target) Is Nothing

Bonjour à toutes et tous,

Ma version d’Excel

Microsoft® Excel® pour Microsoft 365 MSO (Version 2309 Build 16.0.16827.20014) 64 bits (Français)

Ma demande est la suivante, je souhaite avec un double-clic dans une cellule insérer automatiquement la phrase « Pré réservation du : 21 09 2023 ».

Les cellules appartiennent à la colonne « G » mais elles sont fractionnées en plusieurs plages.

Exemple :

Plage 1 = [G5:G19]

Plage 2 = [G25:G39]

Plage 3 = [G45:G59]

Plage 4 = [G65:G079]

Plage 5 = [G85:G99]

Plage 6 = [G105:G119]

Plage 7 = [G125:G139]

Plage 8 = [G145:G159]

Plage 9 = [G165:G179]

Plage 10 = [G185:G199]

Plage 11 = [G205:G219]

Plage 12 = [G225:G239]

Pour le moment, j’arrive tant bien que mal à faire fonctionner une petite macro qui me permet d’agir sur le premier segment de colonne [G5:G19].

Ma question est comment insérer dans mon code les autres segments ?

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  If Not Intersect([G5:G20], Target) Is Nothing Then
  Target = Date
 Target = "préréservation le : " & Chr(13) & Chr(10) & Format(Target.Value, "dd mm yyyy")
  Range("B2").Select
  Else
  ActiveCell.Select
  End If
End Sub

VOICI LE FICHIER :

Bonjour,

Comme ceci, je n'ai fait que les 3 premières conditions, finissez les autres en suivant le même principe

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim Plage
    On Error GoTo Sortie
    Application.EnableEvents = False
    Select Case Target.Row
        Case 5 To 19
            Set Plage = Range("G5:G19")
        Case 25 To 39
            Set Plage = Range("G25:G39")
        Case 45 To 79
            Set Plage = Range("G45:G79")
    End Select

    If Not Intersect(Plage, Target) Is Nothing Then
        Target = Date
        Target = "préréservation le : " & Chr(13) & Chr(10) & Format(Target.Value, "dd mm yyyy")
        Range("B2").Select
    End If
Sortie:
    Application.EnableEvents = True
End Sub

Cdlt

Bonsoir,
Arturo83 bonsoir,

Si vos plages sont constantes en taille et en "décalage" alors pour savoir sur quelle plage on se trouve on peut utiliser la formule suivante :
Partie entière (INT) de la ligne de la cellule cliquée (Traget.Row) divisée par le nombre de ligne de la plage (de 5 à 19 = 20) multiplié par la taille de la plage (20) + le numéro de ligne de la première ligne de la première plage (5), ensuite on vérifie que la cellule cliquée (Target) fait partie de cette plage :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    ' on trouve la première ligne de la plage cliquée
    Ligneplage = Int(Target.Row / 20) * 20 + 5
    ' on crée la plage en partant de cette ligne et on ajoute 14 (5 à 19, ou bien 25 à 39 etc)
    Set Plage = Range("G" & Ligneplage & ":G" & Ligneplage + 14)
    ' si la cellule cliquée fait partie de cette plage
    If Not Intersect(Plage, Target) Is Nothing Then
        ' on annule l'effet du double clic
        Cancel = True
        Target = "préréservation le : " & Chr(10) & Format(Date, "dd mm yyyy")
    End If
End Sub

@ bientôt

LouReeD

Bonjour à tous,

tu peux aussi faire une union de plage :

Dim pl As Range
Set pl = Union([G5:G19], [G5:G19], [G65:G079])

(ici 3 pour l'exemple) et faire ton Intersect() sur pl

@LouReed
je pense qu'il faudrait tester les bornes inférieure et supérieure.
En cas de double-clic en ligne 8 ou 250

Bonjour

Supérieure oui pour ne pas avoir de date en dehors de zone utile, inférieure je ne pense pas, du moins au niveau de mes tests cela fonctionnait et si clic en 8 alors on est dans la première plage si clic en 4 on est dans la première plage mais non en intetsect.

Le soucis de la limite supérieure = modification du code pour adapter à la nouvelle taille, sans rien = zjout de zone simplifié. Toujours dans le cas même taille même décalage.

@ bientôt

LouReeD

Bonjour Zazou36, le Fil,

Tu donnes une couleur de fond particulière à ces plages de cellules.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  If Target.Interior.Color = rgb(255,255,254) Then
Application.enableevents=false
  Target = Date
 Target = "préréservation le : " & Chr(13) & Chr(10) & Format(Target.Value, "dd mm yyyy")
  Range("B2").Select
Application.enableevents=true
  Else
  ActiveCell.Select
  End If
End Sub

Ci-dessus la composante bleue du RGB à été réduite d'une unité. Ce qui pour un utilisateur passera inaperçu par rapport à d'autres cellules en fond blanc. Mais sera bien détecté par le code.

Sinon tout autre couleur si l'on souhaite distinguer d'avantage ces plages du reste du tableau.

Bonsoir,

perso j'ai supprimé le Range("B2").Select. En effet ceci fait remonté la feuille alors que l'on est en train de saisir des données sur les lignes du bas par exemple, et comme l'on joue avec le double clic il n'est pas utile de désélectionner la cellule venant d'être activée afin de redétecter le double clic dessus...

L'idée des couleurs est bonne ! X Cellus Et tout comme "ma formule" seule l'accès à la feuille est nécessaire pour l'évolution, et les plages colorées n'ont pas l'obligation de respecter la taille et le décalage comme avec la formule...

@ bientôt

LouReeD

Bonjour et merci Arturo83

Bonjour et merci LooReeD

Bonjour et merci Eriiic

Bonjour et merci XCellus

Vos codes m’ont beaucoup aidé.

Il est vrai que la découpe de mon tableau est particulière, mais ce planning de réservation m’a été imposé.

Je vous remercie encore pour l’intérêt apporté à ma question et pour les solutions. Je mets en place et je continue.

Mon problème est résolu !

MERCI.

Bonjour,

tu peux aussi sélectionner tes plages, nommer la sélection et faire l'intersect() avec ce nom.
L'avantage est que tu as juste à modifier le nom en cas d'évolution, sans besoin de toucher au code.
eric

Rechercher des sujets similaires à "intersect g20 target nothing"