Formule en VBA

Bonjour à tous et à toutes,

Je poste un petit message en espérant que vous pourrez m'aider à résoudre mon problème qui commence à perdurer.

Je réalise une application en VBA et pour les besoins de celle-ci, je dois retourner dans une cellule à partir d'un code produit le nom de ce produit.

Je me dis donc qu'une formule RECHERCHEV ou VLOOKUP devrait convenir.

Sauf que l'ensemble de mes codes produits commencent par un 0 et je n'arrive pas à le garder dans mes formules.

J'ai beau essayer de prendre la case affichant la valeur cherchée au format texte plutôt que la variable contenant cette valeur mais sans façon, il m'est impossible d'arriver à ce que je souhaite.

Quelqu'un aurait-il une solution ?

En vous remerciant !

Bonjour Sentinelle et bienvenue sur le forum,

Peux-tu reproduire sur un fichier vierge le problème que tu rencontres? (ou carrément joindre ton fichier actuel et préciser où est le problème, quel module etc...)

Cordialement

Bonjour d3d9x et merci à toi

Voici un fichier qui devrait te permettre de comprendre, je ne peux malheureusement pas te donner l'original pour question de données professionnelles et même pour sa taille ( 65Mo ) ce ne serait vraiment pas pratique

Je reste à ta disposition pour te donner des infos supplémentaires si besoin !

6test.xlsx (9.30 Ko)

Hm je risque de ne pas pouvoir t'aider, chez moi le résultat renvoyé par

Sheets("DOC A COMPLETER").Cells(1, 2)

est 03466 et non 3466...

Par contre il est possible de contourner le problème si tu es toujours censé avoir 5 chiffres.

Dim codeID as String
codeID = Sheets("DOC A COMPLETER").Cells(1, 2)
If Len(codeID) = 4 Then 
codeID = "0" & codeID
End If

Ou encore mieux si plusieurs "0" sont manquants

Dim codeID as String
codeID = Sheets("DOC A COMPLETER").Cells(1, 2)
While len(codeID)< 5
codeID = "0" & codeID
Wend

Chez moi aussi ça me donne bien ce que je veux quand je fais :

Sheets("DOC").Cells(1, 2)

Le problème c'est quand j'essaie d'obtenir le 03466 dans ma rechercheV ci-dessous :

Sheets("DOC").Cells(1, 4).FormulaLocal = "=RECHERCHEV(" & Sheets("DOC").Cells(1, 2) & ";" & nom_histo & "!A:A;2;FAUX)"

J'obtiens alors une recherche sur 3466 alors forcement ça ne match pas et j'obtiens #N/A !

Je remets le fichier excel avec une mini macro qui montre ce que je dis ici pour que ce soit bien clair pour tous le monde

Merci de ta réponse et des futurs :p

5test2.xlsm (14.72 Ko)

Chez moi la formule suivante en VBA fonctionne

Sheets("DOC").Cells(1, 4).FormulaLocal = "=RECHERCHEV('DOC'!B1;" & nom_histo & "!A:B;2;FAUX)"

7test2.xlsm (16.22 Ko)

En effet, pourquoi utilises-tu

Sheets("DOC").Cells(1, 4).FormulaLocal = "=RECHERCHEV(" & Sheets("DOC").Cells(1, 2) & ";" & nom_histo & "!A:A;2;FAUX)"

et pas directement

Sheets("DOC").Cells(1, 4).FormulaLocal = "=RECHERCHEV('DOC'!B1;" & nom_histo & "!A:A;2;FAUX)"

???

Tu rends tes formules statiques avec ta premiere formule !!!!!

PS: Si c'est le fait de déterminer le "B1" qui te gène, tu peux très bien utiliser une astuce:

Dim maCellule as Range

Set maCellule = Cells(1,2)

' pour obtenir B1, il suffit d'utiliser maCellule.Address qui renverrai B1 ou $B$1 je ne sais plus ^^

Je te remercie, c'était un problème sur la façon dont je sélectionnais ma case en effet !

J'ai utilisé ta syntaxe :

Sheets("DOC").Cells(1, 4).FormulaLocal = "=RECHERCHEV('DOC'!B1;" & nom_histo & "!A:B;2;FAUX)"

Et en effet ça fonctionne !

En faire je suis encore assez nouveau en VBA et sur les formules excels ( plus sur ces dernières ) et je ne savais pas que je rendais la formule statique :p

Un grand merci à toi encore ^^

Bonne journée

Rechercher des sujets similaires à "formule vba"