XL 2013 Recherche V dans un fichier au répertoire variable et au nom variable

ThoWmas31

XLDnaute Nouveau
Bonjour a tous,

Le contexte :

Je fais toute une série de userform pour qu’une personne sélectionne les colonnes voulues dans un fichier quelle ouvre et ensuite je viens coller ces valeurs dans mon format sur un fichier. Une colonnes est laissée vide pour une formule sur laquelle je bloque


Je cherche a effectuer une recherche V dans un fichier que j’ouvre avec un user form avec le code suivant :

Code:
'Ouverture du fichier Codification
    
    test = Application.GetOpenFilename(Title:="Ouverture fichier codification")

Et je voudrais que ma recherche V aille sur ce fichier

A savoir : le chemin est variable (puisque j’en ai un par client) et le nom du chemin peut être variable actuellement il ne l’est pas c’est toujours un codification.xls

Code:
'Formule Recherche V
    
    Range("C2").FormulaR1C1 = "=IF(RC[-2]=""X"",IFERROR(VLOOKUP(RC[-1],'[CODIFICATION.xlsx]Composant'!R1C1:R65536C2,2,FALSE),""A codifier""),RC[-1])"

autre petite question dans le code VBA est il possible d'enlever les selections meme pour les useforms ? je m'explique j'ai actuellement ce code :

Code:
UF_REF_Fabricant.Show
        Windows("Devis.xls").Activate
        Sheets("Data").Select
        Columns("H:H").Select
        ActiveSheet.Paste
        Workbooks.OpenText Filename:=old
        ActiveWindow.Close Savechanges:=False

si je met :

Code:
Range("H:H").Paste

est ce correct?
 

Dranreb

XLDnaute Barbatruc
Re : Recherche V dans un fichier au répertoire variable et au nom variable

Bonjour.
Le code que vous mentionnez n'ouvre pas de classeur. Il vous donne seulement le nom complet d'un classeur qu'on pourrait ouvrir.
Il faut enlever les Select partout sauf dans de rares cas on l'on veut apprêter l'utilisateur à intervenir, si l'UserForm est non modal. Et encore même dans ce cas Applicaction.GoTo est préférable.
Non, alors, ce n'est pas correct, il faut :
VB:
Workbooks("Devis.xls").Worksheets("Data").Columns("H:H").Paste
En s'arrangeant toutefois pour ne programmer qu'une fois ces recherches dans les collections, grâce à l'utilisation de variables déclarées As Workbook, As Worksheet et As Range.
Pour le classeur qui porte la macro on peut utiliser ThisWorkbook, et à la place de Thisworkbook.Worksheets("Devis") le nom d'objet qui vous serait affiché par MsgBox Thisworkbook.Worksheets("Devis").CodeName
 
Dernière édition:

ThoWmas31

XLDnaute Nouveau
Re : Recherche V dans un fichier au répertoire variable et au nom variable

Merci pour le code type pour eviter les selects , je viens de modifier

par contre comment faire pour mettre un chemin d'acces dans une variable et s'en servir dans une recherche ?

sachant que ce meme chemin d'acces serra sélectionner via un userform ?
 

Dranreb

XLDnaute Barbatruc
Re : Recherche V dans un fichier au répertoire variable et au nom variable

S'il est ouvert, cette fois, et la plage localisée, le mieux c'est de concaténer dans l'expression String à affecter à la formule: Plage.Address(True, True, xlR1c1, True). Sinon fabriquez …
Je viens de faire l'essai, et malheureusement le chemin n'est plus mis devant par la méthode Address.
Mais peut être n'est-ce pas nécessaire où alors ça voudrait dire que les références de plages externes de classeurs non ouverts soient devenues purement et simplement impossibles.
Mais vous pouvez toujours essayer d'affecter cette référence à un nom dans le classeur et d'utiliser ce nom dans la formule.
Si ça marche, après fermeture du classeur référé, regardez la référence du nom.
Si vous ne voulez pas l'ouvrir pendant l'installation de la formule, c'est un peu compliqué. Vous auriez intérêt à utiliser cette fonction :
VB:
Function AddrExt(ByVal RésuGOFN As String, ByVal NomFeui As String) As String
Rem. RésuGOFN: Résultat String renvoyé par Application.GetOpenFilename
'    NomFeui: Nom de la feuille
'    Exemple: UnePlage.FormulaR1C1 = "=" & AddrExt(ZGOFN, "Feuil1") & "R12C3"
Dim SP() As String
SP = Split(RésuGOFN, "\")
SP(0) = "'" & SP(0)
SP(UBound(SP)) = "[" & SP(UBound(SP)) & "]" & NomFeui & "'!"
AddrExt = Join(SP, "\")
End Function
Dans le cas de votre formule ça donnerait donc :
VB:
'Saisie du FullName du fichier Codification
    test = Application.GetOpenFilename(Title:="Ouverture fichier codification")

'Formule Recherche V
    If VarType(test) = vbString Then Range("C2").FormulaR1C1 = "=IF(RC[-2]=""X"",IFERROR(VLOOKUP(RC[-1]," & _
         AddrExt(test,  "Composant") & "R1C1:R65536C2,2,FALSE),""A codifier""),RC[-1])"
 
Dernière édition:

Discussions similaires

Réponses
3
Affichages
1 K

Statistiques des forums

Discussions
312 435
Messages
2 088 392
Membres
103 838
dernier inscrit
noureddine