MsgBox Environ("OS")
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.
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionIf Dir(Environ$("SystemRoot") & "" & "WOW64", vbDirectory) <> "" Then MsgBox "Wibn 7 64 Bits" Else MsgBox "Win en 32 bits" End If
Sub version() If Mac Then MsgBox "Mac" End If If Win32 = True Then MsgBox "Win32" End If End Sub
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
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
#If Mac Then '....... #ElseIf Win32 Then '.......... #Else 'DONC NI MAC NI WIN 32 BITS '................. #End If
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
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
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.
Ce composant nécessite ieframe.dll
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
Bien bien je suis allé fouiner dans le dossier "system32" à la recherche de "ieframe.dll"
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