OVH Cloud OVH Cloud

propriété "range"

5 réponses
Avatar
yoyo
Bonjour,

Je d=E9sire mettre =E0 jour automatiquement des cellules d'un=20
fichier excel =E0 partir de ses propri=E9t=E9s personnalis=E9es.=20
J'ai essay=E9 par cette m=E9thode (hypoth=E8se : j'ai nomm=E9 les=20
cellules =E0 mettre =E0 jour par le nom de la propri=E9t=E9) :
For Each Propriete In=20
ThisWorkbook.BuiltinDocumentProperties
Range("Propriete.Name").ClearContents
Range("Propriete.Name").Value =3D=20
ThisWorkbook.CustomDocumentProperties
("Propriete.Name").Value
Next

L'int=E9r=EAt de cet algorithme est de n'effacer que les=20
cellules qui seront ensuite remplac=E9es par la valeur de la=20
propri=E9t=E9 (et donc pas les cellules remplies manuellement=20
car la propri=E9t=E9 personnalis=E9e n'a pas =E9t=E9 cr=E9=E9...).

Mais cela ne fonctionne pas (mauvaise utilisation de la=20
propri=E9t=E9 "Range", mais peut-=EAtre de la=20
propri=E9t=E9 "BuiltinDocumentProperties"). Quelqu'un pourrait-
il me donner un coup de pouce ?

Merci d'avance.

5 réponses

Avatar
Zoury
Salut yoyo! :O)

je n'ai pas trop compris ce que tu veux faire, mais une chose est sûre..

Range("Propriete.Name")



ceci n'est pas correct.. Propriete.Name tel que l'utilise correspond à une
chaine de caractère constante qui ne représentera jamais rien d'autre que
"Propriete.Name".. Si tu veux obtenir le nom de la propriété actuelle, tu
dois enlevé les "

Exemple :
'***
For Each Propriete In _
ThisWorkbook.BuiltinDocumentProperties

Range(Propriete.Name).ClearContents
Range(Propriete.Name).Value = _
ThisWorkbook.CustomDocumentProperties(Propriete.Name).Value

Next
'***


Il est primordial que tu comprennes la différence entre les 2 syntaxes.. dit
le moi si c'est encore nébuleux.

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
Yoyo
Z'ai "zoury" de ta réponse ;-)))

Plus sérieusement, merci Zoury pour ce début de réponse --
il y avait peut-être une erreur dans mes guillemets qui ne
permettaient pas d'évaluer "Propriete.Name" -- mais j'ai
toujours une erreur lors de l'exécution : erreur
d'exécution '1004' (La méthode 'Range' de
l'objet '_Global' a échoué). Késako ???

J'ai bien peur qu'il soit impossible d'accéder à une plage
dont le nom est une variable à évaluer. Pour rappel, voici
mon exemple :
For Each Propriete In ThisWorkbook.CustomDocumentProperties
Range(Propriete.Name).ClearContents
Range(Propriete.Name).Value = Propriete.Value
Next

Peut-on contourner cette difficulté (si mon pressentiment
s'avère exact...) ?
Avatar
Zoury
> J'ai bien peur qu'il soit impossible d'accéder à une plage
dont le nom est une variable à évaluer.



Cela ne devrait pas causer de problème tant que la valeur retournée soit
valide pour l'objet Range. N'ayant pratiquement jamais travailler avec
l'automation Excel, j'ai lu la documentation concernant l'objet Range... ce
dernier représente un ensemble de cellules (ou autres) avec lesquelles tu
pourrais travailler. Tu ne l'utilise donc pas correctement.

Que cherches-tu à faire exactement? je te conseillerais de t'informer sur le
groupe Excel, ils pourront surement t'aider dans tes démarches.. ;O)


--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
Jean Yves SÉVENO
Bonjour

"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
> J'ai bien peur qu'il soit impossible d'accéder à une plage
> dont le nom est une variable à évaluer.

Cela ne devrait pas causer de problème tant que la valeur retournée soit
valide pour l'objet Range. N'ayant pratiquement jamais travailler avec
l'automation Excel, j'ai lu la documentation concernant l'objet Range...


ce
dernier représente un ensemble de cellules (ou autres) avec lesquelles tu
pourrais travailler. Tu ne l'utilise donc pas correctement.



Oui, je pense que le problème est là.

Il ne doit pas y avoir de cellule nommée qui corresponde à chacune des
CustomDocumentProperties et Range(Propriete.Name) provoque donc fort
logiquement une erreur 1004 à chaque fois qu'on essaye d'accéder à un objet
Range qui n'existe pas.

Il faudrait donc soit n'accéder qu'aux Range dont on est sûr qu'ils existent
soit utiliser un On Error Resume Next avant la boucle For Each.

Amicalement.

Jean Yves
Avatar
yoyo
Bien vu, et merci à tous les 2. Le programme suivant
marche du coup à merveille (en plus, les blancs dans
certaines proriétés personnalisées posaient apparemment
problème...) :
For Each P In ActiveWorkbook.CustomDocumentProperties
' On évite les propriétés qui ne correspondent pas à un
nom de plage
On Error Resume Next
' Les blancs sont supprimés dans le nom des propriétés
Range(Trim(P.Name)) = P.Value
If Err <> 0 Then Range(Trim(P.Name)).ClearContents
Err.Clear
Next P