[VBA] Utilisation de la méthode Intersect

Un petit résumé des possibilités de la méthode Intersect en VBA

Exemple 1

On veut une action quand on Click sur la Cellule "A1" uniquement :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A1")) Is Nothing Then
MsgBox "Click on " & Target.Address
End If
End Sub

Exemple 2

On veut une action quand on Click n'importe où dans la colonne "A" uniquement :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A:A")) Is Nothing Then
MsgBox "Click on " & Target.Address
End If
End Sub

Exemple 3

On veut une action quand on Click n'importe où dans les colonne "A" à "E" uniquement :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A:E")) Is Nothing Then
MsgBox "Click on " & Target.Address
End If
End Sub

Exemple 4

On veut une action quand on Click n'importe où dans la Plage de "A1 à A10" uniquement :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A1:A10")) Is Nothing Then
MsgBox "Click on " & Target.Address
End If
End Sub

Exemple 5

On veut une action quand on Click n'importe où dans plusieurs plages non-adjacentes :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A1:A12, D4:D10, D20, D22, D55, E1:E12")) Is Nothing Then
MsgBox "Click on " & Target.Address
End If
End Sub

Exemple 6

On veut une action quand on Click n'importe où dans plusieurs colonnes non-contigues :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A:A, C:C, E:E")) Is Nothing Then
MsgBox "Click on " & Target.Address
End If
End Sub

Exemple 7

On veut une action quand on Click n'importe où dans la ligne 1:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Rows(1)) Is Nothing Then
MsgBox "Click on " & Target.Address
End If
End Sub

Exemple 8

On veut une action quand on Click n'importe où dans entre les lignes 1 et 3:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range(Rows(1), Rows(3))) Is Nothing Then
MsgBox "Click on " & Target.Address
End If
End Sub

Par contre là où çà se corse c'est pour le faire en lignes non contigues...

Exemple 9

On veut une action quand on Click n'importe où dans dans les lignes 1 ou 3 uniquement (pas la 2) :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range(Rows(1), Rows(3))) Is Nothing Then
If Application.Intersect(Target, Rows(2)) Is Nothing Then
MsgBox "Click on " & Target.Address
End If
End If
End Sub

[b]Ouf !! lol

Mais bon on peut faire la même chose aussi comme çà :[/b]

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A1:IV1, A3:IV3")) Is Nothing Then
MsgBox "Click on " & Target.Address
End If
End Sub

Edition: Ajout d'un exemple d'utilisation

https://www.excel-pratique.com/~files/doc/ExempleIntersect.xls

peut on m eclairicr sur ce sujet, car je voit pas l utiliter de ces formules

Jessaye d aprendre excel mais pas facile

Salut Djguitchom

Ce ne sont pas des formules, mais du code VBA

Regarde j'ai ajouté un exemple sur le premier fil.

Mytå

Bonjour,

Je n'y comprends pas grand chose, -Je tente d'apprendre toute seule et débuter à la presque soixantaine ce n’est pas facile- bien que petit à petit j'y vois un tout petit peu plus clair. Je suis néanmoins incapable de modifier ce code:

(Inutile de vous dire qu'il n'est pas de moi !)

Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Application.Intersect(Target, Range("A1:P655")) Is Nothing Then
        Cancel = True
        Target.EntireRow.Interior.ColorIndex = xlNone
        Target.Interior.ColorIndex = 6
    End If
    With Selection.Font
        .Underline = xlUnderlineStyleNone
        .ColorIndex = 1
    End With
End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, Cancel As Boolean)
 With Selection.Font
        .Underline = xlUnderlineStyleNone
        .ColorIndex = 16
    End With
    Selection.Interior.ColorIndex = xlNone
End Sub

Car dans une liste sur plusieurs colonnes, j'ai besoin que la cellule cliquée devienne jaune/mots noirs, et revienne à son état initial au click droit, ce code fonctionne donc à priori parfaitement, sauf que : si j'ai besoin de sélectionner deux cellules dans deux colonnes différentes mais sur une même ligne, c'est impossible, la dernière cellule sélectionnée invalidant toute autre sur la même ligne.

Comment faire pour que cela puisse être accepté ? Ce n'est pas franchement grave puisque pour pallier à cet inconvénient j'utilise "copier la mise en forme" le reste du code étant valide au clic droit, mais s'il était possible de modifier ce code, cela me permettrai de comprendre davantage au vu de la modif.

Merci de me dire aussi si ce n'est pas trop vous demander, comment faire pour qu'une fois les cellules sélectionnées, les regrouper sur autre feuille pour impression.

Merci d'avance

Salut Bleuvert

Essaye en enlevant la ligne

Target.EntireRow.Interior.ColorIndex = xlNone

Mytå

Grand merci Mytå

C'est vrai qu'en y regardant de plus près et avec ton coup de pouce je vois bien le rapport,

C'est de cette façon que je pense parvenir à comprendre ce language.

Encore merci, pour la suite je vais essayer de me replonger dans mon bouquin sur Excel, mais je le trouve tellement indigeste qu'au bout d'une demi-page j'ai sommeil !

Bonjour à tous,

merci Mytå pour tes explications détaillées.

Dans ton fichier exemple, que signifie cette ligne de code ?

 If .Count > 1 Then Exit Sub

et à quoi çà sert ?

amicalement

Claude.

Salut le forum

Claude la ligne

If .Count > 1 Then Exit Sub

permet de vérifier qu'une seule cellule à été sélectionnée et non une plage de cellule.

Mytå

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Application.Intersect(Target, Range("A1")) Is Nothing Then

MsgBox "Click on " & Target.Address

End If

End Sub

COMMENT CA MARCHE

Cette "Macro" est superbe

Toutefois quand je vais voir dans "outils" "macro", il n’y a rein ! ! !

1°) Ou se trouve cette "macro ???

2°) comment faire de même

Albert

Pour ma part, je fais PLEIN de macros commençant par sub macroalbert(), je peux les lancer et les modifier.

Ma question est simple, qu'es ce je n’ai pas saisi en programmation

Merci de m'éclairer

Salut le forum

Pour votre problème, cela vient de l'emplacement du code VB.

Le code ne doit pas se trouver dans un module (insertion module ou nouvelle macro)

mais directement dans la Feuille.

Vous devez donc quand vous vous trouvez dans Visual Basic (Alt+F11),

double-cliquer sur la Feuille et copier le code à cet emplacement.

Ceci permet un déclenchement évènementtiel de la macro...

Regarde l'exemple à la fin de ma première ficelle.

Mytå

Bonjour Mytå,

Je m'intéresse de près à cette méthode, mais je suis novice de chez novice en VBA.

Est-il faisable d'obtenir un affichage de Userforms différents en fonction de ce qui est choisi sur la même ligne mais dans la colonne de gauche(A par exemple), le tout en utilisant Intersect (pour la B)?

Bonjour,

tu veux un userform différent ou le même mais qui n'affiche pas tout à fait les mêmes choses ?

Si c'est un userform différent, il suffit de faire que si le click est en colonne A tu lances ton userform 1 et si c'est en B tu lances ton userform 2. Exemple pour affichage de l'userform sur un double click dans la colonne A ou B :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A:A")) Is Nothing Then
userform1.show
End If

If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then
userform2.show
End If

End Sub

Après si tu veux le même userform mais qui affiche des choses différentes, cela va plus se passer au niveau de l'initialisation de l'userform dans son propre code à lui, que dans le code de lancement sur la feuille et cela ne sera pas spécialement lié à la fonction intersect().

Cordialement,

D'accord, je vois bien ce que tu veux dire, en ce qui me concerne, en colonne A il y aurait une liste déroulante, et ce que je voulais savoir c'est s'il est possible d'avoir un même UserForm mais n'affichant pas la même chose en B en fonction de ce qui a été selectionné en A.

Du coup ce serait plus un problème de code dans le Userform et l'histoire du choix en colonne précédente n'a rien à voir avec le Intersect si je comprends bien?

Tu as une liste déroulante en colonne A jusque là OK

par contre je ne vois pas le rapport entre l'userform et ta colonne B ? Un userform est une fenêtre qui s'ouvre par dessus ta feuille, donc que veux-tu dire par un "userform qui n'affiche pas la même chose en B" ?

Sinon oui tu peux initialiser différemment ton userform en fonction de la valeur de ta liste déroulante, mais effectivement cela se passe dans le code de l'userform, rien à voir avec intersect.

Cordialement,

Dans ma colonne A j'ai différents Modes de défaillance par exemple:

_Mauvais positionnement

_Endommager piece

Pour chaque mode de défaillance il y a ses effets dans la colonne B.

Jusque la j'avais fait des listes déroulantes en cascade, chaque liste dépendait du choix dans la liste située sur la colonne précédente.

Le problème est le suivant: je dois avoir chaque mode de défaillance l'un en dessous de l'autre sans sauter de ligne en colonne A, mais chaque mode à plusieurs effets, et, ces effets en colonne B peuvent avoir plusieurs causes en colonne C.

Voici pourquoi je voulais un UserForm qui me proposerait ce qu'il y avait autrefois dans ma liste déroulante, mais qui en plus, me permet de selectionner ce que je souhaite et de l'afficher dans une seul ligne.

Je ne sais pas si je fais bien d'expliquer cela sur ce post , dans la rubrique VBA-Excel j'ai fait un sujet concernant ce problème.

Dans tous les cas merci beaucoup de prendre de ton temps pour m'aider

Oui si il y a un sujet d'ouvert autant s'en occuper la bas cela évitera de trop polluer ce cours.

D'ailleurs j'ai été le lire, et effectivement, je ne vois aucun rapport avec intersect().

Enfin j'ai vu que Banzai (qui est largement plus compétent que moi) avait déjà commencé à te repondre, donc je verrais si jamais il bloque mais je ne pense pas.

Cordialement,

Bonjour Mytå,

Je viens de découvrir ce fil (depuis ta réponse sur CCM),

pour l'Exemple 9 on peut utiliser Union pour créer la zone non continue et écrire :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Not Application.Intersect(Target, Union(Rows(1), Rows(3))) Is Nothing Then
    MsgBox "Click on " & Target.Address
  End If
End Sub

Très cordialement

Patrice

Rechercher des sujets similaires à "vba utilisation methode intersect"