Microsoft 365 Excel sous Office365

JPPei

XLDnaute Nouveau
Bonjour à tous,
Au bureau, je viens de changer de machine et suis passé du monde Windows 7 à Windows 10. À cette occasion, mon employeur a migré toutes nos machines sur Office 365.
Je bute sur 2 problèmes et je ne trouve pas de réponse sur le Net. Probablement parce que je ne pose pas bien la question.
Dans un de mes tableaux Excel j’écris en tête « semaine du lundi xx yyyy au dimanche zz yyyy » que tout le monde a pris l’habitude de lire. J’utilise quelques fonctions d’Excel « "Semaine du " & TEXTE(K$2;"jjjj") & " " & JOUR(K$2) & " " &TEXTE(K$2;"mmmm") & " au " & TEXTE(EA2;"jjjj") & " " & JOUR(EA2) & " " &TEXTE(EA2;"mmmm") ».

Ce qui donnait « Semaine du lundi 2 mars au dimanche 8 mars ». Et bien, en changeant d’Excel, ça devient « Semaine du jjjj 2 march au jjjj 8 march ». Et ensuite tous les intitulés de jours sont en Anglais « Monday, Tuesday, etc. ». Bien entendu je suis allé dans le sous-menu « langue » des options. J’ai enlevé toute allusion à l’Anglais. Mais rien ne change.
Probablement existe-t-il une solution en corrigeant les formats des cellules concernées ou les formules (mettre « dddd » au lieu de « jjjj » corrige en partie => le « jjjj » devient « monday »). Mais ce sera long, peu sûr et fastidieux. Il existe sûrement un petit sous-menu ou une case à cocher qui règle le problème. Si l’un de vous sait, merci d'avance pour cette astuce.

L’autre anomalie est plus complexe. J’avais trouvé sur votre site (je crois) une solution pour insérer une image d’une partie d’un tableau Excel dans un Userform à travers des déclarations en début de module de la forme :
Public Declare Function GetTempFileNameA Lib "Kernel32" (ByVal lpszPath As String, ByVal lpPrefixString As String, ByVal wUnique As Long, ByVal lpTempFileName As String) As Long
Public Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function CloseClipboard Lib "user32" () As Long
Public Declare Function GetClipboardData Lib "user32" (ByVal uFormat As Long) As Long
Public Declare Function CopyEnhMetaFileA Lib "gdi32" (ByVal hemfSrc As Long, ByVal lpszFile As String) As Long
Public Declare Function DeleteEnhMetaFile Lib "gdi32" (ByVal hDC As Long) As Long

Puis, grâce à l’appel suivant :
GetTempFileNameA Environ("TMP"), "", 0, FicTmp
FicTmp = Left$(FicTmp, InStr(FicTmp, vbNullChar) - 1)
ongHebdo.Range(Cells(1, 1), Cells(24, 78)).CopyPicture
OpenClipboard 0
DeleteEnhMetaFile CopyEnhMetaFileA(GetClipboardData(14), FicTmp)
CloseClipboard
Image.Picture = LoadPicture(FicTmp)

une photo de la zone définie s’affiche dans la fenêtre image d’un Userform.

Le nouvel Excel ne tolère pas cette écriture de Function en début de module.
Le programme fonctionne si je passe en commentaire ces quelques lignes du début, sauf, bien entendu, l’appel de l’image.
C’est donc probablement le principe de déclaration en début de module qui n’est plus accepté dans la dernière version d’Excel. Quelqu’un en connaît-il la raison ?
D'avance merci pour votre aide de pros
 
Solution
évidement, tu as la même chose dans "Fichier" "option"
1588330921560.png

et ton windows est bien Français dans les parametres "Heure et langue" de win 10

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir @JPPei , @st007 , le Forum

Oui pour la question 1) je pense que st007 te montre la solution

Pour la question 2), Je n'ai pas Office 365; mais je ne suis pas surpris que des API comme celles-ci ne passent plus sur 365 :

Public Declare Function GetTempFileNameA Lib "Kernel32" (ByVal lpszPath As String, ByVal lpPrefixString As String, ByVal wUnique As Long, ByVal lpTempFileName As String) As Long
Public Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function CloseClipboard Lib "user32" () As Long
Public Declare Function GetClipboardData Lib "user32" (ByVal uFormat As Long) As Long
Public Declare Function CopyEnhMetaFileA Lib "gdi32" (ByVal hemfSrc As Long, ByVal lpszFile As String) As Long
Public Declare Function DeleteEnhMetaFile Lib "gdi32" (ByVal hDC As Long) As Long

Tu n'es plus avec un Excel 'on Premises', et je pense que tu ne peux plus faire des API pour "déranger" les Composants / Librairies (DLL) de Windows : Kernel32, User32 etc.. d'un serveur cloud, je ne suis pas certain, car pas d'expérience, mais ca me parait logique pour des raisons de sécurité.

De toute manière ces appels API sont à proscrire le plus possible pour assurer la pérénité d'un classeur et sa "portabilité" entres les versions, sans même parler de 365.

Si d'autres ont de l'expérence 365, je les invite à compléter cette discussion.

Bon courage
@+Thierry
 

JPPei

XLDnaute Nouveau
Bonsoir @JPPei , @st007 , le Forum

Oui pour la question 1) je pense que st007 te montre la solution

Pour la question 2), Je n'ai pas Office 365; mais je ne suis pas surpris que des API comme celles-ci ne passent plus sur 365 :



Tu n'es plus avec un Excel 'on Premises', et je pense que tu ne peux plus faire des API pour "déranger" les Composants / Librairies (DLL) de Windows : Kernel32, User32 etc.. d'un serveur cloud, je ne suis pas certain, car pas d'expérience, mais ca me parait logique pour des raisons de sécurité.

De toute manière ces appels API sont à proscrire le plus possible pour assurer la pérénité d'un classeur et sa "portabilité" entres les versions, sans même parler de 365.

Si d'autres ont de l'expérence 365, je les invite à compléter cette discussion.

Bon courage
@+Thierry
Bonjour Thierry,
Réponse complète et probablement de bon sens pour les pros que vous êtes.
Je vais donc proscrire ces appels API de mes prochains développements. Probablement dans le même ordre d'idée, j'ai perdu l'usage de la ProgressBar et du calendrier MonthView que j'ai du mal à conserver au fur et à mesure de la progression d'Excel et que j'arrivais à appeler en recopiant l'OCX ou la DLL qui correspondait.
J'ose une nouvelle question : savez-vous quelles solutions Excel propose comme alternatives à :
- les API évoquées ci-dessus permettant de reproduire le bouton "Appareil photo" que l'on peut ajouter dans le ruban mais qui ne révèle pas ses secrets lorsque l'on enregistre une macro en l'utilisant ?
- la ProgressBar qui était si facile à ajouter en bas d'UserForm ;
- le calendrier MonthView que l'on ajoutait également sur l'Userform.

D'avance merci.
Et portez-vous bien tous.
JPP
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @JPPei , @st007 , le Forum

Pour ta question 2, si on est bien d'accord de ce que tu veux :
J’avais trouvé sur votre site (je crois) une solution pour insérer une image d’une partie d’un tableau Excel dans un Userform

J'ai créé un petit exemple tout simple qui le fait sans le moindre appel API ... Ni OCX, ni DLL, juste l'Objet Chart... (cela génèrera un "ThePhotoOfTheRange.bmp" dans le même folder que le Classeur.)

PS Pour les ActiveX manquants, tout dépend lesquels ... Mais ceux dont tu parles dépendent de MSCOMCTL.ocx, et donc aucune idée si elle est disponible sur Office365... Normalement elle l'est là si il y a Access dans le package... Et en version 32bits d'Office bien entendu (pas 64)

Bien à toi, à vous
@+Thierry
 

Pièces jointes

  • XLD_JPPei_Take_Range_Picture_to_Load_in_USF.xlsm
    22 KB · Affichages: 8

Discussions similaires

Statistiques des forums

Discussions
312 191
Messages
2 086 052
Membres
103 109
dernier inscrit
boso_vs_viking