Microsoft 365 Problème plantage

  • Initiateur de la discussion Initiateur de la discussion Sylvain
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Sylvain

XLDnaute Occasionnel
Bonsoir,
J'ai fait un outil pour faire des qrcodes avec de la transparence.
Je m'en sers chez moi sur deux machines windows 10 excel 2010/2013 sans problème.
Mais je l'ai téléchargé sur d'autres pc et il a planté Excel.
Vous pouvez le télécharger ici :
Pouvez-vous m'indiquer si ça fonctionne chez vous ou si ça plante et si vous voyez une raison dans ce cas.

Merci
 
Merci pour la réponse, je vais essayer de dissocier les macros et le fichier pour avancer.
Mais il n'y a pas de macro lancée à l'ouverture.
Hello Sylvain,
si ça plante en Excel 64 bits, c'est peut-être que tu utilises des API windows qui sont mal déclarés en 64 bits. Utilises-tu des API Windows dans ton code, sinon utilises-tu des Handles. Si tu utilises des API windows peux-tu nous mettre le code de leurs déclarations.
Ami calmant
 
Bonjour le fil

[opinion du matin en attendant que l'eau de la bouilloire frémisse]
Personnellement je ne teste pas un classeur Excel dont le code VBA n'est pas accessible.
D'autant plus qu'il existe un superbe outil dédié au QRCODE sur XLD, avec commentaire et code VBA accessible.
L'essence du partage à la sauce XLDienne, comme on disait jadis 🙂
[/opinion du matin en attendant que l'eau de la bouilloire frémisse]
 
Re

@Sylvain
Sur W10 64 bit + 365 64 bits, je ne dispose pas de olepro32.dll
Donc je suis bloqué et ne pas tester plus

En guise de "mea culpa" de ne pouvoir en faire plus , un petit bonus (pour les possesseurs de 365) 😉
Code:
Sub test_A()
XXX = "Excel Downloads .Com"
MsgBox URLencode(XXX)
End Sub
VB:
Sub test_B()
MsgBox Application.EncodeURL(XXX)
End Sub

Avec 365, on peut donc s'affranchir la fonction
Function URLencode( _
ByVal StringVal As String, _
Optional SpaceAsPlus As Boolean = False _
) As String

et simplement utiliser Application.EncodeURL

PS: j'ai du aussi ajouter PtrSafe aux autres API
 
Bonjour,

Merci pour vos réponses. J'ai essayé de faire sans olepro32.dll. Le plus proche que j'ai eu c'est ça, mais il y a un problème avec la hauteur du ruban. J'ai bien pensé mettre A1 avec un fond d'une couleur choisie et de boucler d'en haut jusqu'au pixel de cette couleur pour me faire un repère. Puis après positionner la forme pour qu'elle se mette en A1 et ainsi pouvoir la redécrire. Je ne suis pas sûr que ça intéresse assez de monde. De plus ça ne me garantit pas que c'est ça qui fait planter. Voici le code, si ça intéresse quelqu'un :
VB:
Option Explicit

#If VBA7 Then
    Private Declare PtrSafe Function GetDC Lib "user32" (ByVal hwnd As LongPtr) As LongPtr
    Private Declare PtrSafe Function GetPixel Lib "gdi32" (ByVal hdc As LongPtr, ByVal x As Long, ByVal y As Long) As Long
    Private Declare PtrSafe Function ReleaseDC Lib "user32" (ByVal hwnd As LongPtr, ByVal hdc As LongPtr) As Long
    Private Declare PtrSafe Function GetWindowRect Lib "user32" (ByVal hwnd As LongPtr, lpRect As rect) As Long
#Else
    Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
    Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
    Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As rect) As Long
#End If

Type rect
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Sub ObtenirCouleurPixelImage()
    Dim shp As Shape
    Dim hdc As LongPtr
    Dim couleur As Long
    Dim x As Long, y As Long
    Dim rect As rect
    Dim hwnd As LongPtr

    ' Obtenir le handle de la fenêtre Excel
    hwnd = Application.hwnd

    ' Obtenir les coordonnées de la fenêtre Excel
    GetWindowRect hwnd, rect

    ' Remplacez "NomDeLaForme" par le nom de votre forme
    Set shp = ActiveSheet.Shapes("NomDeLaForme")

    ' Coordonnées relatives du pixel à l'intérieur de la forme (par exemple, 10 pixels à droite et 20 pixels en bas du coin supérieur gauche)
    Dim xRelatif As Long, yRelatif As Long
    xRelatif = 10
    yRelatif = 20

    ' Convertir les coordonnées relatives en coordonnées absolues par rapport à la fenêtre Excel
    x = rect.Left + shp.Left + xRelatif
    y = rect.Top + shp.Top + yRelatif

    ' Obtenir le contexte de périphérique (Device Context)
    hdc = GetDC(0)

    ' Obtenir la couleur du pixel
    couleur = GetPixel(hdc, x, y)

    ' Libérer le contexte de périphérique
    ReleaseDC 0, hdc

    ' Afficher la couleur
    MsgBox "La couleur du pixel est : " & couleur
End Sub
 
Bonjour le fil

@Sylvain
Comme on ne pas peut accéder au code VBA du fichier initial (donc le lire) et par conséquent faire nos propres tests, je ne vois pas comment on peut apporter une aide plus aboutie.
Je comprends, mais cela exposerait comment je gère mes protections sur les autres classeurs, même si ça ne changerait pas grand chose. Je partais du principe que si quelque chose fonctionnait sous ma vieille version 2010, cela serait valable pour les plus récentes. Mais là, même si ça ne plantait pas, il est possible que des dlls manqueraient.
Merci encore.
Je peux vous faire un petit qr code pour une carte de visite ou autre.
drd.png
 
Re

@Sylvain
Comme évoqué précédemment, j'ai dans un besace un générateur de QR code fonctionnel
Et accessoirement, mon navigateur peut également me rendre ce service.

Rien ne t'empêche de poster ton code VBA avant que tu ne lui appliques ta protection (*) , non ?
(ou plutôt une version complète de ton classeur sans protection du VBA)

(*) : -> Les vieux et aguerris utilisateurs d'Excel auront vite fait de deviner de quel type de protection, il s'agit, de toute façon, non ?[/SPOILER]
 
Re

@Sylvain
J'ai ressorti un de mes classeurs dédies aux QR codes, du tiroir
Et j'ai obtenu ceci
Regarde la pièce jointe 1216150
Tu peux me dire si il est fonctionnel ?

PS:
Pour infos, 1 seul module, 9 lignes de code VBA, 7 si j'enlève les commentaires
Bonjour,

Je n'ai pas trouvé de programme de création de qr code en vba qui soit fonctionnel. Donc mon code comme celui que tu utilises doit faire appel à une api, peut-être une autre que celle que j'utilise pour cette partie du programme.

Ce qui est en plus dans ce que j'ai fait, c'est de pouvoir ajouter la transparence. http://sn1.chez-alice.fr/qrcodes/index.html
C'est pour cela que je dois transformer l'image du qr code en cellules noires ou blanches. Si j'avais eu un code VBA permettant de faire un qr code, j'aurai pu me passer de cette étape. Et donc de la déclaration de toutes les dll.
 
Bonjour le fil

@Sylvain
C'est que j'ai du mal à comprendre c'est la taille de ton classeur pour un générateur de QRCode
Je viens de tester un autre classeur (sans API) qui ne fait que 95ko.

Sans oublier Word 365, qui dispose du code de champ:
DISPLAYBARCODE

Mais pour revenir à ton problème, sans voir ton code VBA, on ne peut que supputer sur les causes d'erreurs
(et surtout on ne peut faire aucun test sur nos PC
 
Bonsoir,
Ce n'est pas la génération du qr code qui est spéciale. J'utilise une api :
VB:
Sub Insere_qr_code_qrserver(texte, Optional taille As Integer = 200, Optional feuille As String = "", Optional Destination = "", Optional TauxRedondance As Redondance = 1, Optional nom_image = "qr_code")
Dim emplacement As Range
If feuille = "" Then feuille = ActiveSheet.Name
Sheets(feuille).Select
If Destination = "" Then Destination = ActiveCell.Address
 Set emplacement = Range(Destination)
  On Error Resume Next
    'le logo a pour nom "nom_image" on efface l'ancien
    ActiveSheet.Shapes(nom_image).Delete
  On Error GoTo 0
  Dim url
  url = "http://api.qrserver.com/v1/create-qr-code/?ecc=" & Code_redondance(TauxRedondance) & "&size=" & taille & "x" & taille & "&data=" & URL_encode(texte)
  url = InputBox(url, , url)
  MsgBox "Nombre de caractères " & Len(url), , "Info"
  ActiveSheet.Pictures.Insert(url).Select

  With Selection.ShapeRange
    .Name = nom_image ' nommer l'image insérée (pour la supprimer plus facilement ensuite)
    .LockAspectRatio = msoFalse
    .Left = emplacement.Left
    .Top = emplacement.Top
  End With
End Sub

Function Code_redondance(ByVal taux As Redondance)
  Select Case taux
    Case 1
      Code_redondance = "L"
    Case 2
      Code_redondance = "M"
    Case 3
      Code_redondance = "Q"
    Case 4
      Code_redondance = "H"
    Case Else
      Code_redondance = "L"
  End Select
End Function
Je n'ai pas trouvé de code équivalant en vba.
Ce qui fait la taille du fichier ce sont des onglets avec les repères des qr codes pour différentes tailles.
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

J
  • Question Question
Réponses
2
Affichages
1 K
Jean Charles
J
C
Réponses
1
Affichages
1 K
T
C
Réponses
6
Affichages
1 K
C
Retour