OVH Cloud OVH Cloud

Les Noms Définir...

5 réponses
Avatar
Starwing
Bonsoir =E0 tous,

j'ai cr=E9=E9 une proc=E9dure qui copie tous les noms d=E9finis du=20
classeur sur une autre feuille.=20
On retrouve:
En colonne A, Les Noms
En colonne B, Les valeurs ou les formules
En colonne C, True ou False en fonction des formules=20
visible ou non.

Je constate toutefois, que lorsque je remets de nouveau=20
les formules sur le classeur, quelques formules se d=E9cale.

Exemple "simplifi=E9" de ce qui se passe:
En Nom d=E9finir: Toto
Formule: =3DSheet1!$A7=20
Dans la cellule D7 la formule: =3DToto

Je me met sur la cellule A1:
Je d=E9clanche la proc=E9dure qui copie tous les noms d=E9finis=20
du classeur sur une autre feuille.=20
Surprise, la recopie se fait comme suit:
En A1 de la feuille j'ai : Toto
En B1 de la feuille j'ai : =3DSheet1!$A1 ???

L'objectif recherch=E9, (donc ma demande), serait que ma=20
proc=E9dure recopie les formules int=E9gralement sur ma=20
feuille. Mais comment?

Voici ma proc=E9dure:

Sub CopieLesNomsExistants()

Dim N As Name
Dim NomD=E9finir As Worksheet
Dim NombreDeNom As Integer
Set NomD=E9finir =3D ThisWorkbook.Sheets(1)

With NomD=E9finir
.Cells.Clear
.Cells.NumberFormat =3D "@"
End With

NombreDeNom =3D 0
For Each N In ActiveWorkbook.Names
NombreDeNom =3D NombreDeNom + 1
NomD=E9finir.Cells(NombreDeNom, 1) =3D N.Name
NomD=E9finir.Cells(NombreDeNom, 2) =3D N.RefersTo
NomD=E9finir.Cells(NombreDeNom, 3) =3D N.Visible
Next N

End Sub


Merci d'avance de m'aider =E0 avancer dans mon projet.
:0)

Starwing

5 réponses

Avatar
Hubert
salut,

Starwing wrote:
(...)
En Nom définir: Toto
Formule: =Sheet1!$A7


et en mettant $A$7
est-ce que la macro marche mieux ?

(...)> En B1 de la feuille j'ai : =Sheet1!$A1 ???



Avatar
Starwing
Bonjour,

et en mettant $A$7
est-ce que la macro marche mieux ?



L'objectif est de garder la même formule sans rien changer
à celle-ci, pour ensuite la recopier ailleurs.

Starwing

Avatar
AV
Si tu mets des références absolues (=Sheet1!$A$7) au lieu de mixte (ton exemple
: =Sheet1!$A7), tout rentrera dans l'ordre

AV
Avatar
Starwing
Bonjour AV,

Merci pour ta réponse, toutefois, les formules inscritent
dans les Noms-Définis sont hors de mon contrôle. En effet,
j'essaie de tester toutes les possibilités d'un Add-in que
je veux créer et pour solutionner un petit problème que je
rencontrais, j'ai pensé à copier tous les Noms-Définis sur
une feuille et de les remettre par la suite dans le
classeur une fois la procédure de mon Add-in terminé.

Lorsque je testais mon Add-in sur une feuille contenant
des Noms définis, cela fonctionnait très bien, sauf
lorsque je rencontrais des formules de type non absolues.

Si toutefois, tu connais la solution pour enlever un non
défini du classeur, alors là je suis aussi preneur.

Mon Add-in crée des Noms Définis dans une procédure, et
excel, par lui même, me crée ses propres Noms définis.
Exemple: Criteria sheet1
Extract Sheet1
Mon Add-in crée une nouvelle feuille et
J'essaie donc détruire ses Noms Définis par:
ActiveWorkbook.Names("Criteria").Delete
ActiveWorkbook.Names("Extract").Delete
Mais cela ne fonctionne pas...
Mais si je fais:
ActiveWorkbook.Names("Sheet1!Criteria").Delete
ActiveWorkbook.Names("Sheet1!Extract").Delete
Là cela fonctionne.
Mon problème est que je suis aussi incapable de trouver la
syntaxe qui ressemblerais à cela:
ActiveWorkbook.Names"(" " & "ActiveSheet" &!
Criteria").Delete

As-tu une idéé?

Merci d'avance AV, mon sauveur

Starwing

-----Message d'origine-----
Si tu mets des références absolues (=Sheet1!$A$7) au lieu
de mixte (ton exemple

: =Sheet1!$A7), tout rentrera dans l'ordre

AV


.



Avatar
AV
Merci pour ta réponse, toutefois, les formules inscritent
dans les Noms-Définis sont hors de mon contrôle.


Ben m'est avis qu'il y a un problème là car la façon dont elles sont définies
est.....
Expérience à faire :
Position de départ A1 de Feuil1
Insertion > Non > définir > "toto"
fait réf à : Feuil1!$A7 >> OK
la référence est mixte (décalage de ligne = +6)


Mets toi maintenant en B3 et fait Insertion > Nom > définir et regarde comment
est défini "toto" :
(Ligne de la cellule active +6)
En A65534 toto sera égal à þuil1!$A4
(Ligne de la cellule active +6)

AV


En effet,
j'essaie de tester toutes les possibilités d'un Add-in que
je veux créer et pour solutionner un petit problème que je
rencontrais, j'ai pensé à copier tous les Noms-Définis sur
une feuille et de les remettre par la suite dans le
classeur une fois la procédure de mon Add-in terminé.

Lorsque je testais mon Add-in sur une feuille contenant
des Noms définis, cela fonctionnait très bien, sauf
lorsque je rencontrais des formules de type non absolues.

Si toutefois, tu connais la solution pour enlever un non
défini du classeur, alors là je suis aussi preneur.

Mon Add-in crée des Noms Définis dans une procédure, et
excel, par lui même, me crée ses propres Noms définis.
Exemple: Criteria sheet1
Extract Sheet1
Mon Add-in crée une nouvelle feuille et
J'essaie donc détruire ses Noms Définis par:
ActiveWorkbook.Names("Criteria").Delete
ActiveWorkbook.Names("Extract").Delete
Mais cela ne fonctionne pas...
Mais si je fais:
ActiveWorkbook.Names("Sheet1!Criteria").Delete
ActiveWorkbook.Names("Sheet1!Extract").Delete
Là cela fonctionne.
Mon problème est que je suis aussi incapable de trouver la
syntaxe qui ressemblerais à cela:
ActiveWorkbook.Names"(" " & "ActiveSheet" &!
Criteria").Delete

As-tu une idéé?

Merci d'avance AV, mon sauveur

Starwing

-----Message d'origine-----
Si tu mets des références absolues (=Sheet1!$A$7) au lieu
de mixte (ton exemple

: =Sheet1!$A7), tout rentrera dans l'ordre

AV


.