Office 365 tester si valeur dans le presse-papier ou ClipBoard est numérique ou non

arthour973

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,

je bloque sur mon besoin malgré mes recherches et tentatives.

Ce que je fais :
1 - copier d'une valeur,
2 - j'ai besoin de tester si cette valeur est numérique ou non pendant qu'elle est dans le presse-papier ou ClipBoard
ou quand elle est collé dans la recherche find car je ne la colle pas dans une cellule.

par exemple pour dire : Is Not Numeric() Then Exit Sub
je ne suis pas certain que cela soit possible mais si solution il y a, ça m'arrangerait bien LOl :)

Un grand merci , comme d'habitude, à toutes et à tous pour votre aide toujours si précieuse.
S'il est nécessaire de faire une fichier test, dites-moi :)
Je vous souhaite une super WE,
Amicalement,
lionel,
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil, arthour973

arthour973
Ton moteur de recherche est en panne... :rolleyes:
VB:
Public Clipboard As New MSForms.DataObject
'NB/ Cocher référence : Ms Forms 2.0
Sub TestClipboard()
Dim DataObj As New MSForms.DataObject, vStr$
DataObj.GetFromClipboard
vStr = DataObj.GetText
MsgBox IsNumeric(vStr)
End Sub
Sub Test_A()
[A1] = 123
[A1].Copy
TestClipboard
Application.CutCopyMode = False
End Sub
Sub Test_B()
[A1] = "abcd"
[A1].Copy
TestClipboard
Application.CutCopyMode = False
End Sub
Testé sur XL2013
 

arthour973

XLDnaute Barbatruc
Supporter XLD
Re-Bonjour JM, le forum,

Je suis sous Office 365 avec excel 2016.
Impossible de trouver dans VBA Project la référence Ms Forms 2.0
pourtant, j'ai bien le fichier FM20.DLL dans le dossier Système 32.

Et j'ai le message suivant :
Sans titre.jpg

Peux-tu m'aider ?
:)
 

Staple1600

XLDnaute Barbatruc
Re

Donc à tester
(en ayant copié au préalable dans un module standard, le code présent dans le lien de mon précédent message)
VB:
Sub Test_AA()
[A1] = 123
[A1].Copy
MsgBox IsNumeric(GetClipboard)
End Sub

Sub Test_BB()
[A1] = "abc"
[A1].Copy
MsgBox IsNumeric(GetClipboard)
End Sub
NB: Si besoin utiliser PtrSafe pour les déclarations (en haut du module)
 

Staple1600

XLDnaute Barbatruc
Re

arthour973
?
Où est le compliqué ?
Il suffit de faire un copié/collé... :rolleyes:

NB: Tu es Barbatruc ou tu n'es pas Barbatruc !
 

Staple1600

XLDnaute Barbatruc
Re

Donc en gros, j'ai perdu mon temps ...

NB: Heureusement que d'autres liront ce fil et sauront faire un bête copier/coller dans un module standard. ;)
 

Staple1600

XLDnaute Barbatruc
Re

Donc pour ceux qui oseront faire CTRL+C puis CTRL+V
VB:
Option Explicit
Private Declare Function OpenClipboard Lib "user32.dll" (ByVal hWnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32.dll" () As Long
Private Declare Function CloseClipboard Lib "user32.dll" () As Long
Private Declare Function IsClipboardFormatAvailable Lib "user32.dll" (ByVal wFormat As Long) As Long
Private Declare Function GetClipboardData Lib "user32.dll" (ByVal wFormat As Long) As Long
Private Declare Function SetClipboardData Lib "user32.dll" (ByVal wFormat As Long, ByVal hMem As Long) As Long
Private Declare Function GlobalAlloc Lib "kernel32.dll" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib "kernel32.dll" (ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32.dll" (ByVal hMem As Long) As Long
Private Declare Function GlobalSize Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function lstrcpy Lib "kernel32.dll" Alias "lstrcpyW" (ByVal lpString1 As Long, ByVal lpString2 As Long) As Long

Public Sub SetClipboard(sUniText As String)
    Dim iStrPtr As Long
    Dim iLen As Long
    Dim iLock As Long
    Const GMEM_MOVEABLE As Long = &H2
    Const GMEM_ZEROINIT As Long = &H40
    Const CF_UNICODETEXT As Long = &HD
    OpenClipboard 0&
    EmptyClipboard
    iLen = LenB(sUniText) + 2&
    iStrPtr = GlobalAlloc(GMEM_MOVEABLE Or GMEM_ZEROINIT, iLen)
    iLock = GlobalLock(iStrPtr)
    lstrcpy iLock, StrPtr(sUniText)
    GlobalUnlock iStrPtr
    SetClipboardData CF_UNICODETEXT, iStrPtr
    CloseClipboard
End Sub

Public Function GetClipboard() As String
    Dim iStrPtr As Long
    Dim iLen As Long
    Dim iLock As Long
    Dim sUniText As String
    Const CF_UNICODETEXT As Long = 13&
    OpenClipboard 0&
    If IsClipboardFormatAvailable(CF_UNICODETEXT) Then
        iStrPtr = GetClipboardData(CF_UNICODETEXT)
        If iStrPtr Then
            iLock = GlobalLock(iStrPtr)
            iLen = GlobalSize(iStrPtr)
            sUniText = String$(iLen \ 2& - 1&, vbNullChar)
            lstrcpy StrPtr(sUniText), iLock
            GlobalUnlock iStrPtr
        End If
        GetClipboard = sUniText
    End If
    CloseClipboard
End Function
Sub Test_AA()
[A1] = 12345
[A1].Copy
MsgBox IsNumeric(GetClipboard)
End Sub

Sub Test_BB()
[A1] = "C'était vraiment compliqué LOL"
[A1].Copy
MsgBox IsNumeric(GetClipboard)
End Sub
 

Staple1600

XLDnaute Barbatruc
Bonjour mapomme ;)

J'ai pas fait grand chose
Ce sont surtout les touches de mon clavier CTRL C et V qui ont fait la plus grande part;)

Faut croire que le clavier d'arthour973 est dysfonctionnel ;)
 

arthour973

XLDnaute Barbatruc
Supporter XLD
Ha JM, toujours sur le vif :)

Bien sûr que NON : tu n'as pas perdu ton temps et tes conseils ou (Rappels LOL) sont toujours judicieux et utiles.
CTRL C et V ... j'en fait des milliers par jour et les yeux fermés :)
Mais je ne souhaitais pas inclure le code préconisé dans mon fichier déjà lourd.

Mais, après avoir fait CTRL C et V ... je l'ai gardé ... en cas de besoin.
Merci JM,
lionel :)
 

arthour973

XLDnaute Barbatruc
Supporter XLD
Bonjour mapomme,

Merci d'être là encore toi aussi.
Merci pour tes codes ... ça semble bien fonctionner et ... légers LOL.
Quand j'aurai terminé mes tests et le fichier finalisé je le mettrai ici et dans l'autre fil :

lionel :)
 

Staple1600

XLDnaute Barbatruc
Re

arthour973
Il ne s'agissait pas d'intégrer mais de tester la seconde proposition avec l'API
(puisque le code 1 ( avec Ms Forms 2.0) ne fonctionne pas sur ton PC)
Chose que tu n'as pas faite puisque pas de retour de ta part sur ce simple petit test...

(Et pourtant dans le message#14, tu as tout ce qu'il faut pour faire le test sur un fichier vierge... :rolleyes:)

PS: Un peu plus , un peu moins ,vu que tu adores les usines à gaz, ca n'aurait pas fait grand différence ;)
Et avec ta version d'Excel, tu es obligé de passer par l'API pour taquiner le clipboard ;)
 

Dranreb

XLDnaute Barbatruc
Bonjour.
En général l'insertion d'un nouvel UserForm (quitte à le supprimer ensuite si on n'en a pas besoin) suffit à charger la bibliothèque MSForms.
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas