VBA Attribuer une cellule à une variable x, utiliser x dans une fonction

Bonjour à tous,

J'ai fais une petite macro ayant pour but de récupérer, avec une XLOOKUP(), le type de référence dans un fichier source. Pour cela j'ai utiliser une boite de dialogue me permettant de selectionner la "lookup_value" à la main. Voici le code que j'ai écris :

Sub Test()
'
' StockDispo Macro
' Ramène le Stock Dispo en UVC
'
' Keyboard Shortcut: Ctrl+Shift+S
'
Dim x As Range
Set x = Application.InputBox("Sélectionnez une plage", "Sélection de cellules", Type:=8)
    ActiveCell.FormulaR1C1 = _
        "=XLOOKUP(x,'[REART perso.xlsx]Sheet1'!C1,'[REART perso.xlsx]Sheet1'!C20)"

End Sub

La boite de dialogue fonctionne je peux sélectionner ma cellule correctement mais la formule est éronnée. Voici l'erreur que j'ai :

image

Comme vous le devinez la cellule que j'ai sélectionné dans la boite de dialogue est A2. Cependant la formule s'écrit avec le x et je pense que c'est pour àa que ça fonctionne pas. J'ai l'impression d'être proche du but mais je suis bloqué là-dessus. Est-ce que quelqu'un aurait une idée pour corriger cela ? Merci d'avance.

PS : Je suis débutant dans VBA donc il se peut que le code ne soit pas très estéthique.

Bonjour,

Peut-être que vous y arriverez en essayant comme ça :

Sub Test()
'
' StockDispo Macro
' Ramène le Stock Dispo en UVC
'
' Keyboard Shortcut: Ctrl+Shift+S
'
Dim x As string
x = Application.InputBox("Sélectionnez une plage", "Sélection de cellules", Type:=8).address
'x = Application.InputBox("Sélectionnez une plage", "Sélection de cellules", Type:=8).address(referencestyle:=xlR1C1)
ActiveCell.FormulaR1C1 = "=XLOOKUP(x,'[REART perso.xlsx]Sheet1'!C1,'[REART perso.xlsx]Sheet1'!C20)"

End Sub

Cdlt,

Bonjour 3GB,

J'ai testé et ça n'a pas fonctionné, je n'obtient pas la boite de dialogue pour selectionner la cellule. Est-ce que la dernière ligne notée en commentaire est utile ou pas parce que je ne l'ai pas écrite.

Merci.

Cordialement,

Lucas

Alors peut-être ainsi :

Sub Test()
'
' StockDispo Macro
' Ramène le Stock Dispo en UVC
'
' Keyboard Shortcut: Ctrl+Shift+S
'
Dim x As range
Set x = Application.InputBox("Sélectionnez une plage", "Sélection de cellules", Type:=8)
ActiveCell.FormulaR1C1 = "=XLOOKUP(x.address(referencestyle:=xlR1C1),'[REART perso.xlsx]Sheet1'!C1,'[REART perso.xlsx]Sheet1'!C20)"

End Sub

Si vous obtenez des messages d'erreurs, n'hésitez pas à me dire où.

Edit : et n'hésitez à mettre la référence exacte de la cellule où vous désirez saisir cette formule, plutôt que Activecell

J'ai retesté,

C'ette fois-ci je peux définir ma cellule mais ça bug après :

image

Oui je sais qu'il faut éviter au maximum les ActiveCell mais là pour le coup la cellule où je veux faire tourner ma macro n'est pas toujours la même.

Cordialement,

Lucas

Alors comme ceci peut-être :

Sub Test()

Dim x As range
Dim s as string

Set x = Application.InputBox("Sélectionnez une plage", "Sélection de cellules", Type:=8)
s = x.address

ActiveCell.FormulaR1C1 = "=XLOOKUP(s,'[REART perso.xlsx]Sheet1'!C1,'[REART perso.xlsx]Sheet1'!C20)"

'ActiveCell.Formula = "=XLOOKUP(s,'[REART perso.xlsx]Sheet1'!A:A,'[REART perso.xlsx]Sheet1'!T:T)"

End Sub

Mais que cherchez vous à faire en fait ? Car il y a probablement beaucoup plus simple, et sans passer par VBA.

Ca ne fonctionne pas non plus.

En fait je reçois tous les jours des dizaines de tableaux qu'on me demande de compléter avec des valeurs de stocks, appro etc.... A chaque fois une dizaine de colonne à rapprocher. Dans mon exemple ici j'ai utilisé une seule Xlookup pour faciliter mais les formules sont plus complexes et longues à écrire. Et j'en ai marre de perdre mon temps à répondre à des gens qui me font des demandes parce qu'ils ne savent pas faire ou alors parcequ'ils savent que je vais faire leur boulot beaucoup plus vite qu'eux (c'est à dire que je dois faire mon propre travail XD). Donc mon idée c'était de faires des macros personelles qui me permette en un raccourci d'aller chercher n'importe quelle donnée qu'on va me demander sans y passer 5 ou 10 minutes à chaque fois.

Alors oui c'est sûr il y a plus simple et je pourrais continuer à retaper chaque formule pour chaque colonne mais j'aimerais réussir à mettre ces petites macros en place. D'autant plus que je "m'autoforme" sur Excel et VBA car c'est un monde qui m'interesse et je déplore de ne pas avoir eu de cours sur cet outil quand j'étais en école.

Cordialement,

Lucas

Bonjour,

xlookup n'est pas disponible pour excel 2016.

pour intégrer le contenu d'une variable dans une formule

s = x.address

ActiveCell.Formula = "=XLOOKUP(" & s & ",'[REART perso.xlsx]Sheet1'!C1,'[REART perso.xlsx]Sheet1'!C20)"

Bonjour h2so4,

Je crois qu'on a eu un update il n'y a pas longtemps au niveau de mon entreprise car la fonction est apparu du jour au lendemain. Je peux l'utiliser sans problème.

Par contre je ne sais pas quelle version j'ai réellement à présent.

Cordialement

Merci h2so4, comme toujours, tes interventions sont utiles !

Bah alors, on va essayer avec un petit INDEX EQUIV :

ActiveCell.Formula = "=INDEX('[REART perso.xlsx]Sheet1'!T:T,MATCH(" & s & ", '[REART perso.xlsx]Sheet1'!A:A,0))"

C'est en anglais donc je ne garantis pas mais tu pourrais essayer de taper une fonction INDEX EQUIV pour me dire...

Cdlt,

Bonjour,

pour vérfiier la version. menu-> fichier-> compte

pour la formule, essaie la correction proposée ci-dessus.

H2so4,

D'après mon compte j'ai Microsoft Office 365 ProPlus, j'espère que ça répond à la question de la version je ne vois aucune date.

3GB,

Ne t'inquiète pas j'utilise Excel en anglais donc c'est parfait. J'ai testé et ça fonctionne :-). Merci beaucoup. Du coup j'ai testé la même syntaxe avec la XLOOKUP :

 ActiveCell.FormulaR1C1 = _
        "=XLOOKUP(" & s & ",'[REART perso.xlsx]Sheet1'!C1,'[REART perso.xlsx]Sheet1'!C20)"

Et ça ne fonctionne pas bizarrement, je ne sais pas si saurais m'épliqué pourquoi ? Et j'ai fais un autre test j'ai changé A:A en C1 et T:T en C20 avec INDEX MATCH et ça ne fonctionne plus, là encore c'est quoi la différence ? Bien spur ce sont des questions subsidiaires tu n'es pas obligé d'y répondre. Tu as déjà passé pas mal de temps à m'aider :-).

Note pour plus tard : ne pas se braquer sur une fonciton et tester plusieurs possibilités.

Merci encore. A bientôt.

Cordialement,

Lucas

Il y a 2 styles de références : A1 (colonne A, ligne 1) et R1C1 (row 1, column 1).

J'ai toujours utilisé le style A1 donc je ne saurais pas vraiment dire pourquoi ça ne marche pas mais c'est certainement une question de syntaxe.

h2so4 doit surement mieux savoir que moi.

Edit : je viens de regarder rapidement et j'ai l'impression que le style R1C1 fonctionne en référence relative. Quand je suis en B et que je sélectionne toute la colonne A, il met cette formule :

=C(-1)

La colonne décalée de 1 vers la gauche, au lieu de mettre C1 (la colonne 1), qu'on obtiendrait avec la logique du style A1.

Voilà, je ne peux pas vraiment en dire plus...

D'accord merci pour la réponse.

C'est fou toutes les subtilités qu'il y a dans cet outil. Je vais continuer à faire des petites recherches de mon côté sur le sujet :-).

Merci pour tout en tout cas.

Bonne journée,

Cordialement,

Lucas

Rechercher des sujets similaires à "vba attribuer variable utiliser fonction"