Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Formule variable dans une cellule

25 réponses
Avatar
dyj Orange
J'ai mis dans une cellule de mon classeur la formule suivante, qui me donne
bien le résultat escompté:

='E:\Mes Fichiers\Inventaire\2014\[matériel.xlsm]Total'!$F$4

Je suis en train de le faire évoluer pour que je puisse l'utiliser l'année
prochaine. Donc il me faudrait changer la formule en fonction de l'année
courante pour obtenir:
='E:\Mes Fichiers\Inventaire\2015\[matériel.xlsm]Total'!$F$4

Est ce possible ? Quelle est la solution ?
Merci pour votre aide.

10 réponses

1 2 3
Avatar
dyj Orange
Ne marche pas, le code doit être revu pour tourner en 64b;

"Jacky" a écrit dans le message de groupe de discussion :
m03ucv$ed$

Je n'ai pas fait attention à l'orthographe de ton classeur "Matériel.xlsm"
Celui-ci
http://cjoint.com/?DIAqZo6fLVR
--
Salutations
JJ
Avatar
dyj Orange
Comment je pourrai te faire passer 2 documents: un qui décrit toutes les
opérations que je fais pour installer, et le log de l'installation de
Morefunc ?

"MichD" a écrit dans le message de groupe de discussion :
m03qo3$mfa$

Me semble-t-il que tu n'as pas installé la bonne version du fichier.

Désinstalle ce programme en utilisant le panneau de configuration /
programmes et fonctionnalités /
Redémarre ton ordinateur et refais une installation à partir du fichier
suivant. Désolé, mais je
n'ai pas
d'autres suggestions...

Je publie un nouveau lien vers le fichier que j'ai utilisé.
http://cjoint.com/?DIApSWyuJU0
Avatar
MichD
Voici un fichier Excel (.xls) qui se retrouve dans le répertoire "C:Program FilesMorefunc" après
l'installation.
Il illustre par la photo de droite l'ajout qui est fait au ruban lors de l'installation. Si tu n'as
pas cette configuration ainsi que les éléments que j'ai décrits dans un message antérieur, ton
installation n'est pas bonne!

http://cjoint.com/?DIArwUmUhQv

Je viens de lire dans ton tout dernier message que tu travailles avec une version 64 bits d'Excel.
Perso. Je n'ai jamais tenté de faire l'installation de cette macro complémentaire dans cet
environnement...Cependant, je ne crois pas la chose possible, pas avec le fichier que j'ai publié.
C'est sans doute pour cela que le résultat attendu n'est pas au rendez-vous!
Avatar
isabelle
petite note au cas ou...

Morefunc est toujours fonctionnel sur les versions 32 bits d'office 2010 et 2013
mais pas sur les versions 64 bits.

http://www.xcell.excelabo.net/morefunc_download

isabelle

Le 2014-09-26 10:58, dyj Orange a écrit :
Ne marche pas, le code doit être revu pour tourner en 64b;

"Jacky" a écrit dans le message de groupe de discussion :
m03ucv$ed$

Je n'ai pas fait attention à l'orthographe de ton classeur "Matériel.xlsm"
Celui-ci
http://cjoint.com/?DIAqZo6fLVR
Avatar
dyj Orange
J'en arrive à cette conclusion car le code envoyé par Jacky ne marche pas en
64bits. J'ai un système, w8.1 en 32b. Demain j'essaierai.
Mais laisse moi te remercier pour tout le temps que tu as passé à m'aider.
Je trouverai bien une autre solution, sinon je modifierai manuellement mes
liens.
Merci.

"MichD" a écrit dans le message de groupe de discussion :
m040mi$72i$


Voici un fichier Excel (.xls) qui se retrouve dans le répertoire "C:Program
FilesMorefunc" après
l'installation.
Il illustre par la photo de droite l'ajout qui est fait au ruban lors de
l'installation. Si tu n'as
pas cette configuration ainsi que les éléments que j'ai décrits dans un
message antérieur, ton
installation n'est pas bonne!

http://cjoint.com/?DIArwUmUhQv

Je viens de lire dans ton tout dernier message que tu travailles avec une
version 64 bits d'Excel.
Perso. Je n'ai jamais tenté de faire l'installation de cette macro
complémentaire dans cet
environnement...Cependant, je ne crois pas la chose possible, pas avec le
fichier que j'ai publié.
C'est sans doute pour cela que le résultat attendu n'est pas au rendez-vous!
Avatar
MichD
Bonjour,

Il est possible en utilisant une fonction personnalisée en VBA d'extraire le contenu d'une cellule
d'un fichier fermé comme ceci.

A ) Tu ouvres la fenêtre de l'éditeur de code VBA Raccourci clavier : Alt + F11

B ) À partir de la barre des menus / outils / références / tu coches dans la liste
la référence suivante : "Microsoft Activex Data Objects 2.8 Library"

C ) Tu ajoutes un module avec la commande du menu : Insertion / module

D ) Tu copies la fonction suivante dans un MODULE STANDARD du projetVBA de ton classeur
'--------------------------------------------------------------
Function GetValueWithADO(Classeur$, Feuille$, Cell As Range)
'renvoie la valeur de la cellule Cell de la feuille Feuille
'du classeur fermé Classeur

Dim Conn As String, Rst As Object
Dim Requête As String, PlageBidon As Range

'prépare une "Plage de cellules bidon" pour la clause SELECT
'(un en-tête fictif et une ligne de données)
Set PlageBidon = Cell.Resize(2)

If Val(Application.Version) <= 11 Then
Conn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Classeur & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;"";"
Else
'prépare les commandes ADO et SQL
Conn = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & Classeur & ";" & _
"Extended Properties=""Excel 12.0;HDR=No;"";"
End If

Requête = "SELECT * FROM [" & Feuille & "$" & PlageBidon.Address(0, 0) & "]"

'crée l'objet Recordset
Set Rst = CreateObject("ADODB.Recordset")

'va chercher l'info
Rst.Open Requête, Conn, 0, 1, 1

'et la renvoie
GetValueWithADO = Application.Clean(Rst(0))
'autre syntaxe possible
' GetValueWithADO =Application.Clean(RcdSet.GetString(NumRows:=1))

'nettoyage
Set Rst = Nothing
End Function
'--------------------------------------------------------------

E ) Dans ta feuille de calcul, tu saisis ce type de formule :

=GetValueWithADO("Chemin & nom du fichier";"Nom de la feuille";adresse de la cellule)

Tu obtiens une syntaxe comme ceci pour récupérer un contenu texte
=GetValueWithADO("c:UsersTon profilDocumentsClasseur1.xlsm";"Feuil2";B2)

Pour récupérer un contenu numérique, tu peux utiliser une des 2 formules suivantes :
=GetValueWithADO("c:UsersDenisDocumentsClasseur1.xlsm";"Feuil2";A2)*1
OU
=CNUM(GetValueWithADO("c:UsersDenisDocumentsClasseur1.xlsm";"Feuil2";A2))

F ) Au besoin, tu peux tirer cette formule sur une colonne ou une ligne sans problème

G ) Cela devrait fonctionner pour toutes les versions d'Excel, 32 ou 64 bits.
Avatar
Jacky
Re...
Une solution simple serait d'ouvrir ce classeur de prendre ce que l'on a besoin est de le refermer
Ceci est tout à fait transparent et ne prend que 1 seconde
'-------------
Private Sub Workbook_Open()
Application.ScreenUpdating = False
Workbooks.Open Filename:="E:Mes FichiersInventaire" & Year(Date) & "matériel.xlsm"
ThisWorkbook.Sheets("Feuil2").[$A$1] = [total!f4] ' feuille et cellule à adapter
ActiveWindow.Close False
Application.ScreenUpdating = True
End Sub
'-------------

--
Salutations
JJ
Avatar
isabelle
bonjour,

voici une solution utilisant ExecuteExcel4Macro

________________________________________________________________________________________________________________________________________________

Sub Test()
Dim v As Variant, sPath As String, sFiles As String, sSheet As String, sAddress
As String
sPath = "C:UsersisabelleDocumentsEssaieExcel" 'adapter le répertoire
sFiles = "ExecuteExcel4Macro - test données.xls"
sSheet = "Feuil1"
'adapter le nom de la l'onglet
sAddress = Range(Cells(2, 1), Cells(10, 4)).Address 'adapter l'adresse
des cellules

v = GetValuesFromWB(sPath, sFiles, sSheet, sAddress)
Range(sAddress) = v

End Sub
________________________________________________________________________________________________________________________________________________
Function GetValuesFromWB(vPath, vFile, vSheet, vRef) As Variant

Dim c As Long
Dim r As Long
Dim vArr As Variant
Dim strArg As String
Dim lRows As Long
Dim lCols As Long

If Right$(vPath, 1) <> "" Then
vPath = vPath & ""
End If

If bFileExistsVBA(vPath & vFile) = False Then
GetValuesFromWB = "File Not Found"
Exit Function
End If

strArg = "'" & vPath & "[" & vFile & "]" & vSheet & "'!" & _
Range(vRef).Range("A1").Address(, , xlR1C1)

lRows = Range(vRef).Rows.Count
lCols = Range(vRef).Columns.Count

If lRows = 1 And lCols = 1 Then
GetValuesFromWB = ExecuteExcel4Macro(strArg)
Else
ReDim vArr(1 To lRows, 1 To lCols) As Variant
For r = 1 To lRows
For c = 1 To lCols
vArr(r, c) = ExecuteExcel4Macro("'" & vPath & "[" & vFile & "]" & _
vSheet & "'!" & _
Range(vRef).Cells(r, c).Address(, ,
xlR1C1))
Next c
Next r
GetValuesFromWB = vArr
End If

End Function
________________________________________________________________________________________________________________________________________________
Function bFileExistsVBA(ByVal sFile As String) As Boolean

Dim lAttr As Long

On Error Resume Next
lAttr = GetAttr(sFile)
bFileExistsVBA = (Err.Number = 0) And ((lAttr And vbDirectory) = 0)
On Error GoTo 0

End Function
________________________________________________________________________________________________________________________________________________

isabelle
Avatar
isabelle
ps/ toujours fonctionnel sur les versions 32 bits et 64 bits d'office 2010 et 2013

isabelle

Le 2014-09-26 23:12, isabelle a écrit :
bonjour,

voici une solution utilisant ExecuteExcel4Macro
Avatar
isabelle
je trouve que c'est très insultant de la part minuscrosoft de n'avoir pas
reconnu le travail de Laurent
bouchhhhh :(
isabelle

Le 2014-09-26 23:22, isabelle a écrit :
ps/ toujours fonctionnel sur les versions 32 bits et 64 bits d'office 2010 et 2013

isabelle

Le 2014-09-26 23:12, isabelle a écrit :
bonjour,

voici une solution utilisant ExecuteExcel4Macro




1 2 3