Noms de plage variable dans macro

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Philippe.R
Le #18478071
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" 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



daniel
Le #18478551
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"
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" 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






michdenis
Le #18479401
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"
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
daniel
Le #18479971
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"
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" 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



michdenis
Le #18480171
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"
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"
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" 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



daniel
Le #18480841
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"
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" 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"
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" 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






michdenis
Le #18481101
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
daniel
Le #18481441
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"
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









Publicité
Poster une réponse
Anonyme