Restreindre l'ouverture d'un fichier à une version d'Excel ET à une version d'OS

SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 - 4 déc. 2011 à 01:44
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 - 11 déc. 2011 à 15:13
Bonsoir le Forum,

Je développe une macro qui est maintenant sur la fin. Néanmoins je rencontre quelques difficultés de compatibilité.

J'ai développé la macro sous Excel 2007 (version 12.0) et sous Windows XP (32-bit). Elle fonctionne très bien.
-Elle ne fonctionne plus à l'ouverture par Excel 2003.
-Elle ne fonctionne pas mieux avec Excel 2007 depuis Windows Seven (64-bit).
-Et enfin elle ne s'ouvre pas non plus avec Office 2011 pour Mac.

Pour éviter à l'utilisateur de se retrouver face à un message d'erreur, j'aimerais limiter l'ouverture du fichier Excel.
Les deux paramètres sont donc la version d'Excel, et la version de l'OS.

J'ai cherché sur le net et j'ai réussi à contrôler la version d'Excel. Ça fonctionne. Voici le code :


Private Sub Workbook_Open()

If Val(Application.Version) <> 12 Then
    MsgBox "L'application a été élaborée à l'aide d'office 2007 (version 12.0) sous Windows XP (32-bit)." & Chr(10) & Chr(10) _
    & "Vous utilisez actuellement la version " & Application.Version & " d'office qui tourne sous " & Application.OperatingSystem & "." & Chr(10) & Chr(10) _
    & "Le fichier va se fermer pour des raisons de non compatibilité."
    Application.Quit
End If

End Sub



Malheureusement je n'ai pas trouvé le moyen de contrôler la version de l'OS ou alors s'il est en 32 ou 64 bit.

Ma question est alors la suivante :

Peut-on contrôler la version de l'OS ou le type de bus (32 ou 64) du système au même titre que la version d'office ?

Merci à ceux qui pourront m'aiguiller.

Bien cordialement,

André

61 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 déc. 2011 à 08:05
Bonjour,

je n'ai sous la main en ce moment qu'un PC avec XP et ne peut donc voir les différences d'affichage selon les versions.
Essaye, toi, avec ;
MsgBox Environ("OS")


Mais cela ne résoudra à mon avis pas le problème avec Mac (car déjà trop tard, quand tu ouvres).

Par ailleurs :
J'ai développé la macro sous Excel 2007 (version 12.0) et sous Windows XP (32-bit). Elle fonctionne très bien.
-Elle ne fonctionne plus à l'ouverture par Excel 2003.

Dégrade donc ton projet . Enregistrer sous ===>> type de fichier : Excel 97-2003
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 déc. 2011 à 08:16
ceci également est susceptible de t'intéresser :
Private Declare Function GetVersion Lib "kernel32" () As Long

Private Sub Command1_Click()
    Dim Ver As Long, WinVer As Long, toto As String
    Ver = GetVersion()
    WinVer = Ver And &HFFFF&
    toto = Format((WinVer Mod 256) + ((WinVer \ 256) / 100), "Fixed")
    MsgBox "Windows version: " & toto
End Sub


Mais ne sera certes pas reconnu par Mac !
En fait, je pense que la compilation conditionnelle est ta réponse, en ce qui concerne Mac.
Ouvre ton aide VBA sur "Constantes de compilation"



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 déc. 2011 à 08:27
En fait, la compilation conditionnelle devrait, seule, régler ton problème d'OS.
Je ne comprends par contre pas pourquoi cela ne fonctionne pas avec WIN7 64 bits. Il es probable qu'il s'agit uniquement d'un problème de protection de certains répertoires (dont la racine C:\), que tu ne devrais pas utiliser).


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
4 déc. 2011 à 13:43
Salut Ucfoutu,

-J'ai testé "MsgBox Environ("OS")". En effet, j'obtiens une information sur une partie du système mais qui me semble trop pauvre pour pouvoir identifier un OS complet. Je n'ai pas encore pu faire tous les tests de compatibilité que je désirais, mais il me semble qu'a première vue le 64 bit n'est pas adapté. Donc il me faudrait un moyen de refuser l'ouverture de mon fichier Excel par les 64 bit.

Et pour le moment je ne parviens pas à extraire cette info.

-Je ne peux pas dégrader mon projet pour le décliner sous une version inférieur d'office. En effet, j'ai tout codé avec Excel 2007 et de fait j'utilise des mises en formes conditionnelles qui n’existent pas sous dans les versions antérieurs. J'utilise également des styles de graphiques (3D) qui ne sont pas disponible dans les versions antérieurs. Et enfin j'utilise deux ou trois petites choses non compatibles non plus.
Donc au final, je préfère bloquer l'accès au fichier à ceux qui voudrait l'ouvrir avec des versions antérieurs à Excel 2007. Cela m'est permis, donc je décide de choisir cette voie.


-Le petit bout de code que tu propose ensuite fonctionne lui aussi mais ne donne pas non plus suffisamment d'information je pense ?

-Je vais tester du coté de "Constantes de compilation"

Merci à toi Ucfoutu pour ces première info.

André
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 déc. 2011 à 14:40
Je ne peux tester bien loin, sans Win 7 64 bits.
Je te propose toutefois, dans ce cas, de tester la présence ou non du répertoire WOW64, dont je vois qu'il n'existe que sous Win 7 64 bits.
Ainsi :
If Dir(Environ$("SystemRoot") & "" & "WOW64", vbDirectory) <> "" Then
   MsgBox "Wibn 7 64 Bits"
 Else
   MsgBox "Win en 32 bits"
 End If


Essaye cela (en croisant les doigts)

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
4 déc. 2011 à 15:29
Re,

J'ai jeté un coup d’œil sur les constantes de compilation. C'est en effet en rapport avec mon problème. J'ai fait deux trois tests mais je ne suis pas parvenu à m'en servir. J'ai essayé de tester que mon système était en 32 bit et je ne suis pas parvenu à un résultat. j'ai essayé ce code :

Sub version()

If Mac Then
    MsgBox "Mac"
End If

If Win32 = True Then
    MsgBox "Win32"
End If

End Sub


Je m'y suis mal pris ?

Sinon en ce qui concerne le petit bout de code que tu propose pour tester l'existence d'un répertoire je ne peux pas tester non plus. Je n'ai pas accès à tous les pc autour de moi lol^^. Je suis comme toi, je travail un peu en sous-marin pour le moment. Pas facile !

Mais mais mais...

J'ai pu mener d'autres tests et voici les résultats :

-Macro sous Windows XP 32 bit et Office 2007 => Nickel, rien à dire. Normal elle a été programmée et testée sous ces conditions.

-Macro sous Seven 32 Bit et Office 2010 => Ne fonctionne pas. Plante à l'affichage d'un UserForm qui utilise un WebBrowser. Le message d'erreur est du à un problème de chemin d'accès. En supprimant le WebBrowser la macro se déroule entièrement mais les graphiques ne se sont pas incrustés aux endroits demandé par la code. Problème du à Seven 32 bit ou Office 2010 ???

-Macro sous Seven 64 bit et Office 2007 => Ne fonctionne pas non plus. Plante à l'affichage d'un UserForm qui utilise un WebBrowser. Je n'ai pas pu tester le code en enlevant le WebBrowser. Problème du à Seven 64 bit puisque c'est le même Office 2007 qui a été utilisé dans la version qui fonctionne ???

-Macro sous Mac et Office 2011 => Ne fonctionne pas non plus. Plante à l'affichage d'un UserForm qui utilise un WebBrowser. Je n'ai pas pu tester le code en enlevant le WebBrowser. Problème du à Mac ou Office 2011 ???


J'ai pu faire ces tests pour le moment. Il me semble que le problème ne viens pas de la version d'Office mais plutôt de la version de l'OS. Il faudrait que je teste sous Windows XP un office 2010 ou 2011 pour vérifier cette hypothèse.
Conclusion : Je doit autoriser l'accès au fichier Excel uniquement à partir d'un Windows XP 32 bit. Comment dois-je m'y prendre ? Je ne parviens pas à isoler proprement la version de l'OS.

Si quelqu'un à des réponses sur ce sujet je suis preneur.

André

Ps : je post en supplément deux bouts de codes trouvés sur le net qui me semblent extrêmement pertinent pour mon problème mais dont je ne parviens pas à extraire l'information utile. Si quelqu'un sait les adapter à mon problème...

Code 1 :

Option Explicit

Public Declare Function GetWinVersion Lib "kernel32" Alias "GetVersionExA" _
                                      (lpVersionInformation As OSVERSIONINFO) As Long
Public Declare Function GetWinVersionEx Lib "kernel32" Alias "GetVersionExA" _
                                        (lpVersionInformation As OSVERSIONINFOEX) As Long

'Déclaration des constantes
Const VER_SUITE_SMALLBUSINESS = &H1
Const VER_SUITE_ENTERPRISE = &H2
Const VER_SUITE_BACKOFFICE = &H4
Const VER_SUITE_BLADE = &H400
Const VER_SUITE_COMMUNICATIONS = &H8
Const VER_SUITE_TERMINAL = &H10
Const VER_SUITE_SMALLBUSINESS_RESTRICTED = &H20
Const VER_SUITE_EMBEDDEDNT = &H40
Const VER_SUITE_DATACENTER = &H80
Const VER_SUITE_SINGLEUSERTS = &H100
Const VER_SUITE_PERSONAL = &H200

Const VER_NT_WORKSTATION = &H1
Const VER_NT_DOMAIN_CONTROLLER = &H2
Const VER_NT_SERVER = &H3

Public Const VER_PLATFORM_WIN32s = 0
Public Const VER_PLATFORM_WIN32_WINDOWS = 1
Public Const VER_PLATFORM_WIN32_NT = 2

'Structure pour les versions WinDOS
Public Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128    'sous type de certaines versions
End Type

'Structure pour les versions WinNT
Public Type OSVERSIONINFOEX
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128    'sous type ou info sur service pack installé
    wServicePackMajor As Integer
    wServicePackMinor As Integer
    wSuiteMask As Integer
    wProductType As Byte
    wRest As Byte
End Type


Public Sub GetWindowsVersion()
Dim oviWinNT As OSVERSIONINFOEX
Dim oviWin32 As OSVERSIONINFO
Dim strVer As String
Dim Os As String
Dim OSType As String
Dim NumeroVersion As String
Dim Detail As String
Dim Msg$, SP$

    oviWin32.dwOSVersionInfoSize = Len(oviWin32)
    GetWinVersion oviWin32
    Detail = Mid(oviWin32.szCSDVersion, 2, 1)

    Select Case oviWin32.dwPlatformId

        Case VER_PLATFORM_WIN32_WINDOWS

            If oviWin32.dwMajorVersion 4 And oviWin32.dwMinorVersion 0 Then
                Os = "Windows 95"
                If Detail = "A" Then
                    Os = Os & " OSR1"
                ElseIf Detail = "B" Then
                    Os = Os & " OSR2"
                End If
            ElseIf oviWin32.dwMajorVersion 4 And oviWin32.dwMinorVersion 3 Then
                Os = "Windows 95 OSR2"
                If Detail = "B" Then
                    Os = Os & ".1"
                ElseIf Detail = "C" Then
                    Os = Os & ".5"
                End If
            ElseIf oviWin32.dwMajorVersion 4 And oviWin32.dwMinorVersion 10 Then
                Os = "Windows 98"
                If Detail "A" Then Os Os & " SE (Seconde Édition)"
            ElseIf oviWin32.dwMajorVersion 4 And oviWin32.dwMinorVersion 90 Then
                Os = "Windows ME (Millenium Édition)"
            End If
            NumeroVersion = "[" & oviWin32.dwMajorVersion & "." _
                            & oviWin32.dwMinorVersion & _
                            IIf(Asc(Detail) = 0, "", "." & Detail) & "]"

        Case VER_PLATFORM_WIN32_NT

            oviWinNT.dwOSVersionInfoSize = Len(oviWinNT)
            GetWinVersionEx oviWinNT

            If oviWinNT.dwMajorVersion 3 And oviWinNT.dwMinorVersion 0 Then
                Os = "Windows NT 3.0"
            ElseIf oviWinNT.dwMajorVersion 3 And oviWinNT.dwMinorVersion 1 Then
                Os = "Windows NT 3.1"
            ElseIf oviWinNT.dwMajorVersion 3 And oviWinNT.dwMinorVersion 51 Then
                Os = "Windows NT 3.51"
            ElseIf oviWinNT.dwMajorVersion = 4 Then
                Os = "Windows NT 4.0"
            ElseIf oviWinNT.dwMajorVersion 5 And oviWinNT.dwMinorVersion 0 Then
                Os = "Windows 2000"
            ElseIf oviWinNT.dwMajorVersion 5 And oviWinNT.dwMinorVersion 1 Then
                Os = "Windows XP"
            ElseIf oviWinNT.dwMajorVersion 5 And oviWinNT.dwMinorVersion 2 Then
                Os = "Windows 2003 Serveur"
            End If

            'De quel type est le produit NT/2000/XP/2003 ?
            Select Case oviWinNT.wProductType
                Case VER_NT_WORKSTATION
                    If oviWinNT.dwMajorVersion < 5 Then
                        OSType = "Station de travail"
                    Else
                        If oviWinNT.wSuiteMask And VER_SUITE_PERSONAL Then
                            OSType = "Édition familiale"
                        Else
                            OSType = "Professionnel"
                        End If
                    End If
                Case VER_NT_DOMAIN_CONTROLLER
                    OSType = "Serveur (Contrôleur de domaine)"
                Case VER_NT_SERVER
                    If oviWinNT.wSuiteMask And VER_SUITE_DATACENTER Then
                        OSType = "Serveur (Centre de données)"
                    ElseIf oviWinNT.wSuiteMask And VER_SUITE_ENTERPRISE Then
                        If oviWinNT.dwMajorVersion 5 And oviWinNT.dwMinorVersion 0 Then
                            OSType = "Serveur avancé"
                        Else
                            OSType = "Edition Entreprise"
                        End If
                    ElseIf oviWinNT.wSuiteMask And VER_SUITE_BLADE Then
                        OSType = "Édition Web"
                    Else
                        OSType = "Serveur"
                    End If
            End Select

            NumeroVersion = "[" & oviWinNT.dwMajorVersion & "." _
                            & oviWinNT.dwMinorVersion & "." _
                            & oviWinNT.dwBuildNumber & "]"

            If oviWinNT.wServicePackMajor >= 1 Then
                SP = "Service Pack : " & oviWinNT.wServicePackMajor & "." & _
                     oviWinNT.wServicePackMinor
            Else
                SP = "Service Pack : " & "Aucun Service Pack installé"
            End If
    End Select

    Msg = "Système : " & Os & " " & OSType & vbLf
    Msg = Msg & "Numéro version : " & NumeroVersion & vbLf
    Msg = Msg & SP
    MsgBox Msg
End Sub


Code 2

Option Explicit
 'API Windows pour version de Windows
Private Declare Function GetVersionExA Lib "kernel32" (lpVersionInformation As OSVERSIONINFOEX) As Integer
 
 'API Windows pour chercher si le système est en 64 bytes
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function IsWow64Process Lib "kernel32" (ByVal hProc As Long, bWow64Process As Boolean) As Long
 
Private Const VER_NT_WORKSTATION = 1 ' Le système d'exploitation est Windows 7, Windows Vista, Windows XP Professional, Windows XP Home Edition, or Windows 2000 Professional.
 
Private Type OSVERSIONINFOEX
    dwOSVersionInfoSize As Long ' La taille de cette structure de données, en octets
    dwMajorVersion As Long ' Le nombre de la version majeure du système d'exploitation
    dwMinorVersion As Long ' Le nombre de la version mineure du système d'exploitation
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
    wServicePackMajor As Integer
    wServicePackMinor As Integer
    wSuiteMask As Integer
    wProductType As Byte ' Autre information supplémentaires sur le système et notamment  pour VER_NT_WORKSTATION, wProductType = 1
    wReserved As Byte
End Type
Public Function VersionWindows() As String
' Fonction pour identifier les versions de Windows [Windows XP, Seven 32 et 64 bytes]
                                Dim Os                      As OSVERSIONINFOEX
 
                                Dim Handle                  As Long
                                Dim Est64bit                As Boolean
                                Dim Bytes                   As String
 
    'Initialise la valeur à false : il n'y a pas  Wow64 process
    Est64bit = False
    VersionWindows = "Système non prévu"
 
    'On vérifie que la dll kernel32.dll contient bien une méthode IsWow64Process
    Handle = GetProcAddress(GetModuleHandle("kernel32"), "IsWow64Process")
 
    'Si la fonction IsWow64Process existe on l'utise pour déterminer si on est en 64 bytes
    If Handle > 0 Then IsWow64Process GetCurrentProcess(), Est64bit
 
    If Est64bit = False Then
        Bytes = "32bytes"
    Else
        Bytes = "64bytes"
    End If
 
    Os.dwOSVersionInfoSize = Len(Os)
    GetVersionExA Os
 
    'On teste sur les versions de Windows
    Select Case CStr(Os.dwMajorVersion & "." & Os.dwMinorVersion)
        Case "5.1"
            VersionWindows = "Windows XP"
        Case "6.1"
            If Os.wProductType VER_NT_WORKSTATION Then VersionWindows "Windows 7" & "-" & Bytes
    End Select
End Function
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 déc. 2011 à 15:56
Tu ne parviendras pas à utiliser ce code (qui utilise des fonctions de l'API de Windows) sous Mac (par définition) .
Pour la compilation conditionnelle, tu as oublié le signe attendu (#) de compilation conditionnelle ===>>

#If Mac Then
    '.......
#ElseIf Win32 Then
   '..........

#Else
    'DONC NI MAC NI WIN 32 BITS
    '.................
#End If


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
4 déc. 2011 à 16:53
Merci pour la correction Ucfoutu. Je n'avais encore jamais utilisé ce type de compilation conditionnelle.

Voici ci-après le code que j'utilise. Il permet d'interdire l'ouverture du fichier Excel si la version d'Office est différente de 2007 et si l'OS est différent de 32 bit. (Pas testé encore, mais je pense que c'est correct)

Private Sub Workbook_Open()

If Val(Application.version) <> 12 Then
    MsgBox "L'application a été élaborée à l'aide d'office 2007 (version 12.0) sous Windows XP (32-bit)." & Chr(10) & Chr(10) _
    & "Vous utilisez actuellement la version " & Application.version & " d'office qui tourne sous " & Application.OperatingSystem & "." & Chr(10) & Chr(10) _
    & "Le fichier va se fermer pour des raisons de non compatibilité."
    Application.Quit
End If

#If NotWin32 Then
    Application.Quit
#End If

End Sub


Est il possible de compiler les deux instructions ensemble ? Un truc du genre :

Private Sub Workbook_Open()

If Val(Application.version) <> 12 Or NotWin32 Then
    MsgBox "L'application a été élaborée à l'aide d'office 2007 (version 12.0) sous Windows XP (32-bit)." & Chr(10) & Chr(10) _
    & "Vous utilisez actuellement la version " & Application.version & " d'office qui tourne sous " & Application.OperatingSystem & "." & Chr(10) & Chr(10) _
    & "Le fichier va se fermer pour des raisons de non compatibilité."
    Application.Quit
End If

End Sub


Bon une fois que ce bout de code sera bien opérationnel, je serais en mesure de contrôler la version d'office qui est utilisée ainsi que la version de l'OS en 32 ou 64 bit. Ne me reste plus qu'a identifier le type d'OS employé ! (Windows XP, Vista, Seven, Mac, Linux...) et restreindre l'accès au Windows XP uniquement.

Des idées pour ce faire ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 déc. 2011 à 17:05
Difficile d'avancer sans pouvoir tester sur toutes les machines.

Mais il me semble préférable d'inverser ton ordre et de commencer par les expression #if ... de compilation conditionnelle.
On attendra donc Lundi, que tu aies sous la main de quoi tester.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 déc. 2011 à 17:11
C'est quoi, au fait, le composant WebBrowser utilisé et qui pose problème sous Win 7 ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 déc. 2011 à 17:23
Quant à tester si sous Unix (pas sur machine virtuelle installée sur unix, hein ...) ==>> même pas la peine, puisque ton classeur ne s'y ouvrirait même pas !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
4 déc. 2011 à 17:53
Ayé j'ai donc inversé l'ordre dans mon code. Je tchek d'abord si on est en 32 ou 64 bit puis si on utilise Office 2007 ou non.

De ce coté la tout va bien. Par contre quand tu dis d'attendre Lundi pour que je teste sur les différentes machines...je ne pense pas que sa soit possible. D'abord parce que je n'aurais pas toutes les machines sous la main, et ensuite que ma journée sera trop chargée par mon travail, ce qui m’empêchera complètement de m'amuser avec la macro. Dommage !

J'essaierais probablement le tester des choses le soir. On verra. Dans tous les cas le problème posé reste le même : Je vais devoir récupérer la version du système sous lequel le fichier Excel tourne. En fonction de l'OS, je déciderais ou non de quitter l'application. Et ça, je ne parviens pas à le simuler encore. Donc au pire mes tests me diront quels OS sont acceptables ou pas, mais je ne parviendrais pas à restreindre l'accès dans tous les cas^^

Content d'apprendre que pour le cas Unix c'est réglé d'office^^. C'est toujours ça en moins.

En ce qui concerne le composant WebBrowser qui fait tout foiré voici comment j'avais procédé à l'époque :

Sous Vba, j'allais dans feuilles (Formulaire) puis dans la boîte à outil je faisais click droit et "contrôles supplémentaires". Dans la liste je cherche "Navigateur Web Microsoft". C'est le seul composant que j'ai du chargé "manuellement" en plus de la config par défaut. Peut-être que c'est pour ça que ça ne fonctionne pas. Ah non je ne pense pas que ça soit la cause du problème. En effet, si j'ouvre mon fichier Excel via un autre Windows XP qui utilise Office 2007, tout fonctionne très bien au même titre que mon Windows XP. Donc le fait que j'ai chargé moi même ce composant ne met rien en défaut. Ça vient d’ailleurs. Bizarre...


Je n'y connais rien à ces composants, mais je suis convaincu que ce WebBrowser n'est pas compatible sous Seven, ni Mac. Ou alors Office 2010, ou Office 2011. Mais bon j'y connais rien la. J'ai juste constaté que si je l'enlève ça fonctionne.


André
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 déc. 2011 à 18:16
Le problème du composant WebBrowser que tu indiques ne me parait pas être lié à des OS différents (sous Windows, toujours, bien évidemment).
C'est la conclusion que tu as tirée, mais elle n'est pas exacte et ne correspond qu'à une coincidence.
Ce composant nécessite ieframe.dll, qui peut avoir été tout simplement "jeté" par l'administrateur d'un autre PC Windows (XP, Win 7 ou non !).
Eh oui ! certains refusent quelquefois de "subir" ce que M. Bill tend à leur imposer .
ieframe.dll est ce qui fait fonctionner Internet Explorer et est installé en même temps que Internet Explorer.
Il se peut également que, sans avoir été "jeté", ieframe.dll soit corrompu. Il se peut enfin qu'il s'agisse d'une vieille version d'IE 6 qui, à l'occasion d'une mise à jour vers IE67, ait provoqué une modification erronée d'une clef de la base de registre (et que tout cela soit passé complètement inaperçu, surtout si la machine concernée passe par un autre navigateur).

En résumé :
1) ne crois pas qu'en te limitant à XP, tu te trouveras toujours à l'abri de cet aléa.
2) la communication du message d'erreur (pour ce composant) reçu à l'exécution devrait nous en dire beaucoup long, de manière beaucoup plus précise.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
4 déc. 2011 à 19:28
-
Le problème du composant WebBrowser que tu indiques ne me parait pas être lié à des OS différents (sous Windows, toujours, bien évidemment).
C'est la conclusion que tu as tirée, mais elle n'est pas exacte et ne correspond qu'à une coïncidence.


En effet, actuellement j'ai toujours rencontré l'erreur avec un autre OS que Windows XP. Et entre plusieurs Windows XP ça fonctionne très bien. Coïncidence ou plus, je n'en ai aucune idée^^

-
Ce composant nécessite ieframe.dll


En ce qui concerne ce composant, ça ne me dit absolument rien. Aucune idée si je l'ai installé dans ma machine et/ou s'il est installé sur les autres machines. En revanche si tu me dis qu'il est lié à Internet Explorer, je peux tout de suite te dire mon avis...Pour moi, et je dis bien pour moi, Internet Explorer est mauvais (pour rester simplement poli). Autant te dire que je ne l'utilise absolument pas, et que la version de base installé chez moi doit être la version 6 ou 7.

Toutes les machines sur lesquelles j'ai testé le code, n'utilisent pas IE par défaut. Toutes utilisaient Firefox. Toutes les machines étant en mode administrateur. Je ne pense pas vraiment qu'il y ai un lien entre ce composant et le fait que ça ne marche pas. Je me trompe peut être, mais je n'y crois pas trop.

Je reste convaincu qu'il s'agit d'une incompatibilité entre OS ou Office. Mais pour le prouver...piouf !

Je n'ai plus de machine sous la main pour générer le message d'erreur. Je le posterai demain si je peux.

Je ne sais pas trop quoi en penser. Il faudrait que mon fichier Excel ne tourne pas au moins une fois sur XP, et qu'il fonctionne au moins une fois sur un autre OS que XP. Mais pour le moment, ce n'est pas le cas.

André
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 déc. 2011 à 19:39
Je reste convaincu qu'il s'agit d'une incompatibilité entre OS ou Office. Mais pour le prouver...piouf !

Je n'ai plus de machine sous la main pour générer le message d'erreur. Je le posterai demain si je peux.

C'est cela : seul le message d'erreur nous renseignera
Je ne sais pas trop quoi en penser. Il faudrait que mon fichier Excel ne tourne pas au moins une fois sur XP

c'est simple : va ( sur XP, si tu veux) sur system32 : copie ieframe.dll ===>> colle-le sur une clé usb (de sorte à l'y retrouver, hein) ===>> efface-le de system32 et ... teste !
Pour le reste : méfie-toi toujours des conclusions trop hâtives, basées sur le seul empirisme, y compris si elles correspondent à une situation qui "parait" être toujours la même. Les médecins, par exemple et entre autres, se gardent bien de s'en contenter
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 déc. 2011 à 19:43
Tiens !
je vais te remémorer une affaire assez comique :
Une "affaire" qui a fait à l'époque grand bruit, beaucoup rire et générer les blagues les plus graveleuses et croustillantes en Grande-Bretagne :
Statistiques britanniques de l'époque : 80 % des femmes atteintes du cancer du sein avaient épousé de gros fumeurs .
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
4 déc. 2011 à 22:22
Bien bien je suis allé fouiner dans le dossier "system32" à la recherche de "ieframe.dll"...Et aucune trace de cette ddl.
J'ai donc lancé une recherche dans le dossier de la ddl et le système de trouve aucune trace cette ddl.

Donc je sais pas quoi dire. Je continue de penser que cette ddl n'est pas mise en cause. Mais bon c'est juste une intuition.

Je mise tous mes espoirs sur le msessage d'erreur que je récupère au lancement de ma macro sur un autre OS ;)

Réponse demain matin du coup...

André
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 déc. 2011 à 23:20
Bien bien je suis allé fouiner dans le dossier "system32" à la recherche de "ieframe.dll"

Là, cela devient inquiétant car c'est très précisément le composant Microsoft Web Browser que tu dis plus haut avoir coché ! Il y a un problème, là, non ?
Mais on va le savoir ===>> va dans ta liste de composants ===>> cherche ce fameux composant et dis-nous quel chemin est affiché tout en bas de ta boîte lorsque tu mets en surbrillance ce mystérieux composant


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 déc. 2011 à 23:47
Ca y est, j'ai compris (et voilà du coup probablement l'explication de ton problème de navigateur)
Toi, tu as installé et coché le composant shdocvw.dll (Microsoft Internet Controls et non Microsofr Web Browser). Où l'as-tu pêché ? (peut-être depuis Access).
Et en plus, tu n'as pas installé ieframe.dll (qui ne t'est donc même pas proposé dans la liste des composants)
Va alors t'étonner de rencontrer des problèmes sur d'autres machine ! . Ce n'est à mon avis pas en fonction de l'OS, quant tu n'en rencontres pas, de problèmes, mais en fonction de la présence sur ces machines, comme sur la tienne, du composant shdocvw.dll. Probablement parce qu'elles hébergent également access ou un logiciel avec lequel est livré ce composant.

Te voilà renseigné


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
5 déc. 2011 à 02:52
Tiens je ne pensais pas avoir de message de ta part si tard Ucfoutu. J'aurais pu te répondre dans la soirée si j'avais vérifié mes messages. Sorry.

Alors allons y pour les réponses...

-
va dans ta liste de composants ===>> cherche ce fameux composant et dis-nous quel chemin est affiché tout en bas de ta boîte lorsque tu mets en surbrillance ce mystérieux composant


J'obtiens le chemin suivant : "Emplacement C:\WINDOWS\system32\shdocvw.ddl"

Ce qui correspond exactement au nom que tu mentionne dans ta réponse Ucfoutu ! Je n'ai rien installé du tout par contre. Sous VBA pour créer mon UserForm il me manquait ce module dans la boîte à outil. J'ai seulement cliqué droit dessus, puis ajouter des contrôles supplémentaires, et enfin dans la liste proposée j'ai coché navigateur Web Microsoft. Ce module était ensuite disponible dans ma palette d'outils de base. Donc ce module était déjà proposé parmi une multitude d'autres modules. Je ne suis allé le pêcher nul part lol^^

En fait à l'époque ou je voulais me servir du Web Browser, sur le net on disait qu'il fallait cocher "Microsoft Web Browser" pour l'avoir dans sa palette d'outils. Sauf que moi je ne l'ai jamais trouvé ! Je comprends mieux pourquoi maintenant^^ Du coup, ne connaissant absolument rien du Web Browser je me suis rabattu sur l'élément qui s'y rapprochait le plus. Je suis tombé (presque par hasard) sur le "Navigateur Web Microsoft"

En jouant un peu avec, j'ai réussi à faire afficher les choses qui m’intéressaient. (C'est peut être pour ça que j'ai réussi à faire afficher des choses dont les gens du Net affirmaient que ce n'était pas possible^^). Du coup, bien content de moi, je suis passé allégrement sur d'autres problèmes de ma macro. Et s'en est resté la.

Du coup si je comprends bien ton raisonnement, il suffirait que chaque machine dispose de cette fameuse ddl "shdocvw.dll" pour ne plus avoir de problème... Comment je peux faire pour résoudre mon problème du coup ?

-Devrais-je plutôt tenter d'intégrer cette ddl dans ma macro pour être sure ne plus avoir le problème ? (je ne sais pas du tout si c'est envisageable bien sur. Je dis ça comme ça.)

-Devrais-je plutôt vérifier l'existence de la ddl dans le système d'exploitation et interdire l'ouverture du fichier Excel si elle n'est pas disponible ?

-Dois-je arrêter mes recherches sur comment restreindre l'ouverture de mon fichier Excel suivant 32 ou 64 bit, le type d'OS, et la version d'Office ???

-D'autres idées plus adaptées peut-être ?

Je ne sais pas trop par ou continuer du coup. En tout cas un grand merci à toi pour ces infos de plantage. Ça me semble plus que cohérent !

André

Ps : Tu es vraiment calé dans un large domaine de l'informatique Ucfoutu. C'est remarquable je trouve. Tu m'étonne toujours et encore. La class ! Jusqu'aux ddl sérieux. Piouf !
0
Rejoignez-nous