Sélection de plage
Résolu/Fermé
patrice67
-
14 août 2015 à 06:55
Agi67 Messages postés 11 Date d'inscription mardi 11 janvier 2011 Statut Membre Dernière intervention 11 septembre 2021 - 19 août 2015 à 05:17
Agi67 Messages postés 11 Date d'inscription mardi 11 janvier 2011 Statut Membre Dernière intervention 11 septembre 2021 - 19 août 2015 à 05:17
A voir également:
- Sélection de plage
- Image de manchots sur une image de plage - Forum Musique / Radio / Clip
- Inverser selection excel - Forum Excel
- Frédéric cherche à faire le buzz sur les réseaux sociaux. il a ajouté une image d’ours polaire sur une image de plage. retrouvez l'image originale de la plage. que cache l'ours polaire ? - Forum Graphisme
- Illustrator cadre de sélection disparu ✓ - Forum Illustrator
- L'indice n'appartient pas à la sélection vba ✓ - Forum Programmation
8 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
14 août 2015 à 07:17
14 août 2015 à 07:17
bonjour
je viens d'essayer chez moi: ca marche....
au besoin fais voir dans un 1° temps ton code
je viens d'essayer chez moi: ca marche....
au besoin fais voir dans un 1° temps ton code
Agi67
Messages postés
11
Date d'inscription
mardi 11 janvier 2011
Statut
Membre
Dernière intervention
11 septembre 2021
14 août 2015 à 20:45
14 août 2015 à 20:45
Bonjour michel_m,
Merci pour ton test qui confirme bien la régularité de mon instruction.
Je vais recontrôler mon code qui est un peu complexe. Il se trouve dans une procédure événement Change d'une sheet (Worksheet_Change)
Patrice
Merci pour ton test qui confirme bien la régularité de mon instruction.
Je vais recontrôler mon code qui est un peu complexe. Il se trouve dans une procédure événement Change d'une sheet (Worksheet_Change)
Patrice
Agi67
Messages postés
11
Date d'inscription
mardi 11 janvier 2011
Statut
Membre
Dernière intervention
11 septembre 2021
15 août 2015 à 19:43
15 août 2015 à 19:43
Bonjour Michel_m,
J'ai reproduit le problème que je rencontre avec les instructions ci-dessous.
Je souhaite déclencher l'événement change dans une feuille. Quand l'événement est déclenché par la modification de n'importe quelle cellule. Le code va sélectionner une plage dans une feuille qui s'appelle "BD".
NE FONCTIONNE PAS
On nomme une feuille "BD"
On met le ce code dans la feuille "Feuil1"
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sh_BD As Worksheet: Set sh_BD = Worksheets("BD")
sh_BD.Select
sh_BD.Range("A1:A10").Select ' Cette fonction fonctionne
sh_BD.Range(Cells(1, 1), Cells(1, 10)).Select ' Cette fonction ne fonctionne pas
Set sh_BD = Nothing
End Sub
FONCTIONNE
On nomme une feuille "BD"
On met le code dans la feuille "Feuil1"
Private Sub Worksheet_Change(ByVal Target As Range)
Selection_Plage
End Sub
On insère un module et on met le code suivant
Function Selection_Plage()
Dim sh_BD As Worksheet: Set sh_BD = Worksheets("BD")
sh_BD.Select
sh_BD.Range("A1:A10").Select ' Fonctionne
sh_BD.Range(Cells(1, 1), Cells(1, 10)).Select ' Fonctionne
ActiveSheet.Range(Cells(1, 2), Cells(1000, 2)).Select
Set sh_BD = Nothing
End Function
J'en tire la conclusion que pour sélectionner une plage, on ne peux pas le faire
avec Range(Cells(x,y),Cells(x,y)).
Si quelqu'un a une explication technique je serai intéressé.
Patrice
J'ai reproduit le problème que je rencontre avec les instructions ci-dessous.
Je souhaite déclencher l'événement change dans une feuille. Quand l'événement est déclenché par la modification de n'importe quelle cellule. Le code va sélectionner une plage dans une feuille qui s'appelle "BD".
NE FONCTIONNE PAS
On nomme une feuille "BD"
On met le ce code dans la feuille "Feuil1"
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sh_BD As Worksheet: Set sh_BD = Worksheets("BD")
sh_BD.Select
sh_BD.Range("A1:A10").Select ' Cette fonction fonctionne
sh_BD.Range(Cells(1, 1), Cells(1, 10)).Select ' Cette fonction ne fonctionne pas
Set sh_BD = Nothing
End Sub
FONCTIONNE
On nomme une feuille "BD"
On met le code dans la feuille "Feuil1"
Private Sub Worksheet_Change(ByVal Target As Range)
Selection_Plage
End Sub
On insère un module et on met le code suivant
Function Selection_Plage()
Dim sh_BD As Worksheet: Set sh_BD = Worksheets("BD")
sh_BD.Select
sh_BD.Range("A1:A10").Select ' Fonctionne
sh_BD.Range(Cells(1, 1), Cells(1, 10)).Select ' Fonctionne
ActiveSheet.Range(Cells(1, 2), Cells(1000, 2)).Select
Set sh_BD = Nothing
End Function
J'en tire la conclusion que pour sélectionner une plage, on ne peux pas le faire
avec Range(Cells(x,y),Cells(x,y)).
Si quelqu'un a une explication technique je serai intéressé.
Patrice
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
16 août 2015 à 08:20
16 août 2015 à 08:20
Bonjour
sans module 1
et avec cells + une variable Test xxx
au passage: il n'est pas utile de vider par Set sh_BD = Nothing
sans module 1
et avec cells + une variable Test xxx
Option Explicit
'-------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sh_BD As Worksheet, Plage As Range, xxx As Byte
xxx = Target
Set sh_BD = Worksheets("BD")
With sh_BD
Set Plage = .Range(.Cells(1, 1), .Cells(xxx, 10))
MsgBox .Cells(xxx, 7)
End With
sh_BD.Activate
End Sub
au passage: il n'est pas utile de vider par Set sh_BD = Nothing
Agi67
Messages postés
11
Date d'inscription
mardi 11 janvier 2011
Statut
Membre
Dernière intervention
11 septembre 2021
16 août 2015 à 20:09
16 août 2015 à 20:09
Bonjour michel_m,
Merci pour ta réponse. J'ai testé et ça fonctionne
Merci pour ta réponse. J'ai testé et ça fonctionne
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
16 août 2015 à 22:01
16 août 2015 à 22:01
Bonsoir le fil, bonsoir le forum,
En règle générale quand on veut sélectionner une plage qui est dans un autre onglet que l'onglet actif il faut :
Va marcher sans faille !...
En règle générale quand on veut sélectionner une plage qui est dans un autre onglet que l'onglet actif il faut :
- Impérativement sélectionner l'onglet au préalable
- Toujours indiquer cet onglet dans le code :
Dim O as Worksheet Set O = Sheets("BD") O.Select O.Range(O.Cells(1, 1), O.Cells(1, 10)).Select
Va marcher sans faille !...
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
17 août 2015 à 07:44
17 août 2015 à 07:44
Bonjour tout le monde.
En effet,
Pourquoi?
Nous sommes ici dans un événement de feuille. Par conséquent, puisque nous sommes dans un événement de feuille ET donc dans le Module de la feuille (ceci ne se produirait pas si la macro était dans un module standard) l'écriture Range(Cells, Cells) fait que Cells est rattaché à la feuille ou se déroule l'événement. Cela équivaut, si la feuille concernée par cet événement est la feuille Feuil1, à :
Que faire pour pallier à cela?
1- Il faut référencer la feuille pour le Range, mais aussi pour les Cells.
Comment?
2 possibilités :
2- On peut également placer la Sub de sélection dans un Module (comme dit précédemment par Agi67):
dans le module de la feuille :
Dans un module standard :
Bonne journée à tous
En effet,
sh_BD.Range(Cells(1, 1), Cells(1, 10)).Selectne peut pas fonctionner, même en sélectionnant au préalable la feuille par
sh_BD.Select. (Salutations à ThauThème)
Pourquoi?
Nous sommes ici dans un événement de feuille. Par conséquent, puisque nous sommes dans un événement de feuille ET donc dans le Module de la feuille (ceci ne se produirait pas si la macro était dans un module standard) l'écriture Range(Cells, Cells) fait que Cells est rattaché à la feuille ou se déroule l'événement. Cela équivaut, si la feuille concernée par cet événement est la feuille Feuil1, à :
sh_BD.Range(Sheets("Feuil1").Cells(1, 1), Sheets("Feuil1").Cells(1, 10)).Select
Que faire pour pallier à cela?
1- Il faut référencer la feuille pour le Range, mais aussi pour les Cells.
Comment?
2 possibilités :
- celle proposée par Michel (salutations au passage) avec un bloc With :
Private Sub Worksheet_Change(ByVal Target As Range) Dim sh_BD As Worksheet: Set sh_BD = Worksheets("BD") With sh_BD .Select .Range(.Cells(1, 1), .Cells(1, 10)).Select End With End Sub
- En référençant l'Objet WorkSheet également pour les Cells :
Private Sub Worksheet_Change(ByVal Target As Range) Dim sh_BD As Worksheet: Set sh_BD = Worksheets("BD") sh_BD.Select sh_BD.Range(sh_BD.Cells(1, 1), sh_BD.Cells(1, 10)).Select End Sub
2- On peut également placer la Sub de sélection dans un Module (comme dit précédemment par Agi67):
dans le module de la feuille :
Private Sub Worksheet_Change(ByVal Target As Range) Dim sh_BD As Worksheet: Set sh_BD = Worksheets("Feuil2") Selectionne sh_BD End Sub
Dans un module standard :
Sub Selectionne(sh_BD As Worksheet) sh_BD.Select sh_BD.Range(Cells(1, 1), Cells(1, 10)).Select End Sub
Bonne journée à tous
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
17 août 2015 à 08:30
17 août 2015 à 08:30
Salut Frank
Quand tu cites ma solution, je référencie la plage ce qui évite le select (activate à la fin est pour le retour sur la feuille de départ pour la demo)
amicalement, bonne semaine :o)
Quand tu cites ma solution, je référencie la plage ce qui évite le select (activate à la fin est pour le retour sur la feuille de départ pour la demo)
amicalement, bonne semaine :o)
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
>
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
17 août 2015 à 08:50
17 août 2015 à 08:50
Salut,
Oui, oui. J'ai bien vu. Je te cites, en fait, pour l'utilisation du bloc With.
En effet, et de toutes façons, les Select sont (bien entendu) toujours à éviter.
Bonne semaine également.
Oui, oui. J'ai bien vu. Je te cites, en fait, pour l'utilisation du bloc With.
En effet, et de toutes façons, les Select sont (bien entendu) toujours à éviter.
Bonne semaine également.
Agi67
Messages postés
11
Date d'inscription
mardi 11 janvier 2011
Statut
Membre
Dernière intervention
11 septembre 2021
18 août 2015 à 05:41
18 août 2015 à 05:41
Bonjour,
Avec vos différentes explications j'ai compris d'où venait le fait de ne pas pouvoir utiliser l'utilisation des Cells d'un autre onglet dans un événements d'une feuille.
J'avais cependant une question à poser à Michel_m. Dans ton premier post tu me conseilles qu'il n'est pas nécessaire de vider ma variable avec un set sh_BD = Nothing.
En fait dans les différents programmes que j'ai conçus il m'arrivait souvent d'avoir un message de dépassement de capacité. Depuis que je mets mes variables instanciée à Nothing à la fin des modules je n'ai plus ce problème. Ce n'est peut être pas la raison mais jusqu'à maintenant çà m'a semblé efficace.
Patrice
Avec vos différentes explications j'ai compris d'où venait le fait de ne pas pouvoir utiliser l'utilisation des Cells d'un autre onglet dans un événements d'une feuille.
J'avais cependant une question à poser à Michel_m. Dans ton premier post tu me conseilles qu'il n'est pas nécessaire de vider ma variable avec un set sh_BD = Nothing.
En fait dans les différents programmes que j'ai conçus il m'arrivait souvent d'avoir un message de dépassement de capacité. Depuis que je mets mes variables instanciée à Nothing à la fin des modules je n'ai plus ce problème. Ce n'est peut être pas la raison mais jusqu'à maintenant çà m'a semblé efficace.
Patrice
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 18/08/2015 à 08:54
Modifié par michel_m le 18/08/2015 à 08:54
Bonjour
extrait d'une grande discussion (2004) sur ce sujet dans un autre forum où j'avais posé la m^ question que toi:
.... "Au niveau de la gestion mémoire : quand tu utilises Set, la variable ne contient pas une "copie" de l'objet, mais simplement une référence à celui-ci. Tant que tu n'utilises pas le mot-clé New (affectation d'une nouvelle instance de classe à une variable), la mémoire consommée par cette variable objet restera assez réduite. Si la variable est locale à la procédure (comme l'est apparemment sh_bd dans ta macro), elle est de toute façon détruite à la fin de cette procédure et la mémoire qui lui était allouée est automatiquement libérée. La libération explicite de cette mémoire, par Set Mavariable = Nothing, s'impose surtout dans le cadre de grosses macros avec des variables objets de niveau module et/ou qui réfèrent à des instances de classes."....
mais ca ne mange pas de pain de laisser set machin=nothing
extrait d'une grande discussion (2004) sur ce sujet dans un autre forum où j'avais posé la m^ question que toi:
.... "Au niveau de la gestion mémoire : quand tu utilises Set, la variable ne contient pas une "copie" de l'objet, mais simplement une référence à celui-ci. Tant que tu n'utilises pas le mot-clé New (affectation d'une nouvelle instance de classe à une variable), la mémoire consommée par cette variable objet restera assez réduite. Si la variable est locale à la procédure (comme l'est apparemment sh_bd dans ta macro), elle est de toute façon détruite à la fin de cette procédure et la mémoire qui lui était allouée est automatiquement libérée. La libération explicite de cette mémoire, par Set Mavariable = Nothing, s'impose surtout dans le cadre de grosses macros avec des variables objets de niveau module et/ou qui réfèrent à des instances de classes."....
mais ca ne mange pas de pain de laisser set machin=nothing
Agi67
Messages postés
11
Date d'inscription
mardi 11 janvier 2011
Statut
Membre
Dernière intervention
11 septembre 2021
19 août 2015 à 05:17
19 août 2015 à 05:17
Bonjour michel_m
Merci pour ta réponse technique et le temps que tu m'as accordé.
Patrice
Merci pour ta réponse technique et le temps que tu m'as accordé.
Patrice