OVH Cloud OVH Cloud

macro - sélection zone "mouvante"

4 réponses
Avatar
j-pascal
Bonsoir à tous,

J'ai une liste, (dans une feuille !) composée de :

noms (dans la colonne A)
chiffres (dans la colonne B)

Les noms sont toujours classés en ordre alphabétique mais la liste est
"mouvante" le nombre de noms varie en fonction de tris et de données
nouvelles.

Problème :

Je voudrais inscrire un nom (issue d'une liste déroulante... ça je sais
faire !) dans une cellule et lancer une macro qui me sélectionnerait la zone
correspondant au nom de la liste. Ex : imaginons que les 4 lignes de "toto"
soient respectivement en A20; A21; A22 et A23. Si j'inscris "toto" dans une
cellule A3 d'une autre feuille, je veux que la zone sélectionnée soit :
A20:B23.

PS : cet ex est volontairement simpliste, mais l'esprit y est...

Le but ultime est de faire une "zone d'impression" et une "impression" à
partir de la macro (mais là, je pense pouvoir me débrouiller... enfin, on
verra ;-) )

Merci d'avance à celles ou ceux qui pourront me mettre sur la voie,

JP

4 réponses

Avatar
Daniel
Bonsoir.
Essaie la macro suivante :

Sub test()
Dim AdresseSup As String, AdresseInf As String
Dim Cel As Range, Plage As Range, ZoneAImprimer As Range
Set Plage = Range("A20", Range("A65536").End(xlUp))
Set Cel = Plage.Find([A3], lookat:=xlWhole, searchdirection:=xlNext)
If Cel Is Nothing Then Exit Sub
AdresseSup = Cel.Address
Set Cel = Plage.Find([A3], lookat:=xlWhole, searchdirection:=xlPrevious)
If Cel Is Nothing Then Exit Sub
AdresseInf = Cel.Address
Set ZoneAImprimer = Range(AdresseInf, AdresseSup)
End Sub

Cordialement.
Daniel
"j-pascal" a écrit dans le message de news:

Bonsoir à tous,

J'ai une liste, (dans une feuille !) composée de :

noms (dans la colonne A)
chiffres (dans la colonne B)

Les noms sont toujours classés en ordre alphabétique mais la liste est
"mouvante" le nombre de noms varie en fonction de tris et de données
nouvelles.

Problème :

Je voudrais inscrire un nom (issue d'une liste déroulante... ça je sais
faire !) dans une cellule et lancer une macro qui me sélectionnerait la
zone correspondant au nom de la liste. Ex : imaginons que les 4 lignes de
"toto" soient respectivement en A20; A21; A22 et A23. Si j'inscris "toto"
dans une cellule A3 d'une autre feuille, je veux que la zone sélectionnée
soit : A20:B23.

PS : cet ex est volontairement simpliste, mais l'esprit y est...

Le but ultime est de faire une "zone d'impression" et une "impression" à
partir de la macro (mais là, je pense pouvoir me débrouiller... enfin, on
verra ;-) )

Merci d'avance à celles ou ceux qui pourront me mettre sur la voie,

JP


Avatar
j-pascal
Bsr Daniel,

Merci pour cette réponse si rapide !

Essaie la macro suivante :

Sub test()
Dim AdresseSup As String, AdresseInf As String
Dim Cel As Range, Plage As Range, ZoneAImprimer As Range
Set Plage = Range("A20", Range("A65536").End(xlUp))


Je t'ai dit que "toto" commençait à la ligne n°20, mais j'imagine qu'il faut
explorer dès le début du tableau, même si le tableau proprement dit ne
commence pas à la ligne n°1, mais 4 par ex. ?!

Set Cel = Plage.Find([A3], lookat:=xlWhole,


Peux-tu m'expliquer la ligne précédente, stp ? Il me semble que d'habitude
pour récupérer le contenu d'une cellule, je crée une variable comme "range
(A3).value" (ou qqch du genre car il y a longtps que je ne l'ai pas utilisé)

searchdirection:=xlNext) If Cel Is Nothing Then Exit Sub
AdresseSup = Cel.Address
Set Cel = Plage.Find([A3], lookat:=xlWhole,
searchdirection:=xlPrevious) If Cel Is Nothing Then Exit Sub


Le "nothing" m'inquiète ! Attention, il y a d'autres noms avant et après
"toto" !

AdresseInf = Cel.Address

Set ZoneAImprimer = Range(AdresseInf, AdresseSup)
End Sub


Merci bcp pour ce travail,

JP

(PS : je bosse dimanche)


Cordialement.
Daniel
"j-pascal" a écrit dans le message de news:

Bonsoir à tous,

J'ai une liste, (dans une feuille !) composée de :

noms (dans la colonne A)
chiffres (dans la colonne B)

Les noms sont toujours classés en ordre alphabétique mais la liste
est "mouvante" le nombre de noms varie en fonction de tris et de
données nouvelles.

Problème :

Je voudrais inscrire un nom (issue d'une liste déroulante... ça je
sais faire !) dans une cellule et lancer une macro qui me
sélectionnerait la zone correspondant au nom de la liste. Ex :
imaginons que les 4 lignes de "toto" soient respectivement en A20;
A21; A22 et A23. Si j'inscris "toto" dans une cellule A3 d'une autre
feuille, je veux que la zone sélectionnée soit : A20:B23.

PS : cet ex est volontairement simpliste, mais l'esprit y est...

Le but ultime est de faire une "zone d'impression" et une
"impression" à partir de la macro (mais là, je pense pouvoir me
débrouiller... enfin, on verra ;-) )

Merci d'avance à celles ou ceux qui pourront me mettre sur la voie,

JP




Avatar
Daniel
Bonjour.
Plus simplement :

Sub test()
Dim CelSup As Range, Plage As Range, ZoneAImprimer As Range
Dim CelInf As Range
Set Plage = Range("A20", Range("A65536").End(xlUp))
Set CelSup = Plage.Find([A3], lookat:=xlWhole, searchdirection:=xlNext)
If CelSup Is Nothing Then Exit Sub
Set CelInf = Plage.Find([A3], lookat:=xlWhole,
searchdirection:=xlPrevious)
Set ZoneAImprimer = Range(CelSup, CelInf.Offset(0, 1))
End Sub

Cordialement.
Daniel
"j-pascal" a écrit dans le message de news:
%23%
Bsr Daniel,

Merci pour cette réponse si rapide !

Essaie la macro suivante :

Sub test()
Dim AdresseSup As String, AdresseInf As String
Dim Cel As Range, Plage As Range, ZoneAImprimer As Range
Set Plage = Range("A20", Range("A65536").End(xlUp))


Je t'ai dit que "toto" commençait à la ligne n°20, mais j'imagine qu'il
faut explorer dès le début du tableau, même si le tableau proprement dit
ne commence pas à la ligne n°1, mais 4 par ex. ?!

Set Cel = Plage.Find([A3], lookat:=xlWhole,


Peux-tu m'expliquer la ligne précédente, stp ? Il me semble que d'habitude
pour récupérer le contenu d'une cellule, je crée une variable comme "range
(A3).value" (ou qqch du genre car il y a longtps que je ne l'ai pas
utilisé)

searchdirection:=xlNext) If Cel Is Nothing Then Exit Sub
AdresseSup = Cel.Address
Set Cel = Plage.Find([A3], lookat:=xlWhole,
searchdirection:=xlPrevious) If Cel Is Nothing Then Exit Sub


Le "nothing" m'inquiète ! Attention, il y a d'autres noms avant et après
"toto" !

AdresseInf = Cel.Address

Set ZoneAImprimer = Range(AdresseInf, AdresseSup)
End Sub


Merci bcp pour ce travail,

JP

(PS : je bosse dimanche)


Cordialement.
Daniel
"j-pascal" a écrit dans le message de news:

Bonsoir à tous,

J'ai une liste, (dans une feuille !) composée de :

noms (dans la colonne A)
chiffres (dans la colonne B)

Les noms sont toujours classés en ordre alphabétique mais la liste
est "mouvante" le nombre de noms varie en fonction de tris et de
données nouvelles.

Problème :

Je voudrais inscrire un nom (issue d'une liste déroulante... ça je
sais faire !) dans une cellule et lancer une macro qui me
sélectionnerait la zone correspondant au nom de la liste. Ex :
imaginons que les 4 lignes de "toto" soient respectivement en A20;
A21; A22 et A23. Si j'inscris "toto" dans une cellule A3 d'une autre
feuille, je veux que la zone sélectionnée soit : A20:B23.

PS : cet ex est volontairement simpliste, mais l'esprit y est...

Le but ultime est de faire une "zone d'impression" et une
"impression" à partir de la macro (mais là, je pense pouvoir me
débrouiller... enfin, on verra ;-) )

Merci d'avance à celles ou ceux qui pourront me mettre sur la voie,

JP







Avatar
j-pascal
Bsr Daniel, et merci pour ta réponse.

Ceci me paraît effectivement plus simple ;-)

De mon côté, je suis en train de chercher comment je peux identifier (sans
macro) la cellule haut et gauche puis bas et droite de la zone à imprimer.
J'essayerais d'adapter ta proposition à mon application, car elle est un peu
plus compliquée que l'ex que j'ai donné.

Je te tiens au courant,

JP

Plus simplement :

Sub test()
Dim CelSup As Range, Plage As Range, ZoneAImprimer As Range
Dim CelInf As Range
Set Plage = Range("A20", Range("A65536").End(xlUp))
Set CelSup = Plage.Find([A3], lookat:=xlWhole,
searchdirection:=xlNext) If CelSup Is Nothing Then Exit Sub
Set CelInf = Plage.Find([A3], lookat:=xlWhole,
searchdirection:=xlPrevious)
Set ZoneAImprimer = Range(CelSup, CelInf.Offset(0, 1))
End Sub

Cordialement.
Daniel
"j-pascal" a écrit dans le message de news:
%23%
Bsr Daniel,

Merci pour cette réponse si rapide !

Essaie la macro suivante :

Sub test()
Dim AdresseSup As String, AdresseInf As String
Dim Cel As Range, Plage As Range, ZoneAImprimer As Range
Set Plage = Range("A20", Range("A65536").End(xlUp))


Je t'ai dit que "toto" commençait à la ligne n°20, mais j'imagine
qu'il faut explorer dès le début du tableau, même si le tableau
proprement dit ne commence pas à la ligne n°1, mais 4 par ex. ?!

Set Cel = Plage.Find([A3], lookat:=xlWhole,


Peux-tu m'expliquer la ligne précédente, stp ? Il me semble que
d'habitude pour récupérer le contenu d'une cellule, je crée une
variable comme "range (A3).value" (ou qqch du genre car il y a
longtps que je ne l'ai pas utilisé)

searchdirection:=xlNext) If Cel Is Nothing Then Exit Sub
AdresseSup = Cel.Address
Set Cel = Plage.Find([A3], lookat:=xlWhole,
searchdirection:=xlPrevious) If Cel Is Nothing Then Exit Sub


Le "nothing" m'inquiète ! Attention, il y a d'autres noms avant et
après "toto" !

AdresseInf = Cel.Address

Set ZoneAImprimer = Range(AdresseInf, AdresseSup)
End Sub


Merci bcp pour ce travail,

JP

(PS : je bosse dimanche)


Cordialement.
Daniel
"j-pascal" a écrit dans le message de
news:
Bonsoir à tous,

J'ai une liste, (dans une feuille !) composée de :

noms (dans la colonne A)
chiffres (dans la colonne B)

Les noms sont toujours classés en ordre alphabétique mais la liste
est "mouvante" le nombre de noms varie en fonction de tris et de
données nouvelles.

Problème :

Je voudrais inscrire un nom (issue d'une liste déroulante... ça je
sais faire !) dans une cellule et lancer une macro qui me
sélectionnerait la zone correspondant au nom de la liste. Ex :
imaginons que les 4 lignes de "toto" soient respectivement en A20;
A21; A22 et A23. Si j'inscris "toto" dans une cellule A3 d'une
autre feuille, je veux que la zone sélectionnée soit : A20:B23.

PS : cet ex est volontairement simpliste, mais l'esprit y est...

Le but ultime est de faire une "zone d'impression" et une
"impression" à partir de la macro (mais là, je pense pouvoir me
débrouiller... enfin, on verra ;-) )

Merci d'avance à celles ou ceux qui pourront me mettre sur la voie,

JP