Nom des champs dans un Workbook

joliemaman007

XLDnaute Nouveau
Bonjour tout le monde,

Je ne comprend pas très bien pourquoi tous les champs que j'ai créé n'apparaissent pas si je demande à Excel de me donner la liste complete.

Si quelqu'un(e) pouvait m'expliquer ou je me fourvoie, ce serait très sympa.

2 feuilles quasiment identiques (dans un workbook):
1 . Edit_Record
2. Modif_record

Disons 4 champs par feuille pour simplifier
1. champs_1 adresse : =Edit_Record!$H$13
2. champs_2 adresse : =Edit_Record!$T$13
3. champs_3 adresse : =Edit_Record!$AF$13
4. champs_4 adresse : =Edit_Record!$H$15

ET

1. champs_1 adresse : =Modif_Record!$H$13
2. champs_2 adresse : =Modif_Record!$T$13
3. champs_3 adresse : =Modif_Record!$AF$13
4. champs_4 adresse : =Modif_Record!$H$15


Si je demande à XLS la liste des champs utilisés (je devrais dire zone) en faisant:

Insert - Name - Paste - Paste List
ou en francais Insere - Nom - Colle - Colle Liste

ca ne me donne que :
1. champs_1 adresse : =Edit_Record!$H$13
2. champs_2 adresse : =Edit_Record!$T$13
3. champs_3 adresse : =Edit_Record!$AF$13
4. champs_4 adresse : =Edit_Record!$H$15
MAIS PAS ceux qui sont sur Modif_Record....

Pour corcer le tout, si je crée une macro en VBA qui utilise champs_1 adresse : =Modif_Record!$H$13 ou d'autre champs sur cette feuille, cela marche.

PAR CONTRE, si je cherche a obtenir la liste de tous les champs feuille par feuille, seuls les 4 premiers (c'est à dire ceux appartenant à Modif_Record) sont trouvés (ALORS que programme est le meme).

Y A T il un Bug ?
N'est il pas possible d'avoir le meme nom de champs (ou de zone) dans deux feuilles séparées ?

Voici le bout de programme qui bugue ou plus exactement qui me bloque ... les neurones

Les variables, ca c OK
Option Explicit
Public NomDeLaFeuille As String 'variable pour le passage a EffaceChamps

Dim BaseTemporaire(80) As Variant
Dim BaseItemModif(80, 2) As Variant
Dim BaseItemEdit(80, 2) As Variant
Public Numero_Trouve As Range 'pour pouvoir utiliser le resultat dans TOUT le programme

Cette partie regarde l'intercalaire Modif_Record, et la, ca va; NomsDesChamps.count est 72
Sub ConstantesModifications()

Dim NomsDesChamps As Variant
Dim r As Integer

' mis ici car je teste les petits bouts par petits bouts. A retirer par la suite
NomDeLaFeuille = 'Modif_Record'

Set NomsDesChamps = Worksheets(NomDeLaFeuille).Names

For r = 1 To NomsDesChamps.Count

BaseItemModif(r, 1) = NomsDesChamps(r).Name
BaseItemModif(r, 2) = NomsDesChamps(r).RefersToRange.Address

Next

'ca c'est pour vérifier - et c'est Correct MAIS l'ordre des champs ne me convient pas.
'maintenant, il faut que l'ordre d'enregistrement soit:
'item_1, item_2, item_3, item_4, item_4a, item_4b, item_4c, item_5,...)
'POUR LE MOMENT est item_1, item_10,

' For r = 1 To NomsDesChamps.Count
' MsgBox ('Nom de la feuille: --------------------> ') & NomDeLaFeuille & Chr(13) & _
' 'Nom de la zone : ---------------------> ' & BaseItemModif(r, 1) & Chr(13) & _
' 'Adresse: -----------------------------> ' & BaseItemModif(r, 2)
' Next

End Sub

Et la alors, je ne comprends plus; NomdesChamps.count=1 (au lieu de 72 !!!)
Sub ConstantesEditions()

Dim NomsDesChamps As Variant
Dim r As Integer

NomDeLaFeuille = 'Edit_Record'

Set NomsDesChamps = Worksheets(NomDeLaFeuille).Names

For r = 1 To NomsDesChamps.Count

BaseItemEdit(r, 1) = NomsDesChamps(r).Name
BaseItemEdit(r, 2) = NomsDesChamps(r).RefersToRange.Address

Next
MsgBox ('Nom de la feuille: --------------------> ') & NomDeLaFeuille

End Sub

Alors comme dirait l'autre : Mais qu'est-ce-que c'est que ce binzzz ?
PS Pas de fichier joint, car > 180k, même zippé.

JolieMaman
 

Minick

XLDnaute Impliqué
Salut,

Avec le fichier joint ce sera quand meme plus simple.

Ne peux tu pas faire ne copie de ton fichier et enlever toutes les données,
elles ne sont pas importantes ici, seules les zones nommées sont importantes.
Ton fichier passera sans probleme comme cela.

@+
 
B

bebere

Guest
bonjour Joliemaman,Minick
j'ai essayé ce qui suit
1. champs_1_adresse : =Edit_Record!$H$13
2. champs_2_adresse : =Edit_Record!$T$13
3. champs_3_adresse : =Edit_Record!$AF$13
4. champs_4_adresse : =Edit_Record!$H$15

ET

1. champs_1_adres : =Modif_Record!$H$13
2. champs_2_adres : =Modif_Record!$T$13
3. champs_3_adres : =Modif_Record!$AF$13
4. champs_4_adres : =Modif_Record!$H$15

ensuite le code
NomDeLaFeuille = 'Modif_Record'
pour mettre les noms ds un tableau,pour moi pas besoin
ReDim NomsDesChamps(1 To Names.Count, 1 To 1)
For N = 1 To Names.Count
NomsDesChamps(N, 1) = Names(N)
Next N
'Names(x) fait référence à ce qui suit
Names(x)=Modif_Record!$H$13 donc BaseItemModif(80.1)


For r = 1 To Names.Count
BaseItemModif(r, 1) = Names(r)
next
avec un fichier plus facile pour aider
à+




:)
 

ChTi160

XLDnaute Barbatruc
Salut joliemaman007
bonjour Minick

en pièce jointe peut être une solution et une explication
j'ai en cherchant sur le net Google ' nommée une plage de cellules' trouvé sur ExcelLabo une explication et une procèdure de Pierre Fauconnier, (N°1146) qui permet de lister les plages nommées en 3D
c'est a dire nommer les cellules A1 de toutes les feuilles 'Champ_1.adresse' les cellules B1 Champ_2.adresse Etc

Lien Ici
tiens nous au courant [file name=PlagesNommees.zip size=10527]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/PlagesNommees.zip[/file]
New Edition
Code:
Oupsssssssss excuses bebere je ne t'avais pas vu Bonjour pour toi tout seul Lol

Message édité par: Chti160, à: 18/08/2005 16:37
 

Pièces jointes

  • PlagesNommees.zip
    10.3 KB · Affichages: 13

Bebere

XLDnaute Barbatruc
rebonjour à tous
je suis allé un peu plus loin

Sub essai()
'liste des noms du classeur
Set nms = ActiveWorkbook.Names
Set wks = Worksheets('Edit_Record')
'MsgBox wks.Name
For r = 1 To nms.Count
'MsgBox nms(r).RefersTo
If Mid(nms(r).RefersTo, 2, Len(wks.Name)) = wks.Name Then
l = l + 1
wks.Cells(l, 2).Value = nms(r).Name
'la ligne suivante est renseignée comme suit dans l'aide,mais bug(.RefersToRange.Address) changé comme suit et ok
wks.Cells(l, 3).Value = ''' & nms(r).RefersTo
End If
Next r
End Sub
à+
 

ChTi160

XLDnaute Barbatruc
re Minick

non non tu ne te trompes pas joliemaman007 boucle bien sur l'ensemble des feuilles du classeur le problème viens du fait que lorsques tu nommes des cellules dans des feuilles différentes avec le même nom y a un problème lorsques tu récupères ces noms.
donc l'astuce est de nommer la plage A1 Feuil1!Toto en feuil1
et la plage A1 Feuil2!toto en Feuil2
sinon celà n'est pas possible via Insertion Non definir
 

ChTi160

XLDnaute Barbatruc
re bebere

le problème n'est pas de Nommer les plages avec le même nom(Feuil1 !toto,Feuil2!toto etc) mais d'en obtenir la liste via Insertion Nom Definir tu n'obtiens qu'une fois les noms alors qu'en vba tu obtiens la liste de tout les noms (même semblables) c'est l'indication de la feuille qui fait la différence
bonne fin de journée
 

ChTi160

XLDnaute Barbatruc
re
en pièce jointe une version multiple
bonne fin de journée [file name=PlagesNommees2.zip size=14572]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/PlagesNommees2.zip[/file]
 

Pièces jointes

  • PlagesNommees2.zip
    14.2 KB · Affichages: 14

joliemaman007

XLDnaute Nouveau
MERCI MERCI MERCI a vous tous

Merci jean-marie, bebere et minick,chti
yess

le probleme est clairement explique ds excellabo et la routine proposee par Pierre Fauconnier fonctionne. Je vais regarder en détail toutes les procs que vous m'avez soumis.

Je ne savais pas que le terme 3D etait applicable aux zones nommées.

Je vous tient au courant de mes .. euh ... progressions ...

xxx
Jolie Maman
:woohoo:

PS je ne vous attache pas le fichier .. car meme en supprimant des zone, il depasse toujours 150k...
 

ChTi160

XLDnaute Barbatruc
Salut joliemaman007

content que celà te fasse progresser
regarde le dernier fichier joint j'y est mis une procèdure qui ne t'indique que le Nom de la plage (ex Feuil1!Champ_1.adresse il t'affiche Champ_1.adresse
Code:
Sub plage2()
Dim nm As Name
Dim i As Byte
i = 1
With Sheets('Noms de plage')
For Each nm In ActiveWorkbook.Names
    .Cells(1, 4) = 'Noms'
    .Cells(1, 5) = 'Références'
    .Cells(i + 1, 4).Value = Mid(nm.Name, InStr(1, nm.Name, '!') + 1)
    .Cells(i + 1, 5).Value = ''' & nm.RefersTo
    i = i + 1
Next
    .Columns('D:E').AutoFit
End With
End Sub

n'hésite pas à revenir si problèmes ou besoin d'explications

Bonne Journée
 

joliemaman007

XLDnaute Nouveau
Merci Chti
mais là cela s'éloigne de mon objectif

En fait le but de cette procedure est de pouvoir soit vider le contenu des champs soit d'y mettre une donnée provenant d'une autre feuille.

Je suis en train de créer un formulaire en évitant les USF. Donc - pour le moment - je tourne avec 5 feuilles:

1. la feuille de Bienvenue (qui determine ce que l'utiilisateur veut faire)
2. la feuille de saisie (formulaire Edit_Record)
3. la feuille de modif (formulaire Modif_Record) - liée à
4. la feuille de données à plat qui contient tous les champs saisis en ligne (une simili base de données).
5. la feuille de validation qui contient les 'textes' autorisés dans les feuilles Edit ou Modif Record ....

Et le besoin de recuperer le nom des champs est uniquement parce que compliquée comme je suis, plutot que de nommer les champs - come tout programmeur ferait - champs_1, champs_2, champs_3,etc. moi je les nomme champs_1a, champs_1b, champs_2, champs_2a, chanmps_2b, etc ....


J'essayes de reduire la taille du fichier pour le mettre sur le site
Merci encore.

Jolie Maman

Message édité par: joliemaman007, à: 19/08/2005 13:53
 

ChTi160

XLDnaute Barbatruc
re joliemaman007

peux tu m'expliquer ce que tu entends par

Je suis en train de créer un formulaire en évitant les USF

ton idée de joindre un extrait de ton fichier va permettre de mieux appréhender ton projet car moi je n'ai pas encore tout compris, mais je pense que celà va venir avec l'exemple Lol

dans l'attente

bonne Journée
 

ChTi160

XLDnaute Barbatruc
Bonsoir joliemaman007
bonsoir le fil
bonsoir le Forum

voila pour test ce que j'ai mis comme Macro pour EffaceChamps

Code:
Sub EffaceChamps()
Dim L As Byte
Dim name As name
 NomDeLaFeuille = 'Modif_Record'

Application.ScreenUpdating = False
With Worksheets(NomDeLaFeuille)
       .Unprotect
For Each name In ActiveSheet.Names

ActiveSheet.Range(name).Range('A1').Select
 If ActiveSheet.Range(name).Address = '$AI$21' Then MsgBox ('Nom de la feuille en cours d'effacement de données:   ') & NomDeLaFeuille
 Selection.ClearContents
Next
       .Protect
End With
Application.ScreenUpdating = True
End Sub

en attendant des infos sur ce que tu veux

Message édité par: Chti160, à: 22/08/2005 23:29
 

Discussions similaires

Réponses
0
Affichages
268

Statistiques des forums

Discussions
312 334
Messages
2 087 382
Membres
103 530
dernier inscrit
dieubrice