XL 2016 Macro ne fonctionne plus sur Excel 2016

pad01

XLDnaute Occasionnel
Bonjour le Forum,
J'ai récupéré sur le forum un fichier de kjin sur un QCM.
Sur Excel 2010, il fonctionne à merveille mais sur Excel 2016, les liaisons avec les userforms ne se font plus (les écritures n'apparaissent plus).
Pouvez-vous m'apporter de l'aider et m'expliquer ce dysfonctionnement car je crains rencontrer cette difficulté sur d'autre fichier.
Merci de votre aide
Bien à vous
 

Pièces jointes

  • QCM_Test.xls
    474 KB · Affichages: 14

pad01

XLDnaute Occasionnel
Bonjour Le Forum
Bonjour riton00, Bonjour Staple1600
Merci à tous ceux qui m'ont lu
Pour riton00, non je ne l'ai pas encore fait et je vais le faire. Merci de ton aide
Pour Staple1600, j'ai résolu mon problème car la couleur de fond du Userform est plus foncée sur la version 2016 que celle 2010. Donc l'écriture en noire n'est pas visible.
Par contre, j'ai un nouveau problème compatibilité avec la version 2019. J'ai effectivement un message d'erreur concernant le module 2 et plus particulièrement sur le 64 bits. Je te poste l'image d'erreur. Est-ce que cela te parles ?
Ce fichier est une aide pour un groupe de personnes qui vont passer un examen en fin d'année. C'est pour cela que je me retrouve avec plusieurs version d'excel...
Merci de ton aide
A+
 

Pièces jointes

  • Message d'erreur.jpg
    Message d'erreur.jpg
    116.4 KB · Affichages: 24

Roland_M

XLDnaute Barbatruc
Bonjour tout le monde !
EDIT: Salut à toi Staple !

essais comme ceci:
rem: ne t'inquiètes pas si tu as des lignes rouges par exemple avec 2007 ça fonctionne tout de même

Code:
#If VBA7 Then 'VBA7 depuis office 2010
    Dim handle As LongPtr '#####
    #If Win64 Then 'avec PtrSafe avec LongPtr
        Private Declare PtrSafe Function SetTimer Lib "User32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As LongPtr
        Private Declare PtrSafe Function KillTimer Lib "User32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As LongPtr
    #Else 'sans PtrSafe avec LongPtr
        Private Declare Function SetTimer Lib "User32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As LongPtr
        Private Declare Function KillTimer Lib "User32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As LongPtr
    #End If
#Else '< VBA7 donc 32 As Long
    Dim handle As Long '#####
    Private Declare Function SetTimer Lib "User32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
    Private Declare Function KillTimer Lib "User32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
#End If
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Il faut LongPtr si c'est une adresse. Pas de raison à priori si c'est autre chose.
Mais il peut y avoir des exceptions :
Private Declare PtrSafe Sub MoveMemory Lib "kernel32.dll" Alias "RtlMoveMemory" _
(ByRef Destination As Any, ByRef Source As Any, ByVal Length As LongPtr)
Length n'est pas une adresse, mais, s'il travaille sur système 64 bits il peut en théorie aussi être amené à déplacer une zone de mémoire dont la taille en octets peut dépasser la capacité d'adressage sur 32 bits.
 

Dranreb

XLDnaute Barbatruc
je ne vois pas l'utilité des api
application .ontime conviendrait très bien
Je ne sais pas dans ce cas, je n'ai pas étudié le contexte. Mais Application.OnTime ne permet qu'une planification à la seconde près, y compris 0 si on veut, ce qui peut être trop fréquent. Mais c'est mieux toléré par Excel si la procédure périodique invoque ses méthodes (danger de plantage sévère et silencieux avec un Timer Windows). Les Timer sont surtout utiles pour des actions périodiques purement VBA. J'ai d'ailleurs écrit du code pour pouvoir les utiliser dans un UserForm.
 

Discussions similaires

Statistiques des forums

Discussions
311 710
Messages
2 081 781
Membres
101 817
dernier inscrit
carvajal