Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Noms de plage variable dans macro

8 réponses
Avatar
daniel
Bonjour,
Dans une feuille, j'ai différentes plage nommées.
Je souhaiterais que les valeurs de la plage "VuNoms" deviennent les valeurs
d'une autre plage nommée, mais cette plage varie.

sub test()
'ici la variable TitreLigne doit enregistrer le nom "ActionNoms"
TitreLigne = "ActionNoms"
ColleNoms
......
end sub

Sub ColleNoms()
'ici la variable TitreLigne devient vide ???
Application.Goto Reference:=TitreLigne

Et si c'est possible
Les valeurs de "ActionNoms" sont recopiées dans une plage "VuNoms" sans
copier coller.
Dans ce style, mais bien sûr, comme ça, ça ne fonctionne pas.
Application.Goto reference:="VuNoms" = TitreLigne.Value

Par avance, merci de vos réponses et bonne journée.
DanielH

8 réponses

Avatar
Philippe.R
Bonjour,
Pour pouvoir utiliser le contenu d'une variable d'une procédure à l'autre,
il faut la déclarer publique en tête de module comme ceci :

public TitreLigne as string

--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"daniel" a écrit dans le message de
news:
Bonjour,
Dans une feuille, j'ai différentes plage nommées.
Je souhaiterais que les valeurs de la plage "VuNoms" deviennent les
valeurs d'une autre plage nommée, mais cette plage varie.

sub test()
'ici la variable TitreLigne doit enregistrer le nom "ActionNoms"
TitreLigne = "ActionNoms"
ColleNoms
......
end sub

Sub ColleNoms()
'ici la variable TitreLigne devient vide ???
Application.Goto Reference:=TitreLigne

Et si c'est possible
Les valeurs de "ActionNoms" sont recopiées dans une plage "VuNoms" sans
copier coller.
Dans ce style, mais bien sûr, comme ça, ça ne fonctionne pas.
Application.Goto reference:="VuNoms" = TitreLigne.Value

Par avance, merci de vos réponses et bonne journée.
DanielH



Avatar
daniel
Bonjour,
Merci beaucoup, ça fonctionne bien mieux maintenant.
Mais pour la partie du collage des valeurs, y'a t'il une solution ?
Encore merci et bonne journée.
DanielH



"Philippe.R" <AS_rauphil_chez_wanadoo.fr> a écrit dans le message de news:

Bonjour,
Pour pouvoir utiliser le contenu d'une variable d'une procédure à l'autre,
il faut la déclarer publique en tête de module comme ceci :

public TitreLigne as string

--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"daniel" a écrit dans le message de
news:
Bonjour,
Dans une feuille, j'ai différentes plage nommées.
Je souhaiterais que les valeurs de la plage "VuNoms" deviennent les
valeurs d'une autre plage nommée, mais cette plage varie.

sub test()
'ici la variable TitreLigne doit enregistrer le nom "ActionNoms"
TitreLigne = "ActionNoms"
ColleNoms
......
end sub

Sub ColleNoms()
'ici la variable TitreLigne devient vide ???
Application.Goto Reference:=TitreLigne

Et si c'est possible
Les valeurs de "ActionNoms" sont recopiées dans une plage "VuNoms" sans
copier coller.
Dans ce style, mais bien sûr, comme ça, ça ne fonctionne pas.
Application.Goto reference:="VuNoms" = TitreLigne.Value

Par avance, merci de vos réponses et bonne journée.
DanielH






Avatar
michdenis
Je n'ai pas tout compris ...

Mais une façon simple de définir une plage NOMMÉE en VBA

Range("A1:A25").Name = "toto"
Regarde dans l'interface de la feuille de calcul, insertion / nom
Toto est bien une plage nommée

Si tu veux affecter le contenu de la plage nommée "Toto" à une autre
plage, tu peux :

Range("toto").copy Range("G5")

Si tes plages sont de même dimension
Range("G1:G5") = Range("Toto")



"daniel" a écrit dans le message de groupe de discussion :

Bonjour,
Dans une feuille, j'ai différentes plage nommées.
Je souhaiterais que les valeurs de la plage "VuNoms" deviennent les valeurs
d'une autre plage nommée, mais cette plage varie.

sub test()
'ici la variable TitreLigne doit enregistrer le nom "ActionNoms"
TitreLigne = "ActionNoms"
ColleNoms
......
end sub

Sub ColleNoms()
'ici la variable TitreLigne devient vide ???
Application.Goto Reference:=TitreLigne

Et si c'est possible
Les valeurs de "ActionNoms" sont recopiées dans une plage "VuNoms" sans
copier coller.
Dans ce style, mais bien sûr, comme ça, ça ne fonctionne pas.
Application.Goto reference:="VuNoms" = TitreLigne.Value

Par avance, merci de vos réponses et bonne journée.
DanielH
Avatar
daniel
Bonjour,
Merci pour la réponse.
J'ai essayé de mettre en application tout ça, mais je n'y arrive pas
vraiment.
Le principe pour être plus clair, c'est que TitreLigne est une variable dans
la macro qui doit enregistrer l'un des noms de l'onglet.
Chaque nom dans l'onglet a une liste de valeur que je souhaite recopier dans
la plage nommée VuNoms, et juste les valeurs sans les formats.
En essayant de suivre vos conseils :

ça marche, mais les formats sont copiés aussi.
Range(TitreLigne).Copy Range("VuNoms")

les valeurs ne sont pas recopiées
Range("VuNoms") = Range(TitreLigne)

Le tout, c'est de permettre d'avoir un tableau avec des colonnes figées qui
reprennent la colonne des noms des cellules en rapport avec la partie
visible.
Merci par avance
"michdenis" a écrit dans le message de news:

Je n'ai pas tout compris ...

Mais une façon simple de définir une plage NOMMÉE en VBA

Range("A1:A25").Name = "toto"
Regarde dans l'interface de la feuille de calcul, insertion / nom
Toto est bien une plage nommée

Si tu veux affecter le contenu de la plage nommée "Toto" à une autre
plage, tu peux :

Range("toto").copy Range("G5")

Si tes plages sont de même dimension
Range("G1:G5") = Range("Toto")



"daniel" a écrit dans le message de groupe de
discussion :

Bonjour,
Dans une feuille, j'ai différentes plage nommées.
Je souhaiterais que les valeurs de la plage "VuNoms" deviennent les
valeurs
d'une autre plage nommée, mais cette plage varie.

sub test()
'ici la variable TitreLigne doit enregistrer le nom "ActionNoms"
TitreLigne = "ActionNoms"
ColleNoms
......
end sub

Sub ColleNoms()
'ici la variable TitreLigne devient vide ???
Application.Goto Reference:=TitreLigne

Et si c'est possible
Les valeurs de "ActionNoms" sont recopiées dans une plage "VuNoms" sans
copier coller.
Dans ce style, mais bien sûr, comme ça, ça ne fonctionne pas.
Application.Goto reference:="VuNoms" = TitreLigne.Value

Par avance, merci de vos réponses et bonne journée.
DanielH



Avatar
michdenis
Un petit exemple simple :

Pour les besoins de l'exemple mes noms représentent
seulement une colonne
Feuil1!Toto = A1:A5
feuil1!Toto1 = b1:B5
Feuil2!Toto3 = C1:C5

'-------------------------
Sub test()

'déclaration des variables
Dim Rg As Range, x As Integer
Dim N As Name

With Feuil1 ' à adapter au besoin
'affecte à la variable objet Rg la plage où
'seront copiées les données
Set Rg = .Range("A1:C5")
'Boucle sur chacun des noms DÉFINI AU NIVEAU
'DE LA FEUIL1
For Each N In .Names
'c'est pour toi, lorsque tu exécutes en pas à pas
' tu peux voir son nom
SonNom = N.Name
'Variable servant à incrémenter pour les besoins de la boucle
x = x + 1
'Copie dans chacune de mes colonnes les valeurs de chaque nom
Rg.Columns(x).Value = .Range(N).Value
Next
End With

End Sub




"daniel" a écrit dans le message de groupe de discussion :

Bonjour,
Merci pour la réponse.
J'ai essayé de mettre en application tout ça, mais je n'y arrive pas
vraiment.
Le principe pour être plus clair, c'est que TitreLigne est une variable dans
la macro qui doit enregistrer l'un des noms de l'onglet.
Chaque nom dans l'onglet a une liste de valeur que je souhaite recopier dans
la plage nommée VuNoms, et juste les valeurs sans les formats.
En essayant de suivre vos conseils :

ça marche, mais les formats sont copiés aussi.
Range(TitreLigne).Copy Range("VuNoms")

les valeurs ne sont pas recopiées
Range("VuNoms") = Range(TitreLigne)

Le tout, c'est de permettre d'avoir un tableau avec des colonnes figées qui
reprennent la colonne des noms des cellules en rapport avec la partie
visible.
Merci par avance
"michdenis" a écrit dans le message de news:

Je n'ai pas tout compris ...

Mais une façon simple de définir une plage NOMMÉE en VBA

Range("A1:A25").Name = "toto"
Regarde dans l'interface de la feuille de calcul, insertion / nom
Toto est bien une plage nommée

Si tu veux affecter le contenu de la plage nommée "Toto" à une autre
plage, tu peux :

Range("toto").copy Range("G5")

Si tes plages sont de même dimension
Range("G1:G5") = Range("Toto")



"daniel" a écrit dans le message de groupe de
discussion :

Bonjour,
Dans une feuille, j'ai différentes plage nommées.
Je souhaiterais que les valeurs de la plage "VuNoms" deviennent les
valeurs
d'une autre plage nommée, mais cette plage varie.

sub test()
'ici la variable TitreLigne doit enregistrer le nom "ActionNoms"
TitreLigne = "ActionNoms"
ColleNoms
......
end sub

Sub ColleNoms()
'ici la variable TitreLigne devient vide ???
Application.Goto Reference:=TitreLigne

Et si c'est possible
Les valeurs de "ActionNoms" sont recopiées dans une plage "VuNoms" sans
copier coller.
Dans ce style, mais bien sûr, comme ça, ça ne fonctionne pas.
Application.Goto reference:="VuNoms" = TitreLigne.Value

Par avance, merci de vos réponses et bonne journée.
DanielH



Avatar
daniel
J'ai regardé l'exemple, mais je n'arrive pas à le faire fonctionner...
Je mets à disposition le fichier qui fait ce que je veux, mais j'aurais aimé
qu'il soit plus sympa au niveau de la syntaxe ;-)
Dans la feuil2, j'ai recopié ta macro que je n'arrive pas à faire boucler ??
Encore merci.
DanielH

http://cjoint.com/?bBq3x4qKYj

"michdenis" a écrit dans le message de news:

Un petit exemple simple :

Pour les besoins de l'exemple mes noms représentent
seulement une colonne
Feuil1!Toto = A1:A5
feuil1!Toto1 = b1:B5
Feuil2!Toto3 = C1:C5

'-------------------------
Sub test()

'déclaration des variables
Dim Rg As Range, x As Integer
Dim N As Name

With Feuil1 ' à adapter au besoin
'affecte à la variable objet Rg la plage où
'seront copiées les données
Set Rg = .Range("A1:C5")
'Boucle sur chacun des noms DÉFINI AU NIVEAU
'DE LA FEUIL1
For Each N In .Names
'c'est pour toi, lorsque tu exécutes en pas à pas
' tu peux voir son nom
SonNom = N.Name
'Variable servant à incrémenter pour les besoins de la boucle
x = x + 1
'Copie dans chacune de mes colonnes les valeurs de chaque nom
Rg.Columns(x).Value = .Range(N).Value
Next
End With

End Sub




"daniel" a écrit dans le message de groupe de
discussion :

Bonjour,
Merci pour la réponse.
J'ai essayé de mettre en application tout ça, mais je n'y arrive pas
vraiment.
Le principe pour être plus clair, c'est que TitreLigne est une variable
dans
la macro qui doit enregistrer l'un des noms de l'onglet.
Chaque nom dans l'onglet a une liste de valeur que je souhaite recopier
dans
la plage nommée VuNoms, et juste les valeurs sans les formats.
En essayant de suivre vos conseils :

ça marche, mais les formats sont copiés aussi.
Range(TitreLigne).Copy Range("VuNoms")

les valeurs ne sont pas recopiées
Range("VuNoms") = Range(TitreLigne)

Le tout, c'est de permettre d'avoir un tableau avec des colonnes figées
qui
reprennent la colonne des noms des cellules en rapport avec la partie
visible.
Merci par avance
"michdenis" a écrit dans le message de news:

Je n'ai pas tout compris ...

Mais une façon simple de définir une plage NOMMÉE en VBA

Range("A1:A25").Name = "toto"
Regarde dans l'interface de la feuille de calcul, insertion / nom
Toto est bien une plage nommée

Si tu veux affecter le contenu de la plage nommée "Toto" à une autre
plage, tu peux :

Range("toto").copy Range("G5")

Si tes plages sont de même dimension
Range("G1:G5") = Range("Toto")



"daniel" a écrit dans le message de groupe de
discussion :

Bonjour,
Dans une feuille, j'ai différentes plage nommées.
Je souhaiterais que les valeurs de la plage "VuNoms" deviennent les
valeurs
d'une autre plage nommée, mais cette plage varie.

sub test()
'ici la variable TitreLigne doit enregistrer le nom "ActionNoms"
TitreLigne = "ActionNoms"
ColleNoms
......
end sub

Sub ColleNoms()
'ici la variable TitreLigne devient vide ???
Application.Goto Reference:=TitreLigne

Et si c'est possible
Les valeurs de "ActionNoms" sont recopiées dans une plage "VuNoms" sans
copier coller.
Dans ce style, mais bien sûr, comme ça, ça ne fonctionne pas.
Application.Goto reference:="VuNoms" = TitreLigne.Value

Par avance, merci de vos réponses et bonne journée.
DanielH






Avatar
michdenis
http://cjoint.com/?bBrxEyGOVE

Copie les plages des 3 toto vers G1:I5

Dans ton exemple, tes noms étaient définis au niveau du classeur
dans mon exemple j'avais défini les noms au niveau de la feuille.

Tous les bons livres vont t'expliquer la différence...

A ) Par rapport à ma macro initiale :
- Tu aurais dû modifier le nom de la feuil1 pour Feuil2
- Comme ton classeur a plusieurs autre nom que ceux
qui font référence à des places de la feuil2, il faut
instituer une boucle et tenter d'identifier seulement
les noms qui t'intéressent

With Feuil2 ' à adapter au besoin
'affecte à la variable objet Rg la plage où
'seront copiées les données
Set Rg = .Range("G1:I5")
'Boucle sur chacun des noms DÉFINI AU NIVEAU
'DE LA FEUIL1
For Each N In ThisWorkbook.Names
If LCase(Left(N.Name, 4)) Like "toto" Then
'c'est pour toi, lorsque tu exécutes en pas à pas
' tu peux voir son nom
SonNom = N.Name
'Variable servant à incrémenter pour les besoins de la boucle
x = x + 1
'Copie dans chacune de mes colonnes les valeurs de chaque nom
Rg.Columns(x).Value = .Range(N).Value
End If
Next
End With
Avatar
daniel
J'ai recopié le 2ème code et là ça fonctionne.
Je lis et relis les explications mais je n'aboutis pas, je vais aller
chercher cette différence entre noms feuille et classeur car la différence
est importante.
Encore merci pour tout.
Excellente soirée.

DanielH

"michdenis" a écrit dans le message de news:

http://cjoint.com/?bBrxEyGOVE

Copie les plages des 3 toto vers G1:I5

Dans ton exemple, tes noms étaient définis au niveau du classeur
dans mon exemple j'avais défini les noms au niveau de la feuille.

Tous les bons livres vont t'expliquer la différence...

A ) Par rapport à ma macro initiale :
- Tu aurais dû modifier le nom de la feuil1 pour Feuil2
- Comme ton classeur a plusieurs autre nom que ceux
qui font référence à des places de la feuil2, il faut
instituer une boucle et tenter d'identifier seulement
les noms qui t'intéressent

With Feuil2 ' à adapter au besoin
'affecte à la variable objet Rg la plage où
'seront copiées les données
Set Rg = .Range("G1:I5")
'Boucle sur chacun des noms DÉFINI AU NIVEAU
'DE LA FEUIL1
For Each N In ThisWorkbook.Names
If LCase(Left(N.Name, 4)) Like "toto" Then
'c'est pour toi, lorsque tu exécutes en pas à pas
' tu peux voir son nom
SonNom = N.Name
'Variable servant à incrémenter pour les besoins de la boucle
x = x + 1
'Copie dans chacune de mes colonnes les valeurs de chaque nom
Rg.Columns(x).Value = .Range(N).Value
End If
Next
End With