XL 2016 Signature électronique : problème de collage InkPicture dans cellule fusionnée

TechnologyNewStore

XLDnaute Nouveau
Bonjour à tous,

Je suis en train de créer un fichier permettant la e-signature lors d'instructions mon entreprise.

Étant débutant en VBA, je me suis inspiré de différentes lignes de code que j'ai pu trouver sur ce forum.
Si vous détectez des approximations dans la manière de coder ou des simplifications à réaliser, je suis preneur bien entendu.

Le but est que chaque utilisateur puisse signer électroniquement une fiche d'instruction (le fichier Excel sera mis sur un drive).
L'utilisateur devra cliquer sur la cellule "Signature" associée à son nom pour signer en présentiel et "Rattrapage" lorsqu'il rattrapera l'instruction après absence (vacances, maladie...).
Je parviens à coller la signature "InkPicture" dans l'une des deux cellules mais étant donné que mes cellules sont fusionnées (respectivement C+D et E+F+G), le collage se fait uniquement dans la partie gauche de la cellule fusionnée.


Mon problème est donc le suivant :
Je souhaite que la signature soit collée au milieu de la cellule fusionnée.

De plus, lorsque l'utilisateur cochera la case rattrapage, la date du jour devra venir se positionner sur la partie gauche de la cellule {E+F+G} et la signature sur la partie droite.
Bizarrement, j'arrive pour le moment à afficher la date du jour mais elle est centrée (alors que la cellule est fusionnée) contrairement au collage de la signature.

Je vous met en PJ mon fichier.

Je vous remercie d'avance pour l'aide que vous pourrez m'apporter.

Cordialement.
 

Pièces jointes

  • e-signature.xlsm
    36.1 KB · Affichages: 34
Solution
Re,

voila ! je pense quand même que, si tout le monde a un compte individuel pour démarrer sa session informatique, il vaudrait mieux utiliser la solution du post #3.

Bien cordialement, @+
VB:
Private Sub Signer_Click()
Dim Signature, Cel_Ref As Range
'Obliger l'utilisateur à ajouter une signature
If InkPicture1.Ink.Strokes.Count = 0 Then
MsgBox "Merci d'ajouter une signature": Exit Sub
End If

'Obliger l'utilisateur à cocher la case de rattrapage
If CheckBox1.Value = Empty And CheckBox2.Value = Empty Then
MsgBox "Merci d'indiquer s'il s'agit d'un rattrapage": Exit Sub
End If

'Bloquer le rafraîchissement d’Excel pendant l’exécution du programme
Application.ScreenUpdating = False

'Insertion signature en colonne D sous format...

juvaxe

XLDnaute Occasionnel
Bonjour

Je ne viens pas te donner une réponse directement à ta question.

Je veux juste évoquer une question de sécurité. Ton système ne va-t-il pas mettre en "libre service" les signatures de tout le monde ? Quel est le risque encouru ?

Un copier coller à partir d'un classeur disponible sur un serveur est tellement facile.

Personnellement je pense qu'une signature électronique est possible dans le seul cas où elle va faire l'objet d'une impression d'un document papier.

Si c'est pour l'archiver sur un support électronique et durable il est préférable d l'éviter.

Cdt
 
Bonjour Tec(😓), juvaxe, le forum

@TechnologyNewStore , bienvenue sur Xld !
Entièrement d'accord avec @juvaxe . De plus, utiliser une image de signature n'assure en rien par soi même l'identification de la personne et n'a rien à voir avec ce qu'on appelle une signature électronique.
Avec le même fonctionnel, à la place d'une image de la signature, tu peux utiliser cette fonction, elle n'engage rien en terme de sécurité et tu peux sécuriser correctement l'identification de l'utilisateur ayant cliqué sur la cellule par Vba, et même utiliser une police type manuscrite pour la représentation de la signature si tu veux.
https://www.excel-downloads.com/threads/user_fullname.20056275/

Bien cordialement, @+
 
Dernière édition:

TechnologyNewStore

XLDnaute Nouveau
Bonjour juvaxe / Yeahou,

Merci pour ces réponses en terme d'authentification/sécurité/sensibilité.
Effectivement, ce n'est pas ce que l'on appelle "signature électronique" au sens sécurité des systèmes informatiques mais plutôt une traduction de ce qui est fait en version papier.
En effet, sur une feuille volante, les personnes apposent de façon manuscrite leur signature. Rien n'empêche un tiers d'imiter la signature pour faire un faux.
L'idée ici est de transcrire de manière informatisée ce qui est fait sur papier.

D'où mon fichier et ma demande sur mon premier post..
Je vais tout de même étudier ta proposition @Yeahou.

Je vous remercie d'avance,

Cordialement.
 

juvaxe

XLDnaute Occasionnel
Re-Bonjour

1 - Le risque de sécurité que j'ai évoqué ce matin n'est pas celui que tu évoques. J'ai voulu mettre en exergue le fait que quelqu'un de malveillant pourra très facilement - et ce, dans le temps - faire un copier coller d'une (ou plusieurs) signature "intéressante" pour pouvoir ensuite l'utiliser d'une manière frauduleuse aussi bien à l'intérieur qu'à l'extérieur de l'entreprise.

2- J'ai pris connaissance, et essayé, la solution de Yeahou, le problème que je vois est celui de l'utilisation d'un même ordinateur par plusieurs stagiaires pour remplir la feuille de présence.

Petite question : la population concernée est-elle homogène ? S'il s'agit d'une entreprise ? N'avez vous pas un badge ou possibilité de mettre en place une convocation (éventuellement électronique) avec un QR code que vous pourriez utiliser en fin de session ?

Cdt
 

TechnologyNewStore

XLDnaute Nouveau
Il s'agit d'une petite entreprise où la population est homogène.
Le réseau utilisé est de l'intranet et tous les utilisateurs n'ont pas accès au réseau internet donc difficile d'avoir recours à un QR code.
Le but est que la "signature électronique" se fasse sur le fichier Excel, sur le réseau local intranet.
 
Re,

voila ! je pense quand même que, si tout le monde a un compte individuel pour démarrer sa session informatique, il vaudrait mieux utiliser la solution du post #3.

Bien cordialement, @+
VB:
Private Sub Signer_Click()
Dim Signature, Cel_Ref As Range
'Obliger l'utilisateur à ajouter une signature
If InkPicture1.Ink.Strokes.Count = 0 Then
MsgBox "Merci d'ajouter une signature": Exit Sub
End If

'Obliger l'utilisateur à cocher la case de rattrapage
If CheckBox1.Value = Empty And CheckBox2.Value = Empty Then
MsgBox "Merci d'indiquer s'il s'agit d'un rattrapage": Exit Sub
End If

'Bloquer le rafraîchissement d’Excel pendant l’exécution du programme
Application.ScreenUpdating = False

'Insertion signature en colonne D sous format Bitmap
InkPicture1.Ink.ClipboardCopy , ICF_Bitmap
If CheckBox2.Value Then
Set Cel_Ref = Range("E" & ActiveCell.Row)
Else
Set Cel_Ref = Range("C" & ActiveCell.Row)
End If
Cel_Ref.PasteSpecial
Set Signature = Selection

'Redimensionner et centrer la signature dans la cellule active
 With Signature.ShapeRange
        .LockAspectRatio = msoFalse 'autorise la modification des proportions de la signature tracée
        .Height = 0.75 * Cel_Ref.Height 'fixe la hauteur de signature à 0.75*la hauteur de la cellule
        If Cel_Ref.Column = 3 Then
            .Width = 0.75 * Cel_Ref.MergeArea.Width 'fixe la largeur de signature à 0.75*la largeur de la cellule
            .Left = Cel_Ref.Left + ((Cel_Ref.MergeArea.Width / 2) - (.Width / 2)) 'centre la signature en latéralité dans la cellule
        Else
            Cel_Ref.HorizontalAlignment = xlLeft
            .Width = 0.75 * Cel_Ref.Offset(0, -1).MergeArea.Width 'fixe la largeur de signature à 0.75*la largeur de la cellule
            .Left = Cel_Ref.Left + (Cel_Ref.MergeArea.Width * 0.9) - .Width 'centre la signature en latéralité dans la cellule
        End If
        .Top = Cel_Ref.Top + (Cel_Ref.Height / 2) - (.Height / 2) 'centre la signature en hauteur dans la cellule
 End With
Cel_Ref.Select
'Activer le rafraîchissement d’Excel
Application.ScreenUpdating = True

Unload Me 'Quitter la fenêtre UserForm
End Sub
 
Dernière édition:

TechnologyNewStore

XLDnaute Nouveau
Bonjour Yeahou,

Merci beaucoup, c'est exactement ce que je voulais faire !

Cependant, je ne comprends pas le " = 3" dans
VB:
If Cel_Ref.Column = 3 Then

En effet, en mettant n'importe quelle valeur, cela ne change rien.

Est-ce que le "= 3" correspond aux trois colonnes E+F+G ?

Merci d'avance,

Cordialement.
 
Bonjour le fil, le forum
Cependant, je ne comprends pas le " = 3" dans

si le n° de la colonne de Cel_Ref est 3 ; donc : si la colonne de Cel_Ref est C.
C'est tout à fait cela, c'est pour lier cel_ref ( ou on va déposer l'image de la signature ) à la bonne colonne de la ligne de la cellule active, ceci pour que les calculs de taille et de positionnement se fassent correctement quelque soit la cellule active de départ ce qui n'était pas le cas dans le code de départ puisque celui ci était lié à la cellule active qui pouvait être n'importe ou.

Bien cordialement, @+
 

Discussions similaires

Réponses
5
Affichages
474

Statistiques des forums

Discussions
315 079
Messages
2 115 977
Membres
112 631
dernier inscrit
lapieuvre530