[VBA] Utilisation de la méthode Intersect

Partagez vos connaissances et vos astuces Excel ...

[VBA] Utilisation de la méthode Intersect

Messagepar Mytå » 08 Avr 2007, 01:30

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 :
Code: Tout sélectionner
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 :
Code: Tout sélectionner
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 :
Code: Tout sélectionner
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 :
Code: Tout sélectionner
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 :
Code: Tout sélectionner
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 :
Code: Tout sélectionner
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:
Code: Tout sélectionner
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:
Code: Tout sélectionner
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) :
Code: Tout sélectionner
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

Ouf !! lol
Mais bon on peut faire la même chose aussi comme çà :

Code: Tout sélectionner
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


Mytå

Edition: Ajout d'un exemple d'utilisation
http://www.excel-pratique.com/~files/doc/ExempleIntersect.xls
Dernière édition par Mytå le 13 Avr 2007, 19:22, édité 2 fois.
Mytå
 

a quoi cela sert

Messagepar djguitchom » 12 Avr 2007, 22:08

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

Jessaye d aprendre excel mais pas facile
djguitchom
Jeune membre
 
Messages: 29
Inscription: 17 Mars 2007, 16:15
Localisation: Pontorson (50)

Messagepar Mytå » 13 Avr 2007, 03:33

Salut Djguitchom

Ce ne sont pas des formules, mais du code VBA

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

Mytå
Mytå
 

améliorer un code

Messagepar bleuvert9 » 08 Juin 2007, 10:49

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 !)

Code: Tout sélectionner
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
bleuvert9
Jeune membre
 
Messages: 32
Inscription: 05 Juin 2007, 17:44
Version Excel: 2007 fr

Messagepar Mytå » 08 Juin 2007, 21:27

Salut Bleuvert

Essaye en enlevant la ligne
Code: Tout sélectionner
Target.EntireRow.Interior.ColorIndex = xlNone


Mytå
Mytå
 

Messagepar bleuvert9 » 10 Juin 2007, 12:21

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 !
bleuvert9
Jeune membre
 
Messages: 32
Inscription: 05 Juin 2007, 17:44
Version Excel: 2007 fr

Messagepar dubois » 10 Mars 2008, 09:49

Bonjour à tous,
merci Mytå pour tes explications détaillées.

Dans ton fichier exemple, que signifie cette ligne de code ?
Code: Tout sélectionner
If .Count > 1 Then Exit Sub

et à quoi çà sert ?
amicalement
Claude.
Faire simple, c'est ce qui est le plus compliqué ! et vice versa (à méditer)
dubois
Passionné d'Excel
 
Messages: 9252
Inscription: 08 Déc 2007, 12:03
Localisation: MEUDON région parisienne
Version Excel: Vista Office 2007FR

Messagepar Mytå » 10 Mars 2008, 19:04

Salut le forum

Claude la ligne
Code: Tout sélectionner
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å
Mytå
 

Il y an quelque chose qui m'"echappe

Messagepar novicevba45 » 25 Jan 2009, 16:01

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
novicevba45
Membre habitué
 
Messages: 66
Inscription: 18 Sep 2008, 11:27
Version Excel: 2003

Messagepar Mytå » 25 Jan 2009, 20:05

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å
Mytå
 

Suivante

Retourner vers Cours et astuces

 


  • Sujets similaires
    Réponses
    Vus
    Dernier message

Utilisateurs en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité