OVH Cloud OVH Cloud

aucun succès avec ces laitages.......

2 réponses
Avatar
renoum01
J'ai post=E9 un petit message parlant d'appliquer des noms=20
dans des centaines de centaines de formules, si qqun=20
pouvait m'aider, cela m'enl=E8verait une fi=E8re chandelle du=20
pied.

Merci bcp


>>>>>Bonjour,
>>J'ai cr=E9er un fichier Excel compos=E9 de 10 onglets de=20
>>donn=E9es et de 10 onglets de restitutions. Les onglets de=20
>>donn=E9es sont remplis automatiquement par le biais d'une=20
>>DLL, qui va chercher le contenu dans une base. Afin de=20
>>faciliter le remplissage, sur les dix onglets de=20
>>donn=E9es,=20
>>j'ai cr=E9=E9 un syst=E8me de nommage unique de chaque cellule.
>>J'aimerais maintenant que mes formules (contenues dans=20
>>les=20
>>onglets de restitutions) ne fassent plus r=E9f=E9rence =E0 des=20
>>positions dans le classeur mais aux noms que j'ai=20
>>attribu=E9.
>>Les onglets de donn=E9es contenant en moyenne une centaine=20
>>de colonnes pour une quinzaine de ligne, je voudrais ne=20
>>pas faire ce travail =E0 la main et de plus lorsque je=20
>>fais=20
>>insertion>nom>appliquer cela ne fonctionne pas. Ma=20
>>question est donc comment faire pour qu'automatiquement=20
>>toutes les r=E9f=E9rences soient remplac=E9es par leur nom.

2 réponses

Avatar
pmo
Bonjour,

Je vous ai demandé, directement dans votre bal, de me
fournir de plus amples informations mais n'ayant rien
obtenu de votre part, et le week-end approchant, j'ai
été obligé d'y aller au pif. Voici donc un code qui
solutionnera peut-être votre problème (si j'ai bien
tout compris).

*********************************************************
ATTENTION: faites l'essai sur une copie de votre classeur
*********************************************************

Salutations et à bientôt.

PMO

'======================== ==========
Option Explicit
'#################
'### STRUCTURE ###
'#################
Type structNom
Ref As String
RefR1C1 As String
Name As String
RefA1 As String
End Type
'___________________________
Sub NomVsReference()
Dim NOM() As structNom
Dim N As Name
Dim R As Range
Dim C As Range
Dim A$
Dim i&
Dim j&
'---- Mise en tableau de tous les noms ----
For Each N In Names
i& = i& + 1
ReDim Preserve NOM(1 To i&)
NOM(i&).Ref = Mid(N.RefersTo, 2)
NOM(i&).RefR1C1 = Mid(N.RefersToR1C1, 2)
NOM(i&).Name = N.Name
NOM(i&).RefA1 = delDollar(NOM(i&).Ref)
Next N
'---- On sort si aucun nom ----
If i& = 0 Then Exit Sub
'---- On balaie toutes les feuilles ----
For i& = 1 To Sheets.Count
'°°° Montée des données dans un Range °°°
Set R = Sheets(i&).UsedRange
'°°° Pour chaque cellule ... °°°
For Each C In R
A$ = CStr(C.Formula)
'°°° Si c'est une formule on traite °°°
If Left(A$, 1) = "=" Then
'°°° Remplace la réf par le nom °°°
For j& = 1 To UBound(NOM)
Do Until InStr(1, A$, NOM(j&).RefA1) = 0
A$ = replaceStr(A$, NOM(j&).RefA1, NOM(j&).Name)
Loop
Do Until InStr(1, A$, NOM(j&).Ref) = 0
A$ = replaceStr(A$, NOM(j&).Ref, NOM(j&).Name)
Loop
Do Until InStr(1, A$, NOM(j&).RefR1C1) = 0
A$ = replaceStr(A$, NOM(j&).RefR1C1, NOM(j&).Name)
Loop
C.Formula = A$
Next j&
End If
Next C
Next i&
End Sub
'______________________________________________
'#### SUPPRIME LES $ ####
Private Function delDollar(ByVal source As String) As
String
Dim depart&
depart& = 1
While InStr(depart&, source, "$")
depart& = InStr(depart&, source, "$")
source = Mid(source, 1, depart& - 1) & _
Mid(source, depart& + 1)
depart& = depart& + 1
Wend
delDollar = source
End Function
'______________________________________________
'### REMPLACE UNE CHAINE PAR UN AUTRE ###
Private Function replaceStr(ByVal source As String, _
ByVal ancien As String, _
ByVal nouveau As String) As String
Dim depart&
If source = ancien Then
replaceStr = nouveau
Exit Function
End If
depart& = 1
While InStr(depart&, source, ancien)
depart& = InStr(depart&, source, ancien)
source = Mid(source, 1, depart& - 1) & nouveau & _
Mid(source, depart& + Len(ancien), Len(source))
depart& = depart& + Len(nouveau)
Wend
replaceStr = source
End Function
'======================== ==========


-----Message d'origine-----
J'ai posté un petit message parlant d'appliquer des noms
dans des centaines de centaines de formules, si qqun
pouvait m'aider, cela m'enlèverait une fière chandelle
du

pied.

Merci bcp


Bonjour,
J'ai créer un fichier Excel composé de 10 onglets de



données et de 10 onglets de restitutions. Les onglets
de



données sont remplis automatiquement par le biais
d'une



DLL, qui va chercher le contenu dans une base. Afin de
faciliter le remplissage, sur les dix onglets de
données,
j'ai créé un système de nommage unique de chaque
cellule.



J'aimerais maintenant que mes formules (contenues dans
les
onglets de restitutions) ne fassent plus référence à
des



positions dans le classeur mais aux noms que j'ai
attribué.
Les onglets de données contenant en moyenne une
centaine



de colonnes pour une quinzaine de ligne, je voudrais
ne



pas faire ce travail à la main et de plus lorsque je
fais
insertion>nom>appliquer cela ne fonctionne pas. Ma
question est donc comment faire pour
qu'automatiquement



toutes les références soient remplacées par leur nom.
.










Avatar
Pacôme de Champignac
Monsieur le Maire,

Sans trop vous plagier, sachez que c'est du haut du bas du forum que je prends toutes les
Champignaciennes, et les Champignaciens à témoin de la brûlante envie qui me dévore d'atteindre à la
fierté de vous enlever cette chandelle du pied qu'aucune main d'homme n'a j'espère encore foulé !

Respectueuses salutations

Comte Pacôme de Champignac
--

"renoum01" a écrit dans le message de
news:1d5e01c373a5$9098d8c0$
J'ai posté un petit message parlant d'appliquer des noms
dans des centaines de centaines de formules, si qqun
pouvait m'aider, cela m'enlèverait une fière chandelle du
pied.

Merci bcp