Microsoft 365 VBA Adapter un code 32 à 64bits. MAJ fichiers d'un dossier

anthooooony

XLDnaute Occasionnel
Bonjour,

j'utilise un code qui fonctionne très bien depuis des années, qui permet de mettre à jour tous les fichier xlsms d'un dossier donné. seulement depuis 2 mois on m'a changé la version d'excel et je suis passé de 32 bits à 64bits, ce qui provoque une erreur m'empechant d'exécuter mes fichiers.
Auriez vous une idée de comment débloquer la situation?

VB:
Private Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineA" () As Long
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (lpString As Any) As Long
Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (lpString1 As Any, lpString2 As Any) As Long

Private Function GetCmd() As String
   Dim lpCmd As Long
   lpCmd = GetCommandLine()
   GetCmd = Space$(lstrlen(ByVal lpCmd))
   lstrcpy ByVal GetCmd, ByVal lpCmd
End Function


Private Sub Workbook_Open()
Dim macmdline As Variant
Dim monparam As Variant 'déclare une variable
Dim ListeParam As Variant
Dim i As Integer

macmdline = GetCmd 'affecte la valeur de la ligne de commande
If Not IsNull(macmdline) Then 'si la variable est nulle
    If Len(macmdline) > 0 Then 'on s'assure qu'il y a eu une ligne de commande passée
        If InStr(macmdline, "/cmd") > 0 Then
            macmdline = Replace(macmdline, ThisWorkbook.FullName, "", , , vbTextCompare)
            monparam = Split(macmdline, "/cmd")
            ListeParam = Split(Mid(monparam(1), 2, Len(monparam(1)) - 3), "/")
            For i = 0 To UBound(ListeParam)
               Application.Run ListeParam(i)
            Next i
        End If
    End If
End If
End Sub



1034705





En vous remerciant par avance cher downloadiens,

Anthooooony
 

eriiic

XLDnaute Barbatruc
Bonjour,

à voir ton projet tu as également des formulaires.
La grosse majorité des composants ActiveX (la quasi totalité de ceux fournis avec office déjà) ne sont pas compatibles 64 bits.
Donc avant de penser à adapter, regarde si tu peux te passer de ces formulaires. Il faudrait qu"ils n'utilisent que des composants existants en 64 bits.
Sinon il faut demander à revenir en 32 bits.
eric
 

anthooooony

XLDnaute Occasionnel
Merci Eric pour ton retour. En réalité on m'a mis 64 bits parce que j'avais une version de powerbi en 64 et que pour des raisons de comptabilité on m'a aligner mon pack office à celui de PB.
concernant le formulaire c'est étonnant moi ce qu'il me sert c'est uniquement une variable pour mettre le lien vers un dossier.
Je vais essayer de continuer à regarder sur internet pour avoir plus ou moins la meme chose sur ma version.

merci pour ta réactivité
Anthooooony
 

anthooooony

XLDnaute Occasionnel
:eek::eek::eek::eek::eek: c'était tout mais qu'est ce que ca me va me servir!!!! génial merci ca fonctionne tres bien!

Anthooooony

ps : la solution :

VB:
Private Declare PtrSafe Function GetCommandLine Lib "kernel32" Alias "GetCommandLineA" () As Long
Private Declare PtrSafe Function lstrlen Lib "kernel32" Alias "lstrlenA" (lpString As Any) As Long
Private Declare PtrSafe Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (lpString1 As Any, lpString2 As Any) As Long

Private Function GetCmd() As String
   Dim lpCmd As Long
   lpCmd = GetCommandLine()
   GetCmd = Space$(lstrlen(ByVal lpCmd))
   lstrcpy ByVal GetCmd, ByVal lpCmd
End Function


Private Sub Workbook_Open()
Dim macmdline As Variant
Dim monparam As Variant 'déclare une variable
Dim ListeParam As Variant
Dim i As Integer

macmdline = GetCmd 'affecte la valeur de la ligne de commande
If Not IsNull(macmdline) Then 'si la variable est nulle
    If Len(macmdline) > 0 Then 'on s'assure qu'il y a eu une ligne de commande passée
        If InStr(macmdline, "/cmd") > 0 Then
            macmdline = Replace(macmdline, ThisWorkbook.FullName, "", , , vbTextCompare)
            monparam = Split(macmdline, "/cmd")
            ListeParam = Split(Mid(monparam(1), 2, Len(monparam(1)) - 3), "/")
            For i = 0 To UBound(ListeParam)
               Application.Run ListeParam(i)
            Next i
        End If
    End If
End If
End Sub
 

Valtrase

XLDnaute Occasionnel
:eek::eek::eek::eek::eek: c'était tout mais qu'est ce que ca me va me servir!!!! génial merci ca fonctionne tres bien!

Anthooooony

ps : la solution :

VB:
Private Declare PtrSafe Function GetCommandLine Lib "kernel32" Alias "GetCommandLineA" () As Long
Private Declare PtrSafe Function lstrlen Lib "kernel32" Alias "lstrlenA" (lpString As Any) As Long
Private Declare PtrSafe Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (lpString1 As Any, lpString2 As Any) As Long

Private Function GetCmd() As String
   Dim lpCmd As Long
   lpCmd = GetCommandLine()
   GetCmd = Space$(lstrlen(ByVal lpCmd))
   lstrcpy ByVal GetCmd, ByVal lpCmd
End Function


Private Sub Workbook_Open()
Dim macmdline As Variant
Dim monparam As Variant 'déclare une variable
Dim ListeParam As Variant
Dim i As Integer

macmdline = GetCmd 'affecte la valeur de la ligne de commande
If Not IsNull(macmdline) Then 'si la variable est nulle
    If Len(macmdline) > 0 Then 'on s'assure qu'il y a eu une ligne de commande passée
        If InStr(macmdline, "/cmd") > 0 Then
            macmdline = Replace(macmdline, ThisWorkbook.FullName, "", , , vbTextCompare)
            monparam = Split(macmdline, "/cmd")
            ListeParam = Split(Mid(monparam(1), 2, Len(monparam(1)) - 3), "/")
            For i = 0 To UBound(ListeParam)
               Application.Run ListeParam(i)
            Next i
        End If
    End If
End If
End Sub
Bonjour à tous
Les types long doivent aussi être changés un peu de lecture....
 

Discussions similaires

Statistiques des forums

Discussions
311 705
Messages
2 081 724
Membres
101 804
dernier inscrit
chefTarik