Bonsoir Isabelle,
Il voulait juste tester la version d'Excel ;-)))bonjour André,
voici un code donné ici par Frédéric
Bonsoir,
Avec votre aide, le code a été testé sur un nombre de versions de
Windows très
significatif, il devrait donc renvoyer un résultat correct dans tous les
cas.
Merci à tous.
(Code final sous ma signature)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
'================================ > > 'infos sur l'OS utilisé (version, type, etc.)
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 'fs
isabelle
Bonjour à tous
Je ne me sorts pas de ce problème :
selon que mon logiciel est sur excel 97 (version 8.0a) ou
excel 2000 (version 9)j'ai un problème avec une boite de
dialogue maison.. derrire laquelle je dois écrire et qui
ne doit pas disparaitre..
Mon code, avec bien du mal :
Vers = val(application.version)
#if Vers >8 then
instructions pour excel 2000
show.dialogue 0
'je ne peux pas écrire derrière la boite de dialogue'
#else
instructions pour excel 97
show.dialogue (ou dialogues.how...)
ça fonctionne bien
#end if
Ca ne fonctionne pas car pour 2000 c'est lu comme 9 < 8 !!!
et c'est la condition pour excel 97 qui s'exécute...
Je vois dans l'aide en ligne que Vers doit être une
constante !!!
déclarée #Const dans le haut du module, parie
déclaration...
Je ne puis écrire #Const vers=8 ou 9 avec la même constante
je ne sais pas comment faire...
De plus il se pourrait que ce mauvais code me cause de
gros problèmes avec les sauvegardes sur HDD ou
disquettes : on ne peut plus ouvrir le fichiers parfois,
je pense que ça vient de là...
Quel est le type (ou la typette) sympa(e) qui pourrait
m'aider ?
Merci d'avance
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Bonsoir Isabelle,
Il voulait juste tester la version d'Excel ;-)))
bonjour André,
voici un code donné ici par Frédéric
Bonsoir,
Avec votre aide, le code a été testé sur un nombre de versions de
Windows très
significatif, il devrait donc renvoyer un résultat correct dans tous les
cas.
Merci à tous.
(Code final sous ma signature)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
'================================ > > 'infos sur l'OS utilisé (version, type, etc.)
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 'fs
isabelle
Bonjour à tous
Je ne me sorts pas de ce problème :
selon que mon logiciel est sur excel 97 (version 8.0a) ou
excel 2000 (version 9)j'ai un problème avec une boite de
dialogue maison.. derrire laquelle je dois écrire et qui
ne doit pas disparaitre..
Mon code, avec bien du mal :
Vers = val(application.version)
#if Vers >8 then
instructions pour excel 2000
show.dialogue 0
'je ne peux pas écrire derrière la boite de dialogue'
#else
instructions pour excel 97
show.dialogue (ou dialogues.how...)
ça fonctionne bien
#end if
Ca ne fonctionne pas car pour 2000 c'est lu comme 9 < 8 !!!
et c'est la condition pour excel 97 qui s'exécute...
Je vois dans l'aide en ligne que Vers doit être une
constante !!!
déclarée #Const dans le haut du module, parie
déclaration...
Je ne puis écrire #Const vers=8 ou 9 avec la même constante
je ne sais pas comment faire...
De plus il se pourrait que ce mauvais code me cause de
gros problèmes avec les sauvegardes sur HDD ou
disquettes : on ne peut plus ouvrir le fichiers parfois,
je pense que ça vient de là...
Quel est le type (ou la typette) sympa(e) qui pourrait
m'aider ?
Merci d'avance
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Bonsoir Isabelle,
Il voulait juste tester la version d'Excel ;-)))bonjour André,
voici un code donné ici par Frédéric
Bonsoir,
Avec votre aide, le code a été testé sur un nombre de versions de
Windows très
significatif, il devrait donc renvoyer un résultat correct dans tous les
cas.
Merci à tous.
(Code final sous ma signature)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
'================================ > > 'infos sur l'OS utilisé (version, type, etc.)
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 'fs
isabelle
Bonjour à tous
Je ne me sorts pas de ce problème :
selon que mon logiciel est sur excel 97 (version 8.0a) ou
excel 2000 (version 9)j'ai un problème avec une boite de
dialogue maison.. derrire laquelle je dois écrire et qui
ne doit pas disparaitre..
Mon code, avec bien du mal :
Vers = val(application.version)
#if Vers >8 then
instructions pour excel 2000
show.dialogue 0
'je ne peux pas écrire derrière la boite de dialogue'
#else
instructions pour excel 97
show.dialogue (ou dialogues.how...)
ça fonctionne bien
#end if
Ca ne fonctionne pas car pour 2000 c'est lu comme 9 < 8 !!!
et c'est la condition pour excel 97 qui s'exécute...
Je vois dans l'aide en ligne que Vers doit être une
constante !!!
déclarée #Const dans le haut du module, parie
déclaration...
Je ne puis écrire #Const vers=8 ou 9 avec la même constante
je ne sais pas comment faire...
De plus il se pourrait que ce mauvais code me cause de
gros problèmes avec les sauvegardes sur HDD ou
disquettes : on ne peut plus ouvrir le fichiers parfois,
je pense que ça vient de là...
Quel est le type (ou la typette) sympa(e) qui pourrait
m'aider ?
Merci d'avance
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
:-( ok d'abord j'dis plus rien ;-)
isabelle
Bonsoir Isabelle,
Il voulait juste tester la version d'Excel ;-)))bonjour André,
voici un code donné ici par Frédéric
Bonsoir,
Avec votre aide, le code a été testé sur un nombre de versions de
Windows très
significatif, il devrait donc renvoyer un résultat correct dans tous les
cas.
Merci à tous.
(Code final sous ma signature)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
'================================ > > > 'infos sur l'OS utilisé (version, type, etc.)
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 'fs
isabelle
Bonjour à tous
Je ne me sorts pas de ce problème :
selon que mon logiciel est sur excel 97 (version 8.0a) ou
excel 2000 (version 9)j'ai un problème avec une boite de
dialogue maison.. derrire laquelle je dois écrire et qui
ne doit pas disparaitre..
Mon code, avec bien du mal :
Vers = val(application.version)
#if Vers >8 then
instructions pour excel 2000
show.dialogue 0
'je ne peux pas écrire derrière la boite de dialogue'
#else
instructions pour excel 97
show.dialogue (ou dialogues.how...)
ça fonctionne bien
#end if
Ca ne fonctionne pas car pour 2000 c'est lu comme 9 < 8 !!!
et c'est la condition pour excel 97 qui s'exécute...
Je vois dans l'aide en ligne que Vers doit être une
constante !!!
déclarée #Const dans le haut du module, parie
déclaration...
Je ne puis écrire #Const vers=8 ou 9 avec la même constante
je ne sais pas comment faire...
De plus il se pourrait que ce mauvais code me cause de
gros problèmes avec les sauvegardes sur HDD ou
disquettes : on ne peut plus ouvrir le fichiers parfois,
je pense que ça vient de là...
Quel est le type (ou la typette) sympa(e) qui pourrait
m'aider ?
Merci d'avance
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
:-( ok d'abord j'dis plus rien ;-)
isabelle
Bonsoir Isabelle,
Il voulait juste tester la version d'Excel ;-)))
bonjour André,
voici un code donné ici par Frédéric
Bonsoir,
Avec votre aide, le code a été testé sur un nombre de versions de
Windows très
significatif, il devrait donc renvoyer un résultat correct dans tous les
cas.
Merci à tous.
(Code final sous ma signature)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
'================================ > > > 'infos sur l'OS utilisé (version, type, etc.)
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 'fs
isabelle
Bonjour à tous
Je ne me sorts pas de ce problème :
selon que mon logiciel est sur excel 97 (version 8.0a) ou
excel 2000 (version 9)j'ai un problème avec une boite de
dialogue maison.. derrire laquelle je dois écrire et qui
ne doit pas disparaitre..
Mon code, avec bien du mal :
Vers = val(application.version)
#if Vers >8 then
instructions pour excel 2000
show.dialogue 0
'je ne peux pas écrire derrière la boite de dialogue'
#else
instructions pour excel 97
show.dialogue (ou dialogues.how...)
ça fonctionne bien
#end if
Ca ne fonctionne pas car pour 2000 c'est lu comme 9 < 8 !!!
et c'est la condition pour excel 97 qui s'exécute...
Je vois dans l'aide en ligne que Vers doit être une
constante !!!
déclarée #Const dans le haut du module, parie
déclaration...
Je ne puis écrire #Const vers=8 ou 9 avec la même constante
je ne sais pas comment faire...
De plus il se pourrait que ce mauvais code me cause de
gros problèmes avec les sauvegardes sur HDD ou
disquettes : on ne peut plus ouvrir le fichiers parfois,
je pense que ça vient de là...
Quel est le type (ou la typette) sympa(e) qui pourrait
m'aider ?
Merci d'avance
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
:-( ok d'abord j'dis plus rien ;-)
isabelle
Bonsoir Isabelle,
Il voulait juste tester la version d'Excel ;-)))bonjour André,
voici un code donné ici par Frédéric
Bonsoir,
Avec votre aide, le code a été testé sur un nombre de versions de
Windows très
significatif, il devrait donc renvoyer un résultat correct dans tous les
cas.
Merci à tous.
(Code final sous ma signature)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
'================================ > > > 'infos sur l'OS utilisé (version, type, etc.)
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 'fs
isabelle
Bonjour à tous
Je ne me sorts pas de ce problème :
selon que mon logiciel est sur excel 97 (version 8.0a) ou
excel 2000 (version 9)j'ai un problème avec une boite de
dialogue maison.. derrire laquelle je dois écrire et qui
ne doit pas disparaitre..
Mon code, avec bien du mal :
Vers = val(application.version)
#if Vers >8 then
instructions pour excel 2000
show.dialogue 0
'je ne peux pas écrire derrière la boite de dialogue'
#else
instructions pour excel 97
show.dialogue (ou dialogues.how...)
ça fonctionne bien
#end if
Ca ne fonctionne pas car pour 2000 c'est lu comme 9 < 8 !!!
et c'est la condition pour excel 97 qui s'exécute...
Je vois dans l'aide en ligne que Vers doit être une
constante !!!
déclarée #Const dans le haut du module, parie
déclaration...
Je ne puis écrire #Const vers=8 ou 9 avec la même constante
je ne sais pas comment faire...
De plus il se pourrait que ce mauvais code me cause de
gros problèmes avec les sauvegardes sur HDD ou
disquettes : on ne peut plus ouvrir le fichiers parfois,
je pense que ça vient de là...
Quel est le type (ou la typette) sympa(e) qui pourrait
m'aider ?
Merci d'avance
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Bonjour,Il utilise Val(), ce qui donne bien un résultat numérique :
J'ai vu ma connerie, mais trop tard .Mais Val() a beaucoup de misère
avec les systèmes où la virgule est sélectionnées comme séparateur
décimal (du moins en Windows).Vers (sa variable) n'est pas
utilisable comme "constante de compilation conditionnelle".
Effectivement.En utilisant un simple If Then Else, ... sans #, sa procédure marche
C'est probablement la voie la plus sure, elle demeure indépendante des
versions de VBA installées.
Bonjour,
Il utilise Val(), ce qui donne bien un résultat numérique :
J'ai vu ma connerie, mais trop tard .Mais Val() a beaucoup de misère
avec les systèmes où la virgule est sélectionnées comme séparateur
décimal (du moins en Windows).
Vers (sa variable) n'est pas
utilisable comme "constante de compilation conditionnelle".
Effectivement.
En utilisant un simple If Then Else, ... sans #, sa procédure marche
C'est probablement la voie la plus sure, elle demeure indépendante des
versions de VBA installées.
Bonjour,Il utilise Val(), ce qui donne bien un résultat numérique :
J'ai vu ma connerie, mais trop tard .Mais Val() a beaucoup de misère
avec les systèmes où la virgule est sélectionnées comme séparateur
décimal (du moins en Windows).Vers (sa variable) n'est pas
utilisable comme "constante de compilation conditionnelle".
Effectivement.En utilisant un simple If Then Else, ... sans #, sa procédure marche
C'est probablement la voie la plus sure, elle demeure indépendante des
versions de VBA installées.
Bonjour Michel Gaboly
Merci de ta réponse, je t'explique pourquoi j'ai besoin
d'une conditionnelle :
sous excel 97 on m'a donné du code qui permet d'avoir
cette boite non modale
je fais un filtre et le maintien avec la boite modale
pendant que l'opérateur écrit (complète les) dans les
lignes filtrées.
Quand il a fini, il clique sur le Ok de la boite qui
dfisparait et le filtre est oté par la fin de la macro...
Sur excel 2000 on ne peut pas, avec ce système écrire sur
la feuille, il faut show.boite 0 et le zéro n'est pas
accepté par la compilation sous excel 97.. d'ou mon
malheur....
Je puis peut-être m'en sortir en remplacant la boite dans
excel 2000 par un msgbox qui explique qu'il faudra oter le
filtre, c'est pas très élégant...
mais dans ce cas, tu as raison, un if simple suffit
merci
mais ce conditionnel, qui n'accepte qu'une constatnte,
comment lui passer la version en cours ... à moins de
savoir écrire dans une macro dès l'ouverture d'auto open
peut être ...
j'espère une réponse mais tu m'as donné un début de
solution... bien démoralisante toutefois...
salut cordial
andré-----Message d'origine-----
Bonsoir,
Pas besoin de compilation conditionnelle, ce que tu peux
vérifier ainsi :
Sub Test()
If Val(Application.Version) > 8 Then
MsgBox 1
' Ton code pour Excel 2000
Else
MsgBox 2
' Ton code pour Excel 97
End If
End Sub
Apparemment, tu veux pouvoir utiliser un Userform non
modal sous Excel 2000, ce qui n'existe pas sous 97.
Attention, cela ne marchera que sous Windows : sur Mac,
dans les versions 2001 (version 9) et X (version 10),
VBA repose toujours sur la version 5 de VB alors que
les UserForms non modaux nécessitent une version 6.
La variante suivante résoud le problème et fonctionne
également avec Excel Mac :
Sub Test2()
If Val(Application.VBE.Version) > 5 Then
MsgBox 1
' Ton code pour Excel 2000 et suivants
Else
MsgBox 2
' Ton code pour Excel 97 (ou sur Mac, Excel
98 et suivants)End If
End SubBonjour à tous
Je ne me sors pas de ce problème :
selon que mon logiciel est sur excel 97 (version 8.0a)
ouexcel 2000 (version 9)j'ai un problème avec une boite de
dialogue maison.. derrire laquelle je dois écrire et qui
ne doit pas disparaitre..
Mon code, avec bien du mal :
Vers = val(application.version)
#if Vers >8 then
instructions pour excel 2000
show.dialogue 0
'je ne peux pas écrire derrière la boite de dialogue'
#else
instructions pour excel 97
show.dialogue (ou dialogues.how...)
ça fonctionne bien
#end if
Ca ne fonctionne pas car pour 2000 c'est lu comme 9 <
8 !!!et c'est la condition pour excel 97 qui s'exécute...
Je vois dans l'aide en ligne que Vers doit être une
constante !!!
déclarée #Const dans le haut du module, parie
déclaration...
Je ne puis écrire #Const vers=8 ou 9 avec la même
constante
je ne sais pas comment faire...
De plus il se pourrait que ce mauvais code me cause de
gros problèmes avec les sauvegardes sur HDD ou
disquettes : on ne peut plus ouvrir le fichiers parfois,
je pense que ça vient de là...
Quel est le type (ou la typette) sympa(e) qui pourrait
m'aider ?
Merci d'avance
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
Bonjour Michel Gaboly
Merci de ta réponse, je t'explique pourquoi j'ai besoin
d'une conditionnelle :
sous excel 97 on m'a donné du code qui permet d'avoir
cette boite non modale
je fais un filtre et le maintien avec la boite modale
pendant que l'opérateur écrit (complète les) dans les
lignes filtrées.
Quand il a fini, il clique sur le Ok de la boite qui
dfisparait et le filtre est oté par la fin de la macro...
Sur excel 2000 on ne peut pas, avec ce système écrire sur
la feuille, il faut show.boite 0 et le zéro n'est pas
accepté par la compilation sous excel 97.. d'ou mon
malheur....
Je puis peut-être m'en sortir en remplacant la boite dans
excel 2000 par un msgbox qui explique qu'il faudra oter le
filtre, c'est pas très élégant...
mais dans ce cas, tu as raison, un if simple suffit
merci
mais ce conditionnel, qui n'accepte qu'une constatnte,
comment lui passer la version en cours ... à moins de
savoir écrire dans une macro dès l'ouverture d'auto open
peut être ...
j'espère une réponse mais tu m'as donné un début de
solution... bien démoralisante toutefois...
salut cordial
andré
-----Message d'origine-----
Bonsoir,
Pas besoin de compilation conditionnelle, ce que tu peux
vérifier ainsi :
Sub Test()
If Val(Application.Version) > 8 Then
MsgBox 1
' Ton code pour Excel 2000
Else
MsgBox 2
' Ton code pour Excel 97
End If
End Sub
Apparemment, tu veux pouvoir utiliser un Userform non
modal sous Excel 2000, ce qui n'existe pas sous 97.
Attention, cela ne marchera que sous Windows : sur Mac,
dans les versions 2001 (version 9) et X (version 10),
VBA repose toujours sur la version 5 de VB alors que
les UserForms non modaux nécessitent une version 6.
La variante suivante résoud le problème et fonctionne
également avec Excel Mac :
Sub Test2()
If Val(Application.VBE.Version) > 5 Then
MsgBox 1
' Ton code pour Excel 2000 et suivants
Else
MsgBox 2
' Ton code pour Excel 97 (ou sur Mac, Excel
98 et suivants)
End If
End Sub
Bonjour à tous
Je ne me sors pas de ce problème :
selon que mon logiciel est sur excel 97 (version 8.0a)
ou
excel 2000 (version 9)j'ai un problème avec une boite de
dialogue maison.. derrire laquelle je dois écrire et qui
ne doit pas disparaitre..
Mon code, avec bien du mal :
Vers = val(application.version)
#if Vers >8 then
instructions pour excel 2000
show.dialogue 0
'je ne peux pas écrire derrière la boite de dialogue'
#else
instructions pour excel 97
show.dialogue (ou dialogues.how...)
ça fonctionne bien
#end if
Ca ne fonctionne pas car pour 2000 c'est lu comme 9 <
8 !!!
et c'est la condition pour excel 97 qui s'exécute...
Je vois dans l'aide en ligne que Vers doit être une
constante !!!
déclarée #Const dans le haut du module, parie
déclaration...
Je ne puis écrire #Const vers=8 ou 9 avec la même
constante
je ne sais pas comment faire...
De plus il se pourrait que ce mauvais code me cause de
gros problèmes avec les sauvegardes sur HDD ou
disquettes : on ne peut plus ouvrir le fichiers parfois,
je pense que ça vient de là...
Quel est le type (ou la typette) sympa(e) qui pourrait
m'aider ?
Merci d'avance
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
Bonjour Michel Gaboly
Merci de ta réponse, je t'explique pourquoi j'ai besoin
d'une conditionnelle :
sous excel 97 on m'a donné du code qui permet d'avoir
cette boite non modale
je fais un filtre et le maintien avec la boite modale
pendant que l'opérateur écrit (complète les) dans les
lignes filtrées.
Quand il a fini, il clique sur le Ok de la boite qui
dfisparait et le filtre est oté par la fin de la macro...
Sur excel 2000 on ne peut pas, avec ce système écrire sur
la feuille, il faut show.boite 0 et le zéro n'est pas
accepté par la compilation sous excel 97.. d'ou mon
malheur....
Je puis peut-être m'en sortir en remplacant la boite dans
excel 2000 par un msgbox qui explique qu'il faudra oter le
filtre, c'est pas très élégant...
mais dans ce cas, tu as raison, un if simple suffit
merci
mais ce conditionnel, qui n'accepte qu'une constatnte,
comment lui passer la version en cours ... à moins de
savoir écrire dans une macro dès l'ouverture d'auto open
peut être ...
j'espère une réponse mais tu m'as donné un début de
solution... bien démoralisante toutefois...
salut cordial
andré-----Message d'origine-----
Bonsoir,
Pas besoin de compilation conditionnelle, ce que tu peux
vérifier ainsi :
Sub Test()
If Val(Application.Version) > 8 Then
MsgBox 1
' Ton code pour Excel 2000
Else
MsgBox 2
' Ton code pour Excel 97
End If
End Sub
Apparemment, tu veux pouvoir utiliser un Userform non
modal sous Excel 2000, ce qui n'existe pas sous 97.
Attention, cela ne marchera que sous Windows : sur Mac,
dans les versions 2001 (version 9) et X (version 10),
VBA repose toujours sur la version 5 de VB alors que
les UserForms non modaux nécessitent une version 6.
La variante suivante résoud le problème et fonctionne
également avec Excel Mac :
Sub Test2()
If Val(Application.VBE.Version) > 5 Then
MsgBox 1
' Ton code pour Excel 2000 et suivants
Else
MsgBox 2
' Ton code pour Excel 97 (ou sur Mac, Excel
98 et suivants)End If
End SubBonjour à tous
Je ne me sors pas de ce problème :
selon que mon logiciel est sur excel 97 (version 8.0a)
ouexcel 2000 (version 9)j'ai un problème avec une boite de
dialogue maison.. derrire laquelle je dois écrire et qui
ne doit pas disparaitre..
Mon code, avec bien du mal :
Vers = val(application.version)
#if Vers >8 then
instructions pour excel 2000
show.dialogue 0
'je ne peux pas écrire derrière la boite de dialogue'
#else
instructions pour excel 97
show.dialogue (ou dialogues.how...)
ça fonctionne bien
#end if
Ca ne fonctionne pas car pour 2000 c'est lu comme 9 <
8 !!!et c'est la condition pour excel 97 qui s'exécute...
Je vois dans l'aide en ligne que Vers doit être une
constante !!!
déclarée #Const dans le haut du module, parie
déclaration...
Je ne puis écrire #Const vers=8 ou 9 avec la même
constante
je ne sais pas comment faire...
De plus il se pourrait que ce mauvais code me cause de
gros problèmes avec les sauvegardes sur HDD ou
disquettes : on ne peut plus ouvrir le fichiers parfois,
je pense que ça vient de là...
Quel est le type (ou la typette) sympa(e) qui pourrait
m'aider ?
Merci d'avance
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
Re Clément,
Ta "connerie", les grands mots, tout de suite.
Tu as juste ét un peu trop rapide, cela arrive ;-))Bonjour,Il utilise Val(), ce qui donne bien un résultat numérique :
J'ai vu ma connerie, mais trop tard .Mais Val() a beaucoup de
misère
avec les systèmes où la virgule est sélectionnées comme séparateur
décimal (du moins en Windows).Vers (sa variable) n'est pas
utilisable comme "constante de compilation conditionnelle".
Effectivement.En utilisant un simple If Then Else, ... sans #, sa procédure
marche
C'est probablement la voie la plus sure, elle demeure indépendante
des
versions de VBA installées.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Re Clément,
Ta "connerie", les grands mots, tout de suite.
Tu as juste ét un peu trop rapide, cela arrive ;-))
Bonjour,
Il utilise Val(), ce qui donne bien un résultat numérique :
J'ai vu ma connerie, mais trop tard .Mais Val() a beaucoup de
misère
avec les systèmes où la virgule est sélectionnées comme séparateur
décimal (du moins en Windows).
Vers (sa variable) n'est pas
utilisable comme "constante de compilation conditionnelle".
Effectivement.
En utilisant un simple If Then Else, ... sans #, sa procédure
marche
C'est probablement la voie la plus sure, elle demeure indépendante
des
versions de VBA installées.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Re Clément,
Ta "connerie", les grands mots, tout de suite.
Tu as juste ét un peu trop rapide, cela arrive ;-))Bonjour,Il utilise Val(), ce qui donne bien un résultat numérique :
J'ai vu ma connerie, mais trop tard .Mais Val() a beaucoup de
misère
avec les systèmes où la virgule est sélectionnées comme séparateur
décimal (du moins en Windows).Vers (sa variable) n'est pas
utilisable comme "constante de compilation conditionnelle".
Effectivement.En utilisant un simple If Then Else, ... sans #, sa procédure
marche
C'est probablement la voie la plus sure, elle demeure indépendante
des
versions de VBA installées.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
-----Message d'origine-----
:-( ok d'abord j'dis plus rien ;-)
isabelle
Bonsoir Isabelle,
Il voulait juste tester la version d'Excel ;-)))bonjour André,
voici un code donné ici par Frédéric
Bonsoir,
Avec votre aide, le code a été testé sur un nombre de
versions de
Windows très
significatif, il devrait donc renvoyer un résultat
correct dans tous les
cas.
Merci à tous.
(Code final sous ma signature)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma
bal !
'======================== =========
'infos sur l'OS utilisé (version, type, etc.)
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 'fs
isabelle
Bonjour à tous
Je ne me sorts pas de ce problème :
selon que mon logiciel est sur excel 97 (version
8.0a) ou
excel 2000 (version 9)j'ai un problème avec une
boite de
dialogue maison.. derrire laquelle je dois écrire
et qui
ne doit pas disparaitre..
Mon code, avec bien du mal :
Vers = val(application.version)
#if Vers >8 then
instructions pour excel 2000
show.dialogue 0
'je ne peux pas écrire derrière la boite de
dialogue'
#else
instructions pour excel 97
show.dialogue (ou dialogues.how...)
ça fonctionne bien
#end if
Ca ne fonctionne pas car pour 2000 c'est lu comme 9
< 8 !!!
et c'est la condition pour excel 97 qui s'exécute...
Je vois dans l'aide en ligne que Vers doit être une
constante !!!
déclarée #Const dans le haut du module, parie
déclaration...
Je ne puis écrire #Const vers=8 ou 9 avec la même
constante
je ne sais pas comment faire...
De plus il se pourrait que ce mauvais code me cause
de
gros problèmes avec les sauvegardes sur HDD ou
disquettes : on ne peut plus ouvrir le fichiers
parfois,
je pense que ça vient de là...
Quel est le type (ou la typette) sympa(e) qui
pourrait
m'aider ?
Merci d'avance
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
-----Message d'origine-----
:-( ok d'abord j'dis plus rien ;-)
isabelle
Bonsoir Isabelle,
Il voulait juste tester la version d'Excel ;-)))
bonjour André,
voici un code donné ici par Frédéric
Bonsoir,
Avec votre aide, le code a été testé sur un nombre de
versions de
Windows très
significatif, il devrait donc renvoyer un résultat
correct dans tous les
cas.
Merci à tous.
(Code final sous ma signature)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma
bal !
'======================== =========
'infos sur l'OS utilisé (version, type, etc.)
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 'fs
isabelle
Bonjour à tous
Je ne me sorts pas de ce problème :
selon que mon logiciel est sur excel 97 (version
8.0a) ou
excel 2000 (version 9)j'ai un problème avec une
boite de
dialogue maison.. derrire laquelle je dois écrire
et qui
ne doit pas disparaitre..
Mon code, avec bien du mal :
Vers = val(application.version)
#if Vers >8 then
instructions pour excel 2000
show.dialogue 0
'je ne peux pas écrire derrière la boite de
dialogue'
#else
instructions pour excel 97
show.dialogue (ou dialogues.how...)
ça fonctionne bien
#end if
Ca ne fonctionne pas car pour 2000 c'est lu comme 9
< 8 !!!
et c'est la condition pour excel 97 qui s'exécute...
Je vois dans l'aide en ligne que Vers doit être une
constante !!!
déclarée #Const dans le haut du module, parie
déclaration...
Je ne puis écrire #Const vers=8 ou 9 avec la même
constante
je ne sais pas comment faire...
De plus il se pourrait que ce mauvais code me cause
de
gros problèmes avec les sauvegardes sur HDD ou
disquettes : on ne peut plus ouvrir le fichiers
parfois,
je pense que ça vient de là...
Quel est le type (ou la typette) sympa(e) qui
pourrait
m'aider ?
Merci d'avance
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
-----Message d'origine-----
:-( ok d'abord j'dis plus rien ;-)
isabelle
Bonsoir Isabelle,
Il voulait juste tester la version d'Excel ;-)))bonjour André,
voici un code donné ici par Frédéric
Bonsoir,
Avec votre aide, le code a été testé sur un nombre de
versions de
Windows très
significatif, il devrait donc renvoyer un résultat
correct dans tous les
cas.
Merci à tous.
(Code final sous ma signature)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma
bal !
'======================== =========
'infos sur l'OS utilisé (version, type, etc.)
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 'fs
isabelle
Bonjour à tous
Je ne me sorts pas de ce problème :
selon que mon logiciel est sur excel 97 (version
8.0a) ou
excel 2000 (version 9)j'ai un problème avec une
boite de
dialogue maison.. derrire laquelle je dois écrire
et qui
ne doit pas disparaitre..
Mon code, avec bien du mal :
Vers = val(application.version)
#if Vers >8 then
instructions pour excel 2000
show.dialogue 0
'je ne peux pas écrire derrière la boite de
dialogue'
#else
instructions pour excel 97
show.dialogue (ou dialogues.how...)
ça fonctionne bien
#end if
Ca ne fonctionne pas car pour 2000 c'est lu comme 9
< 8 !!!
et c'est la condition pour excel 97 qui s'exécute...
Je vois dans l'aide en ligne que Vers doit être une
constante !!!
déclarée #Const dans le haut du module, parie
déclaration...
Je ne puis écrire #Const vers=8 ou 9 avec la même
constante
je ne sais pas comment faire...
De plus il se pourrait que ce mauvais code me cause
de
gros problèmes avec les sauvegardes sur HDD ou
disquettes : on ne peut plus ouvrir le fichiers
parfois,
je pense que ça vient de là...
Quel est le type (ou la typette) sympa(e) qui
pourrait
m'aider ?
Merci d'avance
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
-----Message d'origine-----
Bonsoir,
Pas besoin de compilation conditionnelle, ce que tu peux
vérifier ainsi :
Sub Test()
If Val(Application.Version) > 8 Then
MsgBox 1
' Ton code pour Excel 2000
Else
MsgBox 2
' Ton code pour Excel 97
End If
End Sub
Apparemment, tu veux pouvoir utiliser un Userform non
modal sous Excel 2000, ce qui n'existe pas sous 97.
Attention, cela ne marchera que sous Windows : sur Mac,
dans les versions 2001 (version 9) et X (version 10),
VBA repose toujours sur la version 5 de VB alors que
les UserForms non modaux nécessitent une version 6.
La variante suivante résoud le problème et fonctionne
également avec Excel Mac :
Sub Test2()
If Val(Application.VBE.Version) > 5 Then
MsgBox 1
' Ton code pour Excel 2000 et suivants
Else
MsgBox 2
' Ton code pour Excel 97 (ou sur Mac, Excel
98 et suivants)
End If
End SubBonjour à tous
Je ne me sors pas de ce problème :
selon que mon logiciel est sur excel 97 (version 8.0a)
ou
excel 2000 (version 9)j'ai un problème avec une boite de
dialogue maison.. derrire laquelle je dois écrire et qui
ne doit pas disparaitre..
Mon code, avec bien du mal :
Vers = val(application.version)
#if Vers >8 then
instructions pour excel 2000
show.dialogue 0
'je ne peux pas écrire derrière la boite de dialogue'
#else
instructions pour excel 97
show.dialogue (ou dialogues.how...)
ça fonctionne bien
#end if
Ca ne fonctionne pas car pour 2000 c'est lu comme 9 <
8 !!!
et c'est la condition pour excel 97 qui s'exécute...
Je vois dans l'aide en ligne que Vers doit être une
constante !!!
déclarée #Const dans le haut du module, parie
déclaration...
Je ne puis écrire #Const vers=8 ou 9 avec la même
constante
je ne sais pas comment faire...
De plus il se pourrait que ce mauvais code me cause de
gros problèmes avec les sauvegardes sur HDD ou
disquettes : on ne peut plus ouvrir le fichiers parfois,
je pense que ça vient de là...
Quel est le type (ou la typette) sympa(e) qui pourrait
m'aider ?
Merci d'avance
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
-----Message d'origine-----
Bonsoir,
Pas besoin de compilation conditionnelle, ce que tu peux
vérifier ainsi :
Sub Test()
If Val(Application.Version) > 8 Then
MsgBox 1
' Ton code pour Excel 2000
Else
MsgBox 2
' Ton code pour Excel 97
End If
End Sub
Apparemment, tu veux pouvoir utiliser un Userform non
modal sous Excel 2000, ce qui n'existe pas sous 97.
Attention, cela ne marchera que sous Windows : sur Mac,
dans les versions 2001 (version 9) et X (version 10),
VBA repose toujours sur la version 5 de VB alors que
les UserForms non modaux nécessitent une version 6.
La variante suivante résoud le problème et fonctionne
également avec Excel Mac :
Sub Test2()
If Val(Application.VBE.Version) > 5 Then
MsgBox 1
' Ton code pour Excel 2000 et suivants
Else
MsgBox 2
' Ton code pour Excel 97 (ou sur Mac, Excel
98 et suivants)
End If
End Sub
Bonjour à tous
Je ne me sors pas de ce problème :
selon que mon logiciel est sur excel 97 (version 8.0a)
ou
excel 2000 (version 9)j'ai un problème avec une boite de
dialogue maison.. derrire laquelle je dois écrire et qui
ne doit pas disparaitre..
Mon code, avec bien du mal :
Vers = val(application.version)
#if Vers >8 then
instructions pour excel 2000
show.dialogue 0
'je ne peux pas écrire derrière la boite de dialogue'
#else
instructions pour excel 97
show.dialogue (ou dialogues.how...)
ça fonctionne bien
#end if
Ca ne fonctionne pas car pour 2000 c'est lu comme 9 <
8 !!!
et c'est la condition pour excel 97 qui s'exécute...
Je vois dans l'aide en ligne que Vers doit être une
constante !!!
déclarée #Const dans le haut du module, parie
déclaration...
Je ne puis écrire #Const vers=8 ou 9 avec la même
constante
je ne sais pas comment faire...
De plus il se pourrait que ce mauvais code me cause de
gros problèmes avec les sauvegardes sur HDD ou
disquettes : on ne peut plus ouvrir le fichiers parfois,
je pense que ça vient de là...
Quel est le type (ou la typette) sympa(e) qui pourrait
m'aider ?
Merci d'avance
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
-----Message d'origine-----
Bonsoir,
Pas besoin de compilation conditionnelle, ce que tu peux
vérifier ainsi :
Sub Test()
If Val(Application.Version) > 8 Then
MsgBox 1
' Ton code pour Excel 2000
Else
MsgBox 2
' Ton code pour Excel 97
End If
End Sub
Apparemment, tu veux pouvoir utiliser un Userform non
modal sous Excel 2000, ce qui n'existe pas sous 97.
Attention, cela ne marchera que sous Windows : sur Mac,
dans les versions 2001 (version 9) et X (version 10),
VBA repose toujours sur la version 5 de VB alors que
les UserForms non modaux nécessitent une version 6.
La variante suivante résoud le problème et fonctionne
également avec Excel Mac :
Sub Test2()
If Val(Application.VBE.Version) > 5 Then
MsgBox 1
' Ton code pour Excel 2000 et suivants
Else
MsgBox 2
' Ton code pour Excel 97 (ou sur Mac, Excel
98 et suivants)
End If
End SubBonjour à tous
Je ne me sors pas de ce problème :
selon que mon logiciel est sur excel 97 (version 8.0a)
ou
excel 2000 (version 9)j'ai un problème avec une boite de
dialogue maison.. derrire laquelle je dois écrire et qui
ne doit pas disparaitre..
Mon code, avec bien du mal :
Vers = val(application.version)
#if Vers >8 then
instructions pour excel 2000
show.dialogue 0
'je ne peux pas écrire derrière la boite de dialogue'
#else
instructions pour excel 97
show.dialogue (ou dialogues.how...)
ça fonctionne bien
#end if
Ca ne fonctionne pas car pour 2000 c'est lu comme 9 <
8 !!!
et c'est la condition pour excel 97 qui s'exécute...
Je vois dans l'aide en ligne que Vers doit être une
constante !!!
déclarée #Const dans le haut du module, parie
déclaration...
Je ne puis écrire #Const vers=8 ou 9 avec la même
constante
je ne sais pas comment faire...
De plus il se pourrait que ce mauvais code me cause de
gros problèmes avec les sauvegardes sur HDD ou
disquettes : on ne peut plus ouvrir le fichiers parfois,
je pense que ça vient de là...
Quel est le type (ou la typette) sympa(e) qui pourrait
m'aider ?
Merci d'avance
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
-----Message d'origine-----
Re,
Tu as besoin de traiter 2 cas distincts, avec une
condition,
pas nécessairement d'une compilation conditionnelle.
J'ai compris ton problème, je crois : tu ne peux écrire
une procédure du type
Sub Test1()
If Val(Application.Version) > 8 Then
UserForm1.Show 0
Else
' Ton code spécifique pour Excel 97
End If
End Sub
car si elle est exécutée sous Excel 97, tu as le message :
"Erreur de compilation :
Nombre d'arguments incorrect ou affectation de propriété
incorrecte"
C'est effectivement ce que j'ai sous Excel 98 (homologue
Mac d'Excel 97).
Cependant tout n'est pas perdu pour autant ;-)). Excel
98 accepte cette version :
Sub Test2()
If Val(Application.Version) > 8 Then
Traitement2000
Else
Traitement97
End If
End Sub
Sub Traitement97()
' Ton code spécifique pour Excel 97
End Sub
Sub Traitement2000()
UserForm1.Show 0
End Sub
En décomposant en 3 procédures, cela passe sans pro-
blème, car Test2 ne pose pas de problème de compil,
ni Traitement97 qui est appelé sous Excel 97.
Quant à Traitement2000, il n'est appelé que sous Excel
2000 ou + récent, et l'argument supplémentaire (le 0)
est alors accepté.
En remplaçant " > 8" par " > 7", c'est Traitement2000
qui est appelé sous Excel 98, et on retombe sur l'erreur
de compil.
Pas testé sous Excl 97, mais il y a de très fortes chan-
ces que ce soit pareil que sous Excel 98.
Dans ce cas, ton problème est résolu ;-))Bonjour Michel Gaboly
Merci de ta réponse, je t'explique pourquoi j'ai besoin
d'une conditionnelle :
sous excel 97 on m'a donné du code qui permet d'avoir
cette boite non modale
je fais un filtre et le maintien avec la boite modale
pendant que l'opérateur écrit (complète les) dans les
lignes filtrées.
Quand il a fini, il clique sur le Ok de la boite qui
dfisparait et le filtre est oté par la fin de la
macro...
Sur excel 2000 on ne peut pas, avec ce système écrire
sur
la feuille, il faut show.boite 0 et le zéro n'est pas
accepté par la compilation sous excel 97.. d'ou mon
malheur....
Je puis peut-être m'en sortir en remplacant la boite
dans
excel 2000 par un msgbox qui explique qu'il faudra oter
le
filtre, c'est pas très élégant...
mais dans ce cas, tu as raison, un if simple suffit
merci
mais ce conditionnel, qui n'accepte qu'une constatnte,
comment lui passer la version en cours ... à moins de
savoir écrire dans une macro dès l'ouverture d'auto open
peut être ...
j'espère une réponse mais tu m'as donné un début de
solution... bien démoralisante toutefois...
salut cordial
andré-----Message d'origine-----
Bonsoir,
Pas besoin de compilation conditionnelle, ce que tu
peux
vérifier ainsi :
Sub Test()
If Val(Application.Version) > 8 Then
MsgBox 1
' Ton code pour Excel 2000
Else
MsgBox 2
' Ton code pour Excel 97
End If
End Sub
Apparemment, tu veux pouvoir utiliser un Userform non
modal sous Excel 2000, ce qui n'existe pas sous 97.
Attention, cela ne marchera que sous Windows : sur Mac,
dans les versions 2001 (version 9) et X (version 10),
VBA repose toujours sur la version 5 de VB alors que
les UserForms non modaux nécessitent une version 6.
La variante suivante résoud le problème et fonctionne
également avec Excel Mac :
Sub Test2()
If Val(Application.VBE.Version) > 5 Then
MsgBox 1
' Ton code pour Excel 2000 et suivants
Else
MsgBox 2
' Ton code pour Excel 97 (ou sur Mac, Excel
98 et suivants)End If
End SubBonjour à tous
Je ne me sors pas de ce problème :
selon que mon logiciel est sur excel 97 (version
8.0a)
ouexcel 2000 (version 9)j'ai un problème avec une
boite de
dialogue maison.. derrire laquelle je dois écrire et
qui
ne doit pas disparaitre..
Mon code, avec bien du mal :
Vers = val(application.version)
#if Vers >8 then
instructions pour excel 2000
show.dialogue 0
'je ne peux pas écrire derrière la boite de dialogue'
#else
instructions pour excel 97
show.dialogue (ou dialogues.how...)
ça fonctionne bien
#end if
Ca ne fonctionne pas car pour 2000 c'est lu comme 9 <
8 !!!et c'est la condition pour excel 97 qui s'exécute...
Je vois dans l'aide en ligne que Vers doit être une
constante !!!
déclarée #Const dans le haut du module, parie
déclaration...
Je ne puis écrire #Const vers=8 ou 9 avec la même
constante
je ne sais pas comment faire...
De plus il se pourrait que ce mauvais code me cause
de
gros problèmes avec les sauvegardes sur HDD ou
disquettes : on ne peut plus ouvrir le fichiers
parfois,
je pense que ça vient de là...
Quel est le type (ou la typette) sympa(e) qui
pourrait
m'aider ?
Merci d'avance
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
-----Message d'origine-----
Re,
Tu as besoin de traiter 2 cas distincts, avec une
condition,
pas nécessairement d'une compilation conditionnelle.
J'ai compris ton problème, je crois : tu ne peux écrire
une procédure du type
Sub Test1()
If Val(Application.Version) > 8 Then
UserForm1.Show 0
Else
' Ton code spécifique pour Excel 97
End If
End Sub
car si elle est exécutée sous Excel 97, tu as le message :
"Erreur de compilation :
Nombre d'arguments incorrect ou affectation de propriété
incorrecte"
C'est effectivement ce que j'ai sous Excel 98 (homologue
Mac d'Excel 97).
Cependant tout n'est pas perdu pour autant ;-)). Excel
98 accepte cette version :
Sub Test2()
If Val(Application.Version) > 8 Then
Traitement2000
Else
Traitement97
End If
End Sub
Sub Traitement97()
' Ton code spécifique pour Excel 97
End Sub
Sub Traitement2000()
UserForm1.Show 0
End Sub
En décomposant en 3 procédures, cela passe sans pro-
blème, car Test2 ne pose pas de problème de compil,
ni Traitement97 qui est appelé sous Excel 97.
Quant à Traitement2000, il n'est appelé que sous Excel
2000 ou + récent, et l'argument supplémentaire (le 0)
est alors accepté.
En remplaçant " > 8" par " > 7", c'est Traitement2000
qui est appelé sous Excel 98, et on retombe sur l'erreur
de compil.
Pas testé sous Excl 97, mais il y a de très fortes chan-
ces que ce soit pareil que sous Excel 98.
Dans ce cas, ton problème est résolu ;-))
Bonjour Michel Gaboly
Merci de ta réponse, je t'explique pourquoi j'ai besoin
d'une conditionnelle :
sous excel 97 on m'a donné du code qui permet d'avoir
cette boite non modale
je fais un filtre et le maintien avec la boite modale
pendant que l'opérateur écrit (complète les) dans les
lignes filtrées.
Quand il a fini, il clique sur le Ok de la boite qui
dfisparait et le filtre est oté par la fin de la
macro...
Sur excel 2000 on ne peut pas, avec ce système écrire
sur
la feuille, il faut show.boite 0 et le zéro n'est pas
accepté par la compilation sous excel 97.. d'ou mon
malheur....
Je puis peut-être m'en sortir en remplacant la boite
dans
excel 2000 par un msgbox qui explique qu'il faudra oter
le
filtre, c'est pas très élégant...
mais dans ce cas, tu as raison, un if simple suffit
merci
mais ce conditionnel, qui n'accepte qu'une constatnte,
comment lui passer la version en cours ... à moins de
savoir écrire dans une macro dès l'ouverture d'auto open
peut être ...
j'espère une réponse mais tu m'as donné un début de
solution... bien démoralisante toutefois...
salut cordial
andré
-----Message d'origine-----
Bonsoir,
Pas besoin de compilation conditionnelle, ce que tu
peux
vérifier ainsi :
Sub Test()
If Val(Application.Version) > 8 Then
MsgBox 1
' Ton code pour Excel 2000
Else
MsgBox 2
' Ton code pour Excel 97
End If
End Sub
Apparemment, tu veux pouvoir utiliser un Userform non
modal sous Excel 2000, ce qui n'existe pas sous 97.
Attention, cela ne marchera que sous Windows : sur Mac,
dans les versions 2001 (version 9) et X (version 10),
VBA repose toujours sur la version 5 de VB alors que
les UserForms non modaux nécessitent une version 6.
La variante suivante résoud le problème et fonctionne
également avec Excel Mac :
Sub Test2()
If Val(Application.VBE.Version) > 5 Then
MsgBox 1
' Ton code pour Excel 2000 et suivants
Else
MsgBox 2
' Ton code pour Excel 97 (ou sur Mac, Excel
98 et suivants)
End If
End Sub
Bonjour à tous
Je ne me sors pas de ce problème :
selon que mon logiciel est sur excel 97 (version
8.0a)
ou
excel 2000 (version 9)j'ai un problème avec une
boite de
dialogue maison.. derrire laquelle je dois écrire et
qui
ne doit pas disparaitre..
Mon code, avec bien du mal :
Vers = val(application.version)
#if Vers >8 then
instructions pour excel 2000
show.dialogue 0
'je ne peux pas écrire derrière la boite de dialogue'
#else
instructions pour excel 97
show.dialogue (ou dialogues.how...)
ça fonctionne bien
#end if
Ca ne fonctionne pas car pour 2000 c'est lu comme 9 <
8 !!!
et c'est la condition pour excel 97 qui s'exécute...
Je vois dans l'aide en ligne que Vers doit être une
constante !!!
déclarée #Const dans le haut du module, parie
déclaration...
Je ne puis écrire #Const vers=8 ou 9 avec la même
constante
je ne sais pas comment faire...
De plus il se pourrait que ce mauvais code me cause
de
gros problèmes avec les sauvegardes sur HDD ou
disquettes : on ne peut plus ouvrir le fichiers
parfois,
je pense que ça vient de là...
Quel est le type (ou la typette) sympa(e) qui
pourrait
m'aider ?
Merci d'avance
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
-----Message d'origine-----
Re,
Tu as besoin de traiter 2 cas distincts, avec une
condition,
pas nécessairement d'une compilation conditionnelle.
J'ai compris ton problème, je crois : tu ne peux écrire
une procédure du type
Sub Test1()
If Val(Application.Version) > 8 Then
UserForm1.Show 0
Else
' Ton code spécifique pour Excel 97
End If
End Sub
car si elle est exécutée sous Excel 97, tu as le message :
"Erreur de compilation :
Nombre d'arguments incorrect ou affectation de propriété
incorrecte"
C'est effectivement ce que j'ai sous Excel 98 (homologue
Mac d'Excel 97).
Cependant tout n'est pas perdu pour autant ;-)). Excel
98 accepte cette version :
Sub Test2()
If Val(Application.Version) > 8 Then
Traitement2000
Else
Traitement97
End If
End Sub
Sub Traitement97()
' Ton code spécifique pour Excel 97
End Sub
Sub Traitement2000()
UserForm1.Show 0
End Sub
En décomposant en 3 procédures, cela passe sans pro-
blème, car Test2 ne pose pas de problème de compil,
ni Traitement97 qui est appelé sous Excel 97.
Quant à Traitement2000, il n'est appelé que sous Excel
2000 ou + récent, et l'argument supplémentaire (le 0)
est alors accepté.
En remplaçant " > 8" par " > 7", c'est Traitement2000
qui est appelé sous Excel 98, et on retombe sur l'erreur
de compil.
Pas testé sous Excl 97, mais il y a de très fortes chan-
ces que ce soit pareil que sous Excel 98.
Dans ce cas, ton problème est résolu ;-))Bonjour Michel Gaboly
Merci de ta réponse, je t'explique pourquoi j'ai besoin
d'une conditionnelle :
sous excel 97 on m'a donné du code qui permet d'avoir
cette boite non modale
je fais un filtre et le maintien avec la boite modale
pendant que l'opérateur écrit (complète les) dans les
lignes filtrées.
Quand il a fini, il clique sur le Ok de la boite qui
dfisparait et le filtre est oté par la fin de la
macro...
Sur excel 2000 on ne peut pas, avec ce système écrire
sur
la feuille, il faut show.boite 0 et le zéro n'est pas
accepté par la compilation sous excel 97.. d'ou mon
malheur....
Je puis peut-être m'en sortir en remplacant la boite
dans
excel 2000 par un msgbox qui explique qu'il faudra oter
le
filtre, c'est pas très élégant...
mais dans ce cas, tu as raison, un if simple suffit
merci
mais ce conditionnel, qui n'accepte qu'une constatnte,
comment lui passer la version en cours ... à moins de
savoir écrire dans une macro dès l'ouverture d'auto open
peut être ...
j'espère une réponse mais tu m'as donné un début de
solution... bien démoralisante toutefois...
salut cordial
andré-----Message d'origine-----
Bonsoir,
Pas besoin de compilation conditionnelle, ce que tu
peux
vérifier ainsi :
Sub Test()
If Val(Application.Version) > 8 Then
MsgBox 1
' Ton code pour Excel 2000
Else
MsgBox 2
' Ton code pour Excel 97
End If
End Sub
Apparemment, tu veux pouvoir utiliser un Userform non
modal sous Excel 2000, ce qui n'existe pas sous 97.
Attention, cela ne marchera que sous Windows : sur Mac,
dans les versions 2001 (version 9) et X (version 10),
VBA repose toujours sur la version 5 de VB alors que
les UserForms non modaux nécessitent une version 6.
La variante suivante résoud le problème et fonctionne
également avec Excel Mac :
Sub Test2()
If Val(Application.VBE.Version) > 5 Then
MsgBox 1
' Ton code pour Excel 2000 et suivants
Else
MsgBox 2
' Ton code pour Excel 97 (ou sur Mac, Excel
98 et suivants)End If
End SubBonjour à tous
Je ne me sors pas de ce problème :
selon que mon logiciel est sur excel 97 (version
8.0a)
ouexcel 2000 (version 9)j'ai un problème avec une
boite de
dialogue maison.. derrire laquelle je dois écrire et
qui
ne doit pas disparaitre..
Mon code, avec bien du mal :
Vers = val(application.version)
#if Vers >8 then
instructions pour excel 2000
show.dialogue 0
'je ne peux pas écrire derrière la boite de dialogue'
#else
instructions pour excel 97
show.dialogue (ou dialogues.how...)
ça fonctionne bien
#end if
Ca ne fonctionne pas car pour 2000 c'est lu comme 9 <
8 !!!et c'est la condition pour excel 97 qui s'exécute...
Je vois dans l'aide en ligne que Vers doit être une
constante !!!
déclarée #Const dans le haut du module, parie
déclaration...
Je ne puis écrire #Const vers=8 ou 9 avec la même
constante
je ne sais pas comment faire...
De plus il se pourrait que ce mauvais code me cause
de
gros problèmes avec les sauvegardes sur HDD ou
disquettes : on ne peut plus ouvrir le fichiers
parfois,
je pense que ça vient de là...
Quel est le type (ou la typette) sympa(e) qui
pourrait
m'aider ?
Merci d'avance
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
-----Message d'origine-----
Bonjour,Vers = val(application.version)
#if Vers >8 then
C'est parce que application.version retourne une chaîne
de caractères
et que ta comparaison ne porte donc pas sur des valeurs
numériques et
ne peut pas retourner true.
Essaie avec
#if vba6 then
show.dialogue 0
#else
show.dialogue
#end if
Avec Excel 2000 c'est, je pense, VBA 6, Excel 2002, c'est
VBA 6.3,
mais les deux passent comme VBA6
.
-----Message d'origine-----
Bonjour,
Vers = val(application.version)
#if Vers >8 then
C'est parce que application.version retourne une chaîne
de caractères
et que ta comparaison ne porte donc pas sur des valeurs
numériques et
ne peut pas retourner true.
Essaie avec
#if vba6 then
show.dialogue 0
#else
show.dialogue
#end if
Avec Excel 2000 c'est, je pense, VBA 6, Excel 2002, c'est
VBA 6.3,
mais les deux passent comme VBA6
.
-----Message d'origine-----
Bonjour,Vers = val(application.version)
#if Vers >8 then
C'est parce que application.version retourne une chaîne
de caractères
et que ta comparaison ne porte donc pas sur des valeurs
numériques et
ne peut pas retourner true.
Essaie avec
#if vba6 then
show.dialogue 0
#else
show.dialogue
#end if
Avec Excel 2000 c'est, je pense, VBA 6, Excel 2002, c'est
VBA 6.3,
mais les deux passent comme VBA6
.