Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 VBA - Ajout automatique par Excel de "@" dans la formule

abGautier

XLDnaute Nouveau
Bonjour,

J'ai un code qui fonctionnait très bien, aujourd'hui lorsque je veux l'utiliser, l'exécution du code ajoute automatiquement un "@" entre le "=" et la suite de la formule. passant donc de "='\\GIFRSTO3[...]" à "=@'\\GIFRSTO3[...]".

Si je supprime cet "@" la formule s'exécute sans problème. Quelqu'un connait il la source de mon problème ?

Par soucis de confidentialité je ne peux partager mes fichiers,
ma ligne de code qui génère la formule est la suivante :

VB:
 Worksheets("Extracting").Range("F6") = "='\\GIFRSTO3\2_MarketDataExtract\" & Worksheets("Extracting").Range("A11") & "\[" & Worksheets("Extracting").Range("A12") & ".xls]" & Worksheets("Extracting").Range("A13") & "'!$A$20:$N$3012"

Merci à vous
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour abGautier,
J'ai testé votre formule, elle ne m'intègre pas de @. (Win10 XL2007)
Ceci dit, ce serait mieux avec : Worksheets("Extracting").Range("F6").Formula
Si ça a toujours marché, et qu'aujourd'hui ça coince, alors il faut cherché autour :
- XL n'a t-il pas changé ( mise à jour )
- la formule a t-elle était écrite avec cette version
 

abGautier

XLDnaute Nouveau
Bonjour Sylvanu, merci de ta réponse,
j'ai aussi essayé d'ajouter le .formula en fin et pas d'amélioration.
Je vais me renseigner sur l'âge de ma formule et si il est possible de la faire d'une manière plus moderne.
Cependant une petite fenêtre d'aide Excel "Pourquoi l'opérateur "@" apparait-il ?" s'est ouverte mais maintenant elle ne s'affiche plus.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Trouvé en glanant sur le net :

#Cette ligne

ou

@

ou

@[Nom de colonne]
Uniquement les cellules dans la même ligne que la formule. Il n’est pas possible de combiner ces spécificateurs avec d’autres spécificateurs d’éléments spéciaux. Utilisez-les pour imposer une intersection implicite comme référence ou pour remplacer une intersection implicite et faire référence à des valeurs individuelles d’une colonne.

Excel modifie automatiquement les spécificateurs #Cette ligne en spécificateurs @ plus courts dans les tableaux contenant plusieurs lignes de données. Si votre tableau comporte une seule ligne, Excel ne remplace pas le spécificateur #Cette ligne, ce qui peut provoquer des résultats de calcul inattendus lorsque vous ajoutez des lignes. Pour éviter les problèmes de calcul, veillez à entrer plusieurs lignes dans votre tableau avant d’entrer des formules de références structurées.

Au moins @ veut dire quelque chose, même si ça n'a apparemment rien avoir avec votre problème.
Vous n'auriez pas modifier un tableau en tableau structuré ou autre ?
 

abGautier

XLDnaute Nouveau
Merci pour cette piste, mon classeur ne contient aucun tableau je viens de vérifier dans les statistiques du classeur. Est-on sûr qu'Excel ajoute automatiquement ce @ seulement à cette condition ?
 

abGautier

XLDnaute Nouveau
En fouillant encore, il se trouve que c'est bien une mise à jour d'Excel qui cause l'ajout de ce caractère : https://support.microsoft.com/fr-fr/office/op%C3%A9rateur-d-intersection-implicite-ce3be07b-0101-4450-a24e-c1c999be2b34

Opérateur d’intersection implicite : @

L’opérateur d’intersection implicite a été introduit dans le cadre de la mise à niveau importante du langage de formule d’Excel pour prendre en charge les tableaux dynamiques. Les tableaux dynamiques apportent de nouvelles fonctionnalités de calcul et fonctionnalités significatives à Excel.



D'après MS cela ne doit pas impacter le fonctionnement des formules, hors ce n'est pas une formule compatible visiblement...

Je n'arrive pas à désactiver cette correction automatique d'Excel, je pense que cela serait la solution
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Là, ce n'est pas avec mon petit 2007 que je serais d'une grande aide.

Dernier essai pour le fun, remplacez "='\\GIFRSTO3\.....

par chr(61) & chr(39) & chr(92) & chr(92) & "GIFRSTO3\.....
C'est la même chose mais peut être qu'il ne "verra" pas une entête de formule.
Proba très faible.
 

abGautier

XLDnaute Nouveau
J'ai remplacé par les chr, mais cela ne fonctionne pas non plus.
A noter que Excel ajoute ce "@" même pour un Range(...) = "=SOMME(...)" mais pas lorsque je passe par une commande par ... .Formula "=SUM(...)" le problème n'apparait plus.

Existe-t-il un équivalent de mon = "='\\GIFRSTO3\..." en format .Formula ?
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Le Formula je vous l'ai proposé en post #2 et vous avez répondu que ça ne marchait pas.
L'autre solution est de tout faire en VBA, ouvrir le fichier, faire ce qui doit être fait et le refermer.
Une autre approche est de mettre en A14 en formules la concaténation des &, puis en VBA de faire un indirect à partir de cette chaîne.
La dernière solution mais je pense qu'elle n'est pas applicable dans votre application est de ne passer que par des formules.
ceci dit ça ne résous pas le potentiel problème du @.
 

Dranreb

XLDnaute Barbatruc
D'après ce que je comprends ce '@' est une bonne chose: il se met dans une formule devant une plage de plusieurs cellules là où il ne peut absolument pas y avoir autre chose qu'une valeur unique. C'est bien je trouve qu'Excel signale désormais qu'il en assume l'intersection avec la ligne ou la colonne qui porte la formule !
 

abGautier

XLDnaute Nouveau
J'avais essayé selon votre proposition du post #2 d'ajouter le .Formula sans aucun changement. Mais ce que je réalise c'est qu'il existe un équivalent comme cité par exemple :
Range(...) = "=SOMME()" et Range(...).Formula "=SUM()"
Équivalent que je n'ai pas avec ma formule.
Désolé je ne suis pas un expert au niveau formule par VBA et je réalise aussi que je vous ai répondu un peu vite.

Ma macro étant très chargée, je crains que tout passer en VBA soit très chronophage dans l'execution pour ouvrir les 5 classeurs un par un et leur 4 onglets.

Je vais me pencher sur la solution de concaténation et de fonction INDIRECT qui me parait bonne.

Merci Dranreb pour votre proposition, le .FormulaArray ajoute les "{" et "}" en début et fin de formule dans la cellule. Cela empêche le "@" d'apparaitre, mais la formule ne fonctionne pas à 100%. Elle fonctionne dans la cellule mais elle ne créer par de plage dans les cellules alentours.

Merci à vous deux
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…