Microsoft 365 Activer "useform" dans une ou plusieurs cellules

Dravol

XLDnaute Junior
Bonjour à tous,

Je voudrais activer un useform dans plusieurs cellules (que j'aurais préalablement défini).

Dans cette exemple simple sur la cellule A1, mon code s'active sur toute les cellules (dés que je clique dans une cellule de ma feuille, le useform s'active)...

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target = [A1] Then UserForm1.Show
End Sub

Avez-vous une idée de ce qui ne va pas ?

Pour faire simple, je souhaiterais que mon useform s'active uniquement dans mes cellules sélectionnées ci -dessous et dans une autre feuille nommée "lundi" :
D87 : D94;D99 : D106;D111 : D118;D123 : D130;D135 : D142;D147 : D154;O87 : O94;O99 : O106;O111 : O118;O123 : O130;O135 : O142;O147 : O154;Z87 : Z94;Z99 : Z106;Z111 : Z118;Z123 : Z130;Z135 : Z142;Z147 : Z154

(attention, j'ai mis des espaces entre les sélections de cellules sinon le post affiche des smiley)

Bien à vous.

Drav
 
Dernière édition:
Solution
Bonjour
vous etes nombreux a faire cette erreur
quand on fait si machinc truc =[A1] on compare le machintruc a la valeur de [A1] car vba prend la propriété par defaut a savoir le ".value"
et paradoxalement ici on a l'impression que le typename qui est comparer tout du moins c'est comme ca que vba semble l'interpréter puisque le userform s'affiche
on a l'impression que vba interprete la ligne if comme :
si target est un range et [A1] est range comme target then

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target = [A1] Then UserForm1.Show
End Sub
je traduit ce que vba comprends et que tu comprenne aussi
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
si l'object range(target)= la valeur...

patricktoulon

XLDnaute Barbatruc
Bonjour
vous etes nombreux a faire cette erreur
quand on fait si machinc truc =[A1] on compare le machintruc a la valeur de [A1] car vba prend la propriété par defaut a savoir le ".value"
et paradoxalement ici on a l'impression que le typename qui est comparer tout du moins c'est comme ca que vba semble l'interpréter puisque le userform s'affiche
on a l'impression que vba interprete la ligne if comme :
si target est un range et [A1] est range comme target then

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target = [A1] Then UserForm1.Show
End Sub
je traduit ce que vba comprends et que tu comprenne aussi
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
si l'object range(target)= la valeur de [A1] then userform1.show

End Sub
en gros tu cherche a comparer un conteneur au contenu d'un autre conteneur ou le typename des deux (qui est le même entre parentheses )

Donc!!:

comme tu a beaucoup d'areas( plage de cellules non contiguës) utilise le intersect
a mettre dans le module de la feuille "Lundi" bien sur
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 dim Plageconcernée
 Set Plageconcernée = Sheets("Lundi").Range("D87:D94,D99:D106,D111:D118,D123:D130,D135:D142,D147:D154,O87:O94,O99:O106,O111:O118,O123:O130,O135:O142,O147:O154,Z87:Z94,Z99:Z106,Z111:Z118,Z123:Z130,Z135:Z142,Z147:Z154")
If Not Intersect(plageconcernée, Target) Is Nothing Then UserForm1.Show
End Sub
;)
 

Dravol

XLDnaute Junior
Bonjour
vous etes nombreux a faire cette erreur
quand on fait si machinc truc =[A1] on compare le machintruc a la valeur de [A1] car vba prend la propriété par defaut a savoir le ".value"
et paradoxalement ici on a l'impression que le typename qui est comparer tout du moins c'est comme ca que vba semble l'interpréter puisque le userform s'affiche
on a l'impression que vba interprete la ligne if comme :
si target est un range et [A1] est range comme target then

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target = [A1] Then UserForm1.Show
End Sub
je traduit ce que vba comprends et que tu comprenne aussi
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
si l'object range(target)= la valeur de [A1] then userform1.show

End Sub
en gros tu cherche a comparer un conteneur au contenu d'un autre conteneur ou le typename des deux (qui est le même entre parentheses )

Donc!!:

comme tu a beaucoup d'areas( plage de cellules non contiguës) utilise le intersect
a mettre dans le module de la feuille "Lundi" bien sur
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 dim Plageconcernée
 Set Plageconcernée = Sheets("Lundi").Range("D87:D94,D99:D106,D111:D118,D123:D130,D135:D142,D147:D154,O87:O94,O99:O106,O111:O118,O123:O130,O135:O142,O147:O154,Z87:Z94,Z99:Z106,Z111:Z118,Z123:Z130,Z135:Z142,Z147:Z154")
If Not Intersect(plageconcernée, Target) Is Nothing Then UserForm1.Show
End Sub
;)
Parfait, nickel.
Merci pour les explications.
Je post un au sujet pour finaliser le projet.

Drav
 

Statistiques des forums

Discussions
312 203
Messages
2 086 195
Membres
103 153
dernier inscrit
SamirN