2 événements Worksheet_SelectionChange sur la même feuille
Bonjour,
Je souhaiterais faire cohabiter sur la même feuille 2 événements Worksheet_SelectionChange, le problème étant que j'ai un conflit de nom.
Voici les 2 Subs (qui n'ont rien à voir).
Je mets le classeurs en pièce jointe.
Merci d'avance
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'au changement de selection dans l'onglet
Dim Fichier As String
If Target.Value = "" Then Exit Sub
If Not Application.Intersect(Target, Range("F8:F54")) Is Nothing Then
Fichier = "https://www.google.fr/maps/place/" & Target.Value
Ouvrir Fichier
End If
End Subet
Private TEST As Boolean 'déclare la variable TEST
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'au changement de selection dans l'onglet
Dim PL As Range 'déclare la variable PL
Set PL = Range("A8:A54") 'définit la plage PL
If Intersect(PL, Target) Is Nothing Then Exit Sub 'si le changement a lieu ailleurs que dans la plage PL, sort de la procédure
If Target.Count > 1 Then Exit Sub 'si le changement a lieu dans plusieurs cellules de la plage PL, sort de la procédure
If TEST = True Then Exit Sub 'si TEST est [Vrai], sort de la procédure (je préfère ça à EnableEvents = False)
AV = Target.Value 'définit l'ancienne Valeur AV (déclarée publique dans le module [Tri_plage]
End Sub
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim PL As Range 'déclare la variable PL
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim LD As Byte 'declare la variable LD (Ligne de Départ)
Dim LF As Byte 'declare la variable LF (Ligne de Fin)
Dim LI As Byte 'declare la variable LI (LIgne)
Set PL = Range("A8:A54") 'définit la plage PL
If Intersect(PL, Target) Is Nothing Then Exit Sub 'si le changement a lieu ailleurs que dans la plage PL, sort de la procédure
If Target.Count > 1 Then Exit Sub 'si le changement a lieu dans plusieurs cellules de la plage PL, sort de la procédure
If TEST = True Then Exit Sub 'si TEST est [Vrai], sort de la procédure (je préfère ça à EnableEvents = False)
If Not IsNumeric(Target.Value) Or 47 < Target.Value Or 1 > Target.Value Then 'condition : si la cellule modifié contient une valeur inférieure à 1 ou supérieure à 40
MsgBox "Merci de saisir une valeur numérique comprise entre 1 et 40 !!! " 'message
With Application 'prend en compte l'Application
.EnableEvents = False 'n'autorise plus les procédures événementielles
.Undo 'annule de vient d'être fait
.EnableEvents = True 'autorise les procédure événementielles
End With 'fin de la prise e compte de l'Apllication
End If 'fin de la condition
TEST = True 'définit la variable TEST
Target.Value = Target.Value \ 1 'si une valeur décimale est éditée, remplace par la valeur entière
If AV < Target.Value Then 'condition : si l'ancienne valeur de la cellule modifiée est inférieure à la nouvelle valeur
LD = Target.Row + 1 'définit la ligne de départ LD
Else 'sinon
For Each CEL In PL 'boucle sur toutes les cellules CEL de la plage PL
'si la valeur de la cellule CEL est égale à la valeur de la cellule modifié et que leur adresse est différente,
If CEL.Value = Target.Value And CEL.Address <> Target.Address Then LD = CEL.Row: Exit For 'définit la ligne de départ LD et sort de la boucle
Next CEL 'prochaine cellule de la boucle
End If 'fin de la condition
'LF = IIf(AV > Target.Value, Target.Row - 1, Target.Row + 1) 'définit la ligne de fin LF en fonction de l'ancienne valeur (une ligne au-dessus ou au-dessous de la cellule modifiée)
If AV > Target.Value Then 'condition : si l'ancienne valeur de la cellule modifiée est inférieure à la nouvelle valeur
LF = Target.Row - 1 'définit la ligne de départ LD
Else 'sinon
For Each CEL In PL 'boucle sur toutes les cellules CEL de la plage PL
'si la valeur de la cellule CEL est égale à la valeur de la cellule modifié et que leur adresse est différente,
If CEL.Value = Target.Value And CEL.Address <> Target.Address Then LF = CEL.Row: Exit For 'définit la ligne de départ LD et sort de la boucle
Next CEL 'prochaine cellule de la boucle
End If 'fin de la condition
For LI = LD To LF 'boucle sur toutes les ligne LI de LD à LF
Cells(LI, 1).Value = IIf(AV > Target.Value, Cells(LI, 1).Value + 1, Cells(LI, 1).Value - 1) 'incrémente la cellule ligne Li colonne 1
Next LI 'prochaine ligne de la boucle
If Not Intersect(Target, PL) Is Nothing Then Tri 'lance la procédure [Tri]
Range("A1").Select 'sélectionne la cellule A1
TEST = False 'réinitialise la variable TEST
End Sub
... à suivre ...
bonjour,
Supprimer les 2 Worksheet_SelectionChange et remplacer par celle-ci :
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'au changement de selection dans l'onglet
Dim Fichier$, S$
If Target.Count = 1 Then
S = Target.Value
If S <> "" Then
If Not Intersect(Target, Range("A8:A54")) Is Nothing Then
AV = S
End If
If Not TEST And Not Application.Intersect(Target, Range("F8:F54")) Is Nothing Then
Fichier = "https://www.google.fr/maps/place/" & S '' Liens GoogleMaps
Ouvrir Fichier
End If
End If
End If
End SubA+
Galopin m'a grillé ... je le laisse donc terminer cette question.
Parfait !
Merci à Galopin et au forum
Salut à tous,
Vos précédentes macros m'ont bien aidé, mais je bloque sur la fonction intersect. Je m'explique:
J'aimerai pouvoir appliquer un zoom sur la case "H11" et sur la sur case "D42" quand elles sont activées (indépendamment), et "dézoomer" lorsqu'elles ne le sont plus.
J'arrive à le faire lorsqu'il n'y a qu'une cellule (ex avec "H11")
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Range("H11"), Target) Is Nothing And Target.Count = 1 Then
ActiveWindow.Zoom = 80
Else
ActiveWindow.Zoom = 60
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveWindow.Zoom = 60
End SubMais je n'arrive pas à combiner pour que cela fonctionne sur deux cellules...
J'ai essayé quelque chose mais mes compétences sont limitées
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim PL As Range, DL As Range
Set PL = Range("H11")
Set DL = Range("D42")
If Not Intersect(PL, DL, Target) Is Nothing And Target.Count = 1 Then
ActiveWindow.Zoom = 80
Else
ActiveWindow.Zoom = 60
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveWindow.Zoom = 60
End SubEst-il possible de zoomer et dézoomer sur chacunes des cases ?
Je vous remercie d'avance !