OVH Cloud OVH Cloud

Pb avec Calendar.1

16 réponses
Avatar
j-pascal
Bonjour,

J'utilise un "calendar.1" dans un classeur et sur un autre PC ça ne
fonctionne pas ! Y-a-il un moyen de corriger le pb et surtout de le
résourdre "systématiquement" quelque soit le PC utilisé ?

Merci pour votre aide.

JP

6 réponses

1 2
Avatar
michdenis
! Je ne possède pas Access sur ma machine (maison)
| et pourtant j'ai le calendrier

Est-ce que tu veux dire que tu n'as jamais installé sur ta machine
Access et tu as quand même le contrôle "Calendar" ?

Désinstaller Access ou désinstaller une version d'office pour
en installer une autre, cela ne veut pas dire que dans chacun
de ces cas, le fichier "dll" a été éliminé lors de la désinstallation.
C'est ce pourquoi il est toujours disponible !

| Et puis, je ne vois pas pourquoi MS a réservé ce contrôle
| plutôt pratique à ACCESS en oubliant EXCEL !

Tu dois adresser ta question à Microsoft !
Avatar
j-pascal
Dans son message précédent, michdenis a écrit :
! Je ne possède pas Access sur ma machine (maison)
et pourtant j'ai le calendrier



Est-ce que tu veux dire que tu n'as jamais installé sur ta machine
Access et tu as quand même le contrôle "Calendar" ?

Désinstaller Access ou désinstaller une version d'office pour
en installer une autre, cela ne veut pas dire que dans chacun
de ces cas, le fichier "dll" a été éliminé lors de la désinstallation.
C'est ce pourquoi il est toujours disponible !

Et puis, je ne vois pas pourquoi MS a réservé ce contrôle
plutôt pratique à ACCESS en oubliant EXCEL !



Tu dois adresser ta question à Microsoft !



Bonsoir,

C'est parfait, merci ! J'ai seulement essayé :
Exécuter > regsvr32.exe c:WindowsSystem32MSCAL.OCX
et mon contrôle Calendrier était à présent bien accessible.
Problème réglé pour le dit PC ; mais si l'application est destinée à un
PC lambda, c'est la roulette !? (Je veux dire que si on réalise cette
manip à partir d'une macro pour activer le MSCAL.OCX, le contrôle ne
sera pas automatiquement associé au UF et l'utilisateur lambda ne
pourra donc pas avoir l'usage du calendrier pour son application !

Bon week-end

JP
Avatar
Misange
j-pascal a écrit :

Problème réglé pour le dit PC ; mais si l'application est destinée à un
PC lambda, c'est la roulette !? (Je veux dire que si on réalise cette
manip à partir d'une macro pour activer le MSCAL.OCX, le contrôle ne
sera pas automatiquement associé au UF et l'utilisateur lambda ne pourra
donc pas avoir l'usage du calendrier pour son application !



C'est le problème de ce genre de contrôle qui n'est pas présent par
défaut... perso j'évite.
Il y a des solutions alternatives heureusement.
Notamment celles-ci
http://www.excelabo.net/excel/compteclic.php?nom=mp-datepicker
http://www.excelabo.net/excel/compteclic.php?nom¬-calendarsansocx
ou encore
http://www.excelabo.net/excel/compteclic.php?nom=mp-generateurcalendrier

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net
Avatar
michdenis
Voici comment tu peux procéder si tu veux normaliser
l'ajout de la référence "Calendar" peu importe la version
d'excel ou de Windows.

A ) Tu zippes ton fichier avec un exemplaire de ton fichier
Calendar.

B ) lorsque l'usager ouvrira le fichier pour la première fois,
il doit s'assurer qu'il le fait à partir du répertoire où est
situé le fichier "Calendar". De mémoire, ce fichier existe
sous au moins 2 versions entre excel 97 et 2007.
- Mscal.ocx et Mscal.Dll.
La seule donnée que je n'ai pas, c'est à savoir si le nom
de la bibliothèque est demeuré le même. (Je t'ai dit comment
procéder pour l'obtenir lors d'un message précédent sur ce fil.)

C ) à l'ouverture du fichier, la procédure va vérifier si le fichier existe
sur l'ordi. si non elle va copier le fichier "Calendar" dans le bon
répertoire et initiera la dll ou ocx dans la base de registre tout
en ajoutant la référence pour faire en sorte que ton application
contenant ce contrôle fonctionne sans anicroche

P.S- ton contrôle "calendar" sera opérationnelle. Cependant, ce
contrôle n'apparaitrera pas dans la boîte à outils du formulaire.
Il n'existe aucune façon d'ajouter l'icône à la boîte d'outils en
VBA. Cependant, si ton application est déjà créée avec ce
contrôle, tout fonctionnera rondement même si on ne détecte
pas sa présence dans la boîte d'outils du formulaire.

Pour ce qui est du reste -> lire les instructions.

'-------------------
Private Sub Workbook_Open()
'à l'ouverture du classeur, lancement de
'la procédure d'installation du fichier

OuverturePremièrefois

End Sub
'-------------------

'Dans le haut d'un module Standard, Déclaration de l'api
Private Declare Function GetSystemDirectory Lib "kernel32.dll" Alias _
"GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As
Long

Const Ref As String = "Mscal.ocx"
'------------------------------
Sub OuverturePremièrefois()

Dim ChFile As String

'Vérifie si la présence du fichier dans le
'répertoire système du nouvel ordinateur
ChFile = CheminSystem & ""
If Dir(ChFile & Ref) = "" Then
'Vérifie la présence de la dll
'dans le répertoire source de ce fichier.
If Dir(ThisWorkbook.Path & "" & Ref) = "" Then
MsgBox "Le fichier à installer est absent." & _
" Placer ce fichier " & Ref & " dans le ce " & _
"répertoire : " & ThisWorkbook.Path
'Si fichier(dll) n'est pas dans le répertoire
'de ce classeur, fin de la procédure.
Exit Sub
End If
'si le fichier n'existe pas, copie du fichier
CopierUnFichier ChFile 'Procédure
InitialerBaseDeRegistre ChFile 'Procédure
End If
On Error Resume Next
ThisWorkbook.VBProject.References.AddFromFile ChFile
On Error Goto 0

End Sub
'------------------------------
Sub CopierUnFichier(Destination As String)

'copie du fichier dans le répertoire système
FileCopy ThisWorkbook.Path & "" & Ref, Destination

End Sub
'------------------------------
Sub InitialerBaseDeRegistre(CheminFichier As String)

'Initialise la base de régistre
Shell "command.com /c " & CheminFichier & Ref

End Sub
'------------------------------
Function CheminSystem()
Dim RetVal As Long
Dim SysDir As String

SysDir = Space$(256)
RetVal = GetSystemDirectory(SysDir, Len(SysDir))

If RetVal <> 0 Then
CheminSystem = Left$(SysDir, RetVal)
End If
End Function
'------------------------------
Avatar
j-pascal
Le 11/10/2008, Misange a supposé :


j-pascal a écrit :

Problème réglé pour le dit PC ; mais si l'application est destinée à un PC
lambda, c'est la roulette !? (Je veux dire que si on réalise cette manip à
partir d'une macro pour activer le MSCAL.OCX, le contrôle ne sera pas
automatiquement associé au UF et l'utilisateur lambda ne pourra donc pas
avoir l'usage du calendrier pour son application !



C'est le problème de ce genre de contrôle qui n'est pas présent par défaut...
perso j'évite.
Il y a des solutions alternatives heureusement.
Notamment celles-ci
http://www.excelabo.net/excel/compteclic.php?nom=mp-datepicker
http://www.excelabo.net/excel/compteclic.php?nom¬-calendarsansocx
ou encore
http://www.excelabo.net/excel/compteclic.php?nom=mp-generateurcalendrier

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net



Bonsoir,

Avec un peu de retard, merci !
Je retiens une solution parmi les trois proposées dans tes liens.
Dommage (encore une fois !) que ce contrôle calendar si "banal" ne
figure pas spontanément dans Excel ...

JP
Avatar
j-pascal
michdenis vient de nous annoncer :
Voici comment tu peux procéder si tu veux normaliser
l'ajout de la référence "Calendar" peu importe la version
d'excel ou de Windows.

A ) Tu zippes ton fichier avec un exemplaire de ton fichier
Calendar.

B ) lorsque l'usager ouvrira le fichier pour la première fois,
il doit s'assurer qu'il le fait à partir du répertoire où est
situé le fichier "Calendar". De mémoire, ce fichier existe
sous au moins 2 versions entre excel 97 et 2007.
- Mscal.ocx et Mscal.Dll.
La seule donnée que je n'ai pas, c'est à savoir si le nom
de la bibliothèque est demeuré le même. (Je t'ai dit comment
procéder pour l'obtenir lors d'un message précédent sur ce fil.)

C ) à l'ouverture du fichier, la procédure va vérifier si le fichier existe
sur l'ordi. si non elle va copier le fichier "Calendar" dans le bon
répertoire et initiera la dll ou ocx dans la base de registre tout
en ajoutant la référence pour faire en sorte que ton application
contenant ce contrôle fonctionne sans anicroche

P.S- ton contrôle "calendar" sera opérationnelle. Cependant, ce
contrôle n'apparaitrera pas dans la boîte à outils du formulaire.
Il n'existe aucune façon d'ajouter l'icône à la boîte d'outils en
VBA. Cependant, si ton application est déjà créée avec ce
contrôle, tout fonctionnera rondement même si on ne détecte
pas sa présence dans la boîte d'outils du formulaire.

Pour ce qui est du reste -> lire les instructions.

'-------------------
Private Sub Workbook_Open()
'à l'ouverture du classeur, lancement de
'la procédure d'installation du fichier

OuverturePremièrefois

End Sub
'-------------------

'Dans le haut d'un module Standard, Déclaration de l'api
Private Declare Function GetSystemDirectory Lib "kernel32.dll" Alias _
"GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As
Long

Const Ref As String = "Mscal.ocx"
'------------------------------
Sub OuverturePremièrefois()

Dim ChFile As String

'Vérifie si la présence du fichier dans le
'répertoire système du nouvel ordinateur
ChFile = CheminSystem & ""
If Dir(ChFile & Ref) = "" Then
'Vérifie la présence de la dll
'dans le répertoire source de ce fichier.
If Dir(ThisWorkbook.Path & "" & Ref) = "" Then
MsgBox "Le fichier à installer est absent." & _
" Placer ce fichier " & Ref & " dans le ce " & _
"répertoire : " & ThisWorkbook.Path
'Si fichier(dll) n'est pas dans le répertoire
'de ce classeur, fin de la procédure.
Exit Sub
End If
'si le fichier n'existe pas, copie du fichier
CopierUnFichier ChFile 'Procédure
InitialerBaseDeRegistre ChFile 'Procédure
End If
On Error Resume Next
ThisWorkbook.VBProject.References.AddFromFile ChFile
On Error Goto 0

End Sub
'------------------------------
Sub CopierUnFichier(Destination As String)

'copie du fichier dans le répertoire système
FileCopy ThisWorkbook.Path & "" & Ref, Destination

End Sub
'------------------------------
Sub InitialerBaseDeRegistre(CheminFichier As String)

'Initialise la base de régistre
Shell "command.com /c " & CheminFichier & Ref

End Sub
'------------------------------
Function CheminSystem()
Dim RetVal As Long
Dim SysDir As String

SysDir = Space$(256)
RetVal = GetSystemDirectory(SysDir, Len(SysDir))

If RetVal <> 0 Then
CheminSystem = Left$(SysDir, RetVal)
End If
End Function
'------------------------------



Bonsoir,

Merci pour cette réponse très détaillée et très ... technique pour le
petit amateur que je suis !
Je relis tout ceci à tête reposée ;-) et j'essaye !

JP
1 2