Formule Matricielle : FormulaArray

Reeee~

C'est sacrément pénible l'écriture d'une formule matricielle en VBA et le spam du message d'Erreur [...]

capture

[...] est en train de me faire bouillonner de rage xDDD

J'ai donc une formule matricielle qui, quand je l'écris directement dans une cellule, fonctionne très bien, et j'utilise l'enregistreur de macro pour avoir la version VBA!

version enregistreur de macro de ma formule matricielle :

Range("K2").Select
   Selection.FormulaArray = "=INDEX('[2019 CONTRATS PREVASSUR DETAILS AU 08 01 2019.xlsx]ExtractAS400'!R2C17:R38805C17,MATCH(RC[-4]&RC[-5],'[2019 CONTRATS PREVASSUR DETAILS AU 08 01 2019.xlsx]ExtractAS400'!R2C3:R38805C3&'[2019 CONTRATS PREVASSUR DETAILS AU 08 01 2019.xlsx]ExtractAS400'!R2C5:R388050C5),1)"

Maintenant, j'essaye de remplacer le nom du fichier par une variable " & NameFile & " mais ce fameux (ou plutôt foutu) message d'erreur apparaît constamment

Est-ce qu'il y a quelque chose que je n'ai pas compris avec l'utilisation du FormulaArray ?

Merci d'avance pour vos retours !

Bonjour,

Je viens de tester ta formule chez moi, et je pense savoir pourquoi ça ne marche pas chez toi, chez moi j'ai mis:

Sub test()
nomfichier = "C:\Users\monlogin\Desktop\Classeur2.xlsx"
Range("k2").Select
   Selection.FormulaArray = "=INDEX('[" & nomfichier & "]ExtractAS400'!R2C17:R38805C17,MATCH(RC[-4]&RC[-5],'[" & nomfichier & "]ExtractAS400'!R2C3:R38805C3&'[" & nomfichier & "]ExtractAS400'!R2C5:R388050C5),1)"

End Sub

Si je mettais juste le nom du fichier: "Classeur2.xlsx", ça ne fonctionnait pas, en revanche, si je précise le chemin, tout fonctionne à nouveau, car il trouve le fichier que je veux utiliser!

Précise le chemin et ça devrait bien se passer

Salut Ausecour,

Merci pour ton retour!

Alors j'ai remplacer tout mes NameFile par des WayFile, le chemin complet, mais j'ai toujours le message d'erreur qui apparaît :p

J'ai donc copier ton code, et remplacer tes nomfichier par mes WayFile, et j'ai encore ce message d'erreur qui apparaît

Je crois qu'il veux ma peau xDDD

Mon code WayFile:

Private Sub CommandButton2_Click()
'Code pour le choix du fichier
TextBox1.Value = Application.GetOpenFilename
WayFile = TextBox1.Value
NameFile = Right(WayFile, InStrRev(WayFile , "\"))
End Sub

Bonjour Juice

Ton retour n'est pas très logique, je te dis qu'il faut mettre le chemin entier, et toi tu me renvoies un code qui ne retourne que le nom du fichier, et qui ne marche pas en plus

Eh oui, tu utilises Right, mais il faut utiliser Mid!

Sub test()
WayFile = Application.GetOpenFilename
namefile = Mid(WayFile, InStrRev(WayFile, "\") + 1)
MsgBox (namefile)
End Sub

Bonjour Ausecour,

Ton retour n'est pas très logique, je te dis qu'il faut mettre le chemin entier, et toi tu me renvoies un code qui ne retourne que le nom du fichier, et qui ne marche pas en plus

En effet! Merci pour la modif !

Et le chemin entier du fichier est rentré dans la variable WayFile du coup (d'où le code)

Ci-dessous le code que tu m'avais joint à ton premier message que je met en application avec mon propre cas :

execution code clic sur debogage

Voilà, malheureusement sa ne fonctionne pas chez moi, même avec le chemin complet

Merci pour ton aide

Rebonjour,

Même avec le nom complet, ça ne fonctionne pas? Mince... Pourtant tu as une version plus récente que la mienne (pour Excel), et si le chemin est valide, avec extension etc, ça devrait fonctionner...

J'imagine que ce n'est pas possible d'avoir une copie de ton fichier pour que je bidouille dessus? Ah oui mais, je n'aurai pas le même chemin moi, tant pis?

Avec un fichier ce sera peut-être plus simple de trouver ce qui bloque chez toi

Re~

Avec un fichier ce sera peut-être plus simple de trouver ce qui bloque chez toi

Je te met donc un fichier vierge de toute donnée personnelle :p

Le but du jeu de cette formule matricielle c'est de mettre dans le fichier cible, les données se trouvant en :

  • Colonne 71 du fichier source (N° Contrat) dans la colonne 11 du fichier cible
  • Colonne 17 du fichier source (Segment) dans la colonne 14 du fichier cible

Et pour cela on se sers des N° Contrat & Nom Client pour rapprochés les lignes entre elles

Merci beaucoup pour ton temps

Rebonjour,

J'ai donc pu tester, la formule sans être array accepte le chemin complet, la formulaArray ne veut que le nom du fichier avec l'extension quand je teste, étrange mais bon, on va faire comme le veut la formule hein!

Donc je comprends mieux la raison pour laquelle tu voulais faire ton code précédent, du coup... Il faut juste mettre le nom du fichier avec son extension, puis ça devrait t'ouvrir l'explorateur de fichier, et ensuite, tu sélectionnes le fichier "Le dossier source" et ça ajoutera un lien entre tes deux classeurs, ça devrait marcher comme ça...

Je te laisse essayer avec juste le nom, l'extension, chercher le classeur avec l'explorateur d'objet?

Re-

Désolé mais je ne comprend pas ton retour.

Je pense que je vais arrêter de me prendre la tête avec cette histoire de liaison, et tout simplement rapatrier les données sur mon fichier cible pour ensuite faire une rechercheV

C'est pas esthétique, ni très rapide (300.000 lignes à mettre sur le fichier cible) mais j'en ai un peu marre ^^

Merci à toi pour ton temps

A bientôt

Juice.

Bonjour,

Petit essai d'explication, en fait, quand tu mets range.formular1c1 = taformuleàtoi

ça fonctionne

Mais si tu fais la même chose avec range.formulaArray = taformuleàtoi

ben ça marche pas...

En tout cas pas quand tu précises tout le chemin du classeur où tu veux prendre les valeurs.

Par contre, quand je mettais juste TonFichier.xlsm ou xlsx, ou xls, ça me dirigeait dans l'explorateur de fichier pour savoir où se trouve le fichier, ça fait le lien entre le nom TonFichier.xlsm, et ce classeur. Et ça fonctionnait en utilisant cette méthode... Tu fais juste une fois la liaison, et après, tant que le classeur ne bouge pas, tu n'as plus besoin de redire où le fichier se trouve

J'espère avoir été plus clair, bonne chance si tu copies tout dans un seul fichier!

Rechercher des sujets similaires à "formule matricielle formulaarray"