OVH Cloud OVH Cloud

code VBA

6 réponses
Avatar
Bourby
Bonjour,

j'ai un classeur1 avec deux plages nommées Plage1 et Plage2 ("verticales"),
et deux autres Plage3 et Plage4 ("horizontales").

Dans un Classeur2, je voudrais récupérer grâce à une macro la valeur
qu'on écrirait en Excel:
= Plage1 Plage3 - Plage2 Plage4

Comment puis-je écrire cela proprement?

Merci d'avance pour votre aide.

Bourby

6 réponses

Avatar
Denis Michon
Bonjour Bourby,

Tu remplace "ThisWorkbook.Name" par le nom du classeur où se trouvent ces "Plages nommées"

Dim A As Double

With Workbooks(ThisWorkbook.Name)
A = Intersect(Range(.Names("Plage1").RefersTo), Range(.Names("Plage3").RefersTo)) _
- Intersect(Range(.Names("Plage2").RefersTo), Range(.Names("Plage4").RefersTo))
End With


Attention aux coupures du service de messagerie !


Salutations!



"Bourby" a écrit dans le message de news:
Bonjour,

j'ai un classeur1 avec deux plages nommées Plage1 et Plage2 ("verticales"),
et deux autres Plage3 et Plage4 ("horizontales").

Dans un Classeur2, je voudrais récupérer grâce à une macro la valeur
qu'on écrirait en Excel:
= Plage1 Plage3 - Plage2 Plage4

Comment puis-je écrire cela proprement?

Merci d'avance pour votre aide.

Bourby
Avatar
AV
= Plage1 Plage3 - Plage2 Plage4
Comment puis-je écrire cela proprement?


La méthode Evaluate fonctionne très bien avec l'opérateur d'intersection :
MsgBox [Plage1 Plage3 - Plage2 Plage4]

AV

"Bourby" a écrit dans le message news:

Bonjour,

j'ai un classeur1 avec deux plages nommées Plage1 et Plage2 ("verticales"),
et deux autres Plage3 et Plage4 ("horizontales").

Dans un Classeur2, je voudrais récupérer grâce à une macro la valeur
qu'on écrirait en Excel:>
Comment puis-je écrire cela proprement?

Merci d'avance pour votre aide.

Bourby




Avatar
Bourby
bonsoir,

merci beaucoup à AV et Denis Michon pour ces réponses.

Evaluate me plait bien, parce que le code est court et facile à lire;
mais il me sempble que dans mon cas, il faudra écrire
....=[Classeur1!Plage1 Classeur1!Plage3 - Classeur1!Plage2 Classeur1!Plage4]
et comme je fais ouvrir n classeurs dans une boucle, Classeur1 est en fait
une
variable texte contenant un nom de fichier, et là je commence à
m'embrouiller dans des
trucs du genre variableClasseur & "!" & "Plage3", .....
Ce n'est plus court ni facile, et en plus je me plante.

Donc je passe à intersect, mais ça fait tout de suite 3 lignes par
formule,
et j'ai un assez grand nombre de formules.

Je me demandais si il y avait moyen de rester avec Evaluate et un code à peu
près
compact et compréhensible ? ?

Merci d'avance pour la suite de vos lumières.

JChF alias Bourby



"AV" a écrit dans le message news:
blg35n$vuv$
= Plage1 Plage3 - Plage2 Plage4
Comment puis-je écrire cela proprement?


La méthode Evaluate fonctionne très bien avec l'opérateur d'intersection :
MsgBox [Plage1 Plage3 - Plage2 Plage4]

AV

"Bourby" a écrit dans le message news:

Bonjour,

j'ai un classeur1 avec deux plages nommées Plage1 et Plage2
("verticales"),


et deux autres Plage3 et Plage4 ("horizontales").

Dans un Classeur2, je voudrais récupérer grâce à une macro la valeur
qu'on écrirait en Excel:>
Comment puis-je écrire cela proprement?

Merci d'avance pour votre aide.

Bourby








Avatar
Denis Michon
Bonjour Bourby,


Transforme ce que je t'ai donné en fonction que tu copies dans un module standard, et lorsque tu as besoin de la
fonction, tu peux l'appeler dans n'importe quelle procédure de cette façon et aussi souvent que tu veux.

A = TrouverValeur("NomDuClasseur")

'----------------------
Function TrouverValeur(NomClasseur As String)

With Workbooks(NomClasseur)
TrouverValeur = Intersect(Range(.Names("Plage1").RefersTo), Range(.Names("Plage3").RefersTo)) _
- Intersect(Range(.Names("Plage2").RefersTo), Range(.Names("Plage4").RefersTo))
End With

End Function
'----------------------

Sinon, il y a toujours "Evaluate" ... c'est pas mal !

;-)



Salutations!





"Bourby" a écrit dans le message de news:
bonsoir,

merci beaucoup à AV et Denis Michon pour ces réponses.

Evaluate me plait bien, parce que le code est court et facile à lire;
mais il me sempble que dans mon cas, il faudra écrire
....=[Classeur1!Plage1 Classeur1!Plage3 - Classeur1!Plage2 Classeur1!Plage4]
et comme je fais ouvrir n classeurs dans une boucle, Classeur1 est en fait
une
variable texte contenant un nom de fichier, et là je commence à
m'embrouiller dans des
trucs du genre variableClasseur & "!" & "Plage3", .....
Ce n'est plus court ni facile, et en plus je me plante.

Donc je passe à intersect, mais ça fait tout de suite 3 lignes par
formule,
et j'ai un assez grand nombre de formules.

Je me demandais si il y avait moyen de rester avec Evaluate et un code à peu
près
compact et compréhensible ? ?

Merci d'avance pour la suite de vos lumières.

JChF alias Bourby



"AV" a écrit dans le message news:
blg35n$vuv$
= Plage1 Plage3 - Plage2 Plage4
Comment puis-je écrire cela proprement?


La méthode Evaluate fonctionne très bien avec l'opérateur d'intersection :
MsgBox [Plage1 Plage3 - Plage2 Plage4]

AV

"Bourby" a écrit dans le message news:

Bonjour,

j'ai un classeur1 avec deux plages nommées Plage1 et Plage2
("verticales"),


et deux autres Plage3 et Plage4 ("horizontales").

Dans un Classeur2, je voudrais récupérer grâce à une macro la valeur
qu'on écrirait en Excel:>
Comment puis-je écrire cela proprement?

Merci d'avance pour votre aide.

Bourby








Avatar
AV
|..... variable texte contenant un nom de fichier, et là je commence à
| m'embrouiller dans des
| trucs du genre variableClasseur & "!" & "Plage3", .....
| Ce n'est plus court ni facile, et en plus je me plante.

Avec le nom du classeur variable :

Sub zz_Intersect_Avec_Var()
wbk = "Classeur2"
MsgBox Evaluate(wbk & "!plage1 " & wbk & "!Plage3 - " & wbk & "!Plage2 " & wbk &
"!Plage4")
End Sub

AV

"Bourby" a écrit dans le message news:

bonsoir,

merci beaucoup à AV et Denis Michon pour ces réponses.

Evaluate me plait bien, parce que le code est court et facile à lire;
mais il me sempble que dans mon cas, il faudra écrire
....=[Classeur1!Plage1 Classeur1!Plage3 - Classeur1!Plage2 Classeur1!Plage4]
et comme je fais ouvrir n classeurs dans une boucle, Classeur1 est en fait
une
variable texte contenant un nom de fichier, et là je commence à
m'embrouiller dans des
trucs du genre variableClasseur & "!" & "Plage3", .....
Ce n'est plus court ni facile, et en plus je me plante.

Donc je passe à intersect, mais ça fait tout de suite 3 lignes par
formule,
et j'ai un assez grand nombre de formules.

Je me demandais si il y avait moyen de rester avec Evaluate et un code à peu
près
compact et compréhensible ? ?

Merci d'avance pour la suite de vos lumières.

JChF alias Bourby



"AV" a écrit dans le message news:
blg35n$vuv$
= Plage1 Plage3 - Plage2 Plage4
Comment puis-je écrire cela proprement?


La méthode Evaluate fonctionne très bien avec l'opérateur d'intersection :
MsgBox [Plage1 Plage3 - Plage2 Plage4]

AV

"Bourby" a écrit dans le message news:

Bonjour,

j'ai un classeur1 avec deux plages nommées Plage1 et Plage2
("verticales"),


et deux autres Plage3 et Plage4 ("horizontales").

Dans un Classeur2, je voudrais récupérer grâce à une macro la valeur
qu'on écrirait en Excel:>
Comment puis-je écrire cela proprement?

Merci d'avance pour votre aide.

Bourby












Avatar
Bourby
bonjour,

merci à tous les deux; maintenant ça marche....

Bourby

"AV" a écrit dans le message news:
blj10v$o0g$
|..... variable texte contenant un nom de fichier, et là je commence à
| m'embrouiller dans des
| trucs du genre variableClasseur & "!" & "Plage3", .....
| Ce n'est plus court ni facile, et en plus je me plante.

Avec le nom du classeur variable :

Sub zz_Intersect_Avec_Var()
wbk = "Classeur2"
MsgBox Evaluate(wbk & "!plage1 " & wbk & "!Plage3 - " & wbk & "!Plage2 " &
wbk &

"!Plage4")
End Sub

AV

"Bourby" a écrit dans le message news:

bonsoir,

merci beaucoup à AV et Denis Michon pour ces réponses.

Evaluate me plait bien, parce que le code est court et facile à lire;
mais il me sempble que dans mon cas, il faudra écrire
....=[Classeur1!Plage1 Classeur1!Plage3 - Classeur1!Plage2
Classeur1!Plage4]


et comme je fais ouvrir n classeurs dans une boucle, Classeur1 est en
fait


une
variable texte contenant un nom de fichier, et là je commence à
m'embrouiller dans des
trucs du genre variableClasseur & "!" & "Plage3", .....
Ce n'est plus court ni facile, et en plus je me plante.

Donc je passe à intersect, mais ça fait tout de suite 3 lignes par
formule,
et j'ai un assez grand nombre de formules.

Je me demandais si il y avait moyen de rester avec Evaluate et un code à
peu


près
compact et compréhensible ? ?

Merci d'avance pour la suite de vos lumières.

JChF alias Bourby



"AV" a écrit dans le message news:
blg35n$vuv$
= Plage1 Plage3 - Plage2 Plage4
Comment puis-je écrire cela proprement?


La méthode Evaluate fonctionne très bien avec l'opérateur
d'intersection :



MsgBox [Plage1 Plage3 - Plage2 Plage4]

AV

"Bourby" a écrit dans le message news:

Bonjour,

j'ai un classeur1 avec deux plages nommées Plage1 et Plage2
("verticales"),


et deux autres Plage3 et Plage4 ("horizontales").

Dans un Classeur2, je voudrais récupérer grâce à une macro la valeur
qu'on écrirait en Excel:>
Comment puis-je écrire cela proprement?

Merci d'avance pour votre aide.

Bourby