VB2
From Mesdoc
[edit] Comment contrôler les caractères qui peuvent être saisis dans un textbox ?
Une solution consiste à utiliser l'évènement KeyPress, qui a lieu lorsqu'une touche correspondant à un caractère est enfoncée. Les touches comme shift, alt, control et F1 à F12 ne sont pas concernées. La procédure de cet évènement a un argument, KeyAscii, qui est le code du caractère à afficher. Modifiez sa valeur pour afficher le caractère que vous voulez. Donnez-lui une valeur nulle si aucun caractère ne doit être affiché. La fonction chr() renvoie le caractère dont le code est passé en paramètre.
L'exemple suivant interdit tout caractère autre que les chiffres et la touche d'effacement :
Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii <> 8 Then If Not IsNumeric(Chr(KeyAscii)) Then KeyAscii = 0 End If End Sub
Une astuce souvent utilisée consiste à rechercher le caractère entré, dans une chaîne contenant tous les caractères autorisés. Si ce caractère n'est pas dans la chaîne, rien n'est affiché :
Private Sub Text1_KeyPress(KeyAscii As Integer) Dim allowedKeys As String allowedKeys = "0123456789-,." & Chr(8) If InStr(allowedKeys, Chr(KeyAscii)) = 0 Then KeyAscii = 0 End Sub
[edit] Comment récupérer une par une les lignes d'un textbox multilignes ?
Une première idée serait d'utiliser la fonction Split() avec vbCrLf comme séparateur. Mais une fin de ligne n'est pas forcément dûe à un retour chariot. Nous allons plutôt faire appel aux API Windows.
Copiez tout d'abord ces déclarations au début du module de la form :
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _(ByVal hwnd As Long, ByVal wMsg As Long, _ByVal wParam As Long, lParam As Any) As Long Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, _ByVal Length As Long) Private Const EM_GETLINECOUNT = &HBA Private Const EM_LINELENGTH = &HC1 Private Const EM_LINEINDEX = &HBB Private Const EM_GETLINE = &HC4
La procédure ci-dessous affiche une par une les lignes du textbox dont le handle est passé en paramètre :
Private Sub AfficheLignes(lngHandleTextBox As Long) Dim lngNbLignes As Long, i As Long Dim lngIndexCar As Long, intLongueurLigne As Integer Dim strLigne As String 'nombre de lignes lngNbLignes = SendMessage(lngHandleTextBox, EM_GETLINECOUNT, 0, 0) For i = 1 To lngNbLignes 'index du premier caractère de la ligne lngIndexCar = SendMessage(lngHandleTextBox, EM_LINEINDEX, i - 1, 0) 'longueur de la ligne intLongueurLigne = SendMessage(lngHandleTextBox, EM_LINELENGTH, lngIndexCar, 0) 'récupère la ligne dans la chaîne strLigne strLigne = Space(intLongueurLigne) CopyMemory ByVal strLigne, intLongueurLigne, Len(intLongueurLigne) SendMessage lngHandleTextBox, EM_GETLINE, i - 1, ByVal strLigne MsgBox strLigne Next End Sub
[edit] Comment créer un nouveau document Word ?
Vous devez ajouter la référence à Microsoft Word xx.x library à votre projet (Menu Projet >> Références...).
Private Sub CreateNewDocWord(sDoc As String) Dim objWord As Word.Application Dim docWord As Word.Document Dim Fichier As String Set objWord = CreateObject("Word.Application") '-- ouvrir une session Word Set docWord = objWord.Documents.Add '-- Ajouter un nouveau document à la collection objWord.Visible = True '-- montrer l'application Word docWord.SaveAs FileName:=sDoc Set docWord = Nothing '-- détruire l'objet Document Set objWord = Nothing '-- détruire l'objet Word End Sub
Exemple :
Private Sub Command1_Click() CreateNewDocWord "c:\\MonNouveauDocument.doc" End Sub
[edit] Comment imprimer un document Word ?
Vous devez ajouter la référence à Microsoft Word xx.x library à votre projet (Menu Projet >> Références...).
Private Sub PrintDocWord(sDoc As String) Dim objWord As Word.Application Dim docWord As Word.Document Dim Fichier As String Set objWord = CreateObject("Word.Application") '-- ouvrir une session Word objWord.Visible = False '-- masquer l'application Word Set docWord = objWord.Documents.Open(sDoc) '-- ouvrir le document Word docWord.PrintOut '-- imprimer le document docWord.Close '-- fermer le document Word objWord.Quit '-- fermer la session Word Set docWord = Nothing '-- détruire l'objet Document Set objWord = Nothing '-- détruire l'objet Word End Sub
Exemple :
Private Sub Command1_Click() CommonDialog1.Filter = "Fichiers Word (*.doc)|*.doc" CommonDialog1.ShowOpen PrintDocWord CommonDialog1.FileName End Sub
[edit] Comment connaître la version de Word installée ?
Vous devez ajouter la référence à Microsoft Word xx.x library à votre projet (Menu Projet >> Références...).
Private Function InfoWordVersion() As String Dim objWord As Word.Application Set objWord = CreateObject("Word.Application") '-- ouvrir une session Word InfoWordVersion = "Version: " & objWord.Version & vbCrLf & _"Build: " & objWord.Build & vbCrLf & "Product Code: " & objWord.ProductCode() objWord.Quit '-- fermer la session Word Set objWord = Nothing '-- détruire l'objet Word End Function Private Sub Form_Load() MsgBox InfoWordVersion End Sub
[edit] Comment savoir si le contenu d'un TextBox est un Integer ?
Private Function isInteger(Expression As Variant) As Boolean Dim D As Double If IsNumeric(Text1.Text) Then D = CDbl(Text1.Text) If D = Int(D) Then isInteger = True End If End Function
[edit] Comment contrôler les caractères qui peuvent être saisis dans un textbox ?
Une solution consiste à utiliser l'évènement KeyPress, qui a lieu lorsqu'une touche correspondant à un caractère est enfoncée. Les touches comme shift, alt, control et F1 à F12 ne sont pas concernées. La procédure de cet évènement a un argument, KeyAscii, qui est le code du caractère à afficher. Modifiez sa valeur pour afficher le caractère que vous voulez. Donnez-lui une valeur nulle si aucun caractère ne doit être affiché. La fonction chr() renvoie le caractère dont le code est passé en paramètre.
L'exemple suivant interdit tout caractère autre que les chiffres et la touche d'effacement :
Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii <> 8 Then If Not IsNumeric(Chr(KeyAscii)) Then KeyAscii = 0 End If End Sub
Une astuce souvent utilisée consiste à rechercher le caractère entré, dans une chaîne contenant tous les caractères autorisés. Si ce caractère n'est pas dans la chaîne, rien n'est affiché :
Private Sub Text1_KeyPress(KeyAscii As Integer) Dim allowedKeys As String allowedKeys = "0123456789-,." & Chr(8) If InStr(allowedKeys, Chr(KeyAscii)) = 0 Then KeyAscii = 0 End Sub
[edit] Comment récupérer une par une les lignes d'un textbox multilignes ?
Une première idée serait d'utiliser la fonction Split() avec vbCrLf comme séparateur. Mais une fin de ligne n'est pas forcément dûe à un retour chariot. Nous allons plutôt faire appel aux API Windows.
Copiez tout d'abord ces déclarations au début du module de la form :
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _(ByVal hwnd As Long, ByVal wMsg As Long, _ByVal wParam As Long, lParam As Any) As Long Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, _ByVal Length As Long) Private Const EM_GETLINECOUNT = &HBA Private Const EM_LINELENGTH = &HC1 Private Const EM_LINEINDEX = &HBB Private Const EM_GETLINE = &HC4
La procédure ci-dessous affiche une par une les lignes du textbox dont le handle est passé en paramètre :
Private Sub AfficheLignes(lngHandleTextBox As Long) Dim lngNbLignes As Long, i As Long Dim lngIndexCar As Long, intLongueurLigne As Integer Dim strLigne As String 'nombre de lignes lngNbLignes = SendMessage(lngHandleTextBox, EM_GETLINECOUNT, 0, 0) For i = 1 To lngNbLignes 'index du premier caractère de la ligne lngIndexCar = SendMessage(lngHandleTextBox, EM_LINEINDEX, i - 1, 0) 'longueur de la ligne intLongueurLigne = SendMessage(lngHandleTextBox, EM_LINELENGTH, lngIndexCar, 0) 'récupère la ligne dans la chaîne strLigne strLigne = Space(intLongueurLigne) CopyMemory ByVal strLigne, intLongueurLigne, Len(intLongueurLigne) SendMessage lngHandleTextBox, EM_GETLINE, i - 1, ByVal strLigne MsgBox strLigne Next End Sub
[edit] Comment faire du Drag and Drop ?
Le DragDrop doit être vu comme un artifice visuel. Pour schématiser, rien n'est déplacé lors d'une opération DragDrop. C'est votre code qui va générer le "déplacement". Cette opération existe sous deux formes :
* La forme standard pour les opérations de déplacement au sein d'un process * La forme OLE, qui rend possible les déplacements inter process.
La forme standard est assez simple d'utilisation. On active l'opération dans l'événement MouseMove du contrôle source, on gère les icônes dans l'(es) événement(s) DragOver des contrôles de la feuille, et enfin on effectue le déplacement dans l'événement DragDrop du contrôle cible. L'exemple suivant permet d'échanger des éléments entre deux contrôles Listbox.
Private Sub Form_DragOver(Source As Control, X As Single, Y As Single, State As Integer) If Source Is List1 Then Source.DragIcon = _LoadPicture(" C:\\Program Files\\Microsoft Visual Studio\\Common\\Graphics\\Icons\\Misc\\misc06.ico") End If End Sub Private Sub List1_DragOver(Source As Control, X As Single, Y As Single, State As Integer) If (Source Is List1) Or (Source Is List2) Then Source.DragIcon = _LoadPicture(" C:\\Program Files\\Microsoft Visual Studio\\Common\\Graphics\\Icons\\Dragdrop\\drop1pg.ico") End If End Sub Private Sub List2_DragOver(Source As Control, X As Single, Y As Single, State As Integer) If (Source Is List1) Or (Source Is List2) Then Source.DragIcon = _LoadPicture(" C:\\Program Files\\Microsoft Visual Studio\\Common\\Graphics\\Icons\\Dragdrop\\drop1pg.ico") End If End Sub Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) List1.Drag vbBeginDrag End Sub Private Sub List2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) List2.Drag vbBeginDrag End Sub Private Sub List1_DragDrop(Source As Control, X As Single, Y As Single) If Source Is List2 Then List1.AddItem List2.List(List2.ListIndex) List2.RemoveItem List2.ListIndex End If End Sub Private Sub List2_DragDrop(Source As Control, X As Single, Y As Single) If Source Is List1 Then List2.AddItem List1.List(List1.ListIndex) List1.RemoveItem List1.ListIndex End If End Sub
Sous sa forme OLE, le drag and drop peut être beaucoup plus complexe. Bien qu'identique dans la forme de programmation, les données peuvent être transmises entre les applications. Dans l'exemple suivant, vous pouvez déplacer un fichier graphique en partant de l'explorateur vers votre PictureBox.
Private Sub Form_Load() 'autorise les opérations manuelles de dépose Picture1.OLEDropMode = vbOLEDropManual End Sub Private Sub Picture1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, _Shift As Integer, X As Single, Y As Single) Dim NomFichier As String 'vérifie le format de l'objet Data Transmis If Data.GetFormat(vbCFFiles) = True Then ' vbCFFiles correspond à une liste de fichier, donc récupération du premier élément NomFichier = Data.Files(1) On Error GoTo invalidPicture Picture1.Picture = LoadPicture(NomFichier) End If Exit Sub invalidPicture: MsgBox "Format de fichier incorrect", vbCritical + vbOKOnly End Sub Private Sub Picture1_OLEDragOver(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, _X As Single, Y As Single, State As Integer) 'vérifie le format de l'objet Data Transmis pour valoriser le paramètre Effect If Data.GetFormat(vbCFFiles) Then Effect = vbDropEffectCopy And Effect Else Effect = vbDropEffectNone End If End Sub
[edit] Comment lire / écrire dans un fichier .ini ?
Les fichiers .ini sont des fichiers texte utilisés pour enregistrer les options d'un programme. Ils sont composés de sections, qui contiennent des clés auxquelles on peut donner une valeur. Par exemple :
[Affichage] State=Maximized Left=50 Top=80 [Sauvegarde] Confirm=True Auto=False
Pour pouvoir respectivement lire et écrire dans un fichier .ini, voici les décarations que vous devez ajouter dans votre module :
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" _(ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, _ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" _(ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, _ByVal lpFileName As String) As Long
Voici ci-dessous la fonction qui écrira une valeur pour la clé et dans la section indiquée. Notez que vous n'avez pas besoin de créer le fichier s'il n'existe pas, car la fonction WritePrivateProfileString le fait pour vous.
Private Function EcritDansFichierIni(Section As String, Cle As String, _Valeur As String, Fichier As String) As Long EcritDansFichierIni = WritePrivateProfileString(Section, Cle, Valeur, Fichier) End Function
Et voyons maintenant la fonction qui nous retournera la valeur d'une clé dans une section donnée. ValeurParDefaut contient la valeur qui devra nous être retournée si le fichier n'existe pas, ou si aucune valeur n'a été spécifiée pour la clé demandée :
Private Function LitDansFichierIni(Section As String, Cle As String, Fichier As String, Optional ValeurParDefaut As String = "") As String Dim strReturn As String strReturn = String(255, 0) GetPrivateProfileString Section, Cle, ValeurParDefaut, strReturn, Len(strReturn), Fichier LitDansFichierIni = Left(strReturn, InStr(strReturn, Chr(0)) - 1) End Function
Le code nécessaire pour écrire la section [Affichage] du fichier donné en exemple sera :
EcritDansFichierIni "Affichage", "State", "Maximized", "c:\\config.ini" EcritDansFichierIni "Affichage", "Left", "50", "c:\\config.ini" EcritDansFichierIni "Affichage", "Top", "80", "c:\\config.ini"
Et nous pourrons lire la valeur donnée à la clef "Left" avec :
LeftParam = LitDansFichierIni("Affichage", "Left", "c:\\config.ini", 100)
[edit] Comment lister toutes les sections d'un fichier .ini ?
Déclaration :
Private Declare Function GetPrivateProfileSectionNames Lib "kernel32.dll" Alias "GetPrivateProfileSectionNamesA" _(ByVal lpszReturnBuffer As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Paramètre lpszReturnBuffer : adresse d'un tampon qui va recevoir la ou les sections du fichier .ini. Chaque nom de section est terminé par un caractère null (Chr(0)=vbNullChar), le dernier est suivi d'un second caratère null.
Private Function ListeSectionIni(ByVal Path As String, Section() As String) Dim strReturn As String strReturn = String(8192, 0) GetPrivateProfileSectionNames strReturn, Len(strReturn), Path Section = Split(Left(strReturn, InStr(1, strReturn, vbNullChar & vbNullChar) - 1), vbNullChar) End Function Private Sub Command1_Click() Dim Section() As String ListeSectionIni "C:\\test.ini", Section '-- Paramètre Section passé ByRef For Index = LBound(Section) To UBound(Section)
Debug.Print Section(Index)
Next End Sub
[edit] Comment lister toutes les clés et valeurs d'une section d'un fichier .ini ?
Déclaration :
Private Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" _ (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Paramètre lpReturnedString : adresse d'un tampon qui va recevoir la ou les clés et valeurs de la section du fichier .ini. Chaque clé est terminée par un caractère null (Chr(0)=vbNullChar), la dernière est suivi d'un second caratère null.
Public Function ListeSectionKey(ByVal Path As String, ByVal Section As String, Key() As String) Dim strReturn As String strReturn = String(8192, 0) GetPrivateProfileSection Section, strReturn, 8192, Path Key = Split(Left(strReturn, InStr(1, strReturn, vbNullChar & vbNullChar) - 1), vbNullChar) End Function Private Sub Command1_Click() Dim Key() As String ListeSectionKey "C:\\test.ini", "SectionName1", Key '-- le paramètre Key est passé byRef For Index = LBound(Key) To UBound(Key)
Debug.Print Key(Index)
Next End Sub
[edit] Comment ouvrir un fichier HTML, Word ou autre en utilisant l'exécutable associé ?
Placez cette déclaration dans le module d'une form :
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _ (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _ ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
La ligne suivante affiche le site Developpez.com dans le navigateur par défaut, en fournissant le répertoire de votre application comme répertoire par défaut :
ShellExecute Me.hwnd, "open", "http://www.developpez.com", "", App.Path, 1
[edit] Comment obtenir ou modifier le contenu du Presse-papiers ?
Vous pouvez accéder au presse-papiers via l'objet Clipboard.
[edit] Comment savoir si un fichier existe ?
If Dir("c:\\temp\\Erreurs.tmp", vbHidden) <> "" Then 'le fichier existe (vbHidden permet de le retrouver même s'il est caché) End If
[edit] Comment copier un fichier ?
'Copie le fichier "c:\\temp\\Erreurs.tmp" en "c:\\temp\\Erreurs.bak" FileCopy "c:\\temp\\Erreurs.tmp", "c:\\temp\\Erreurs.bak"
[edit] Comment copier un fichier actuellement ouvert par une application?
La méthode habituellement utilisée pour copier un fichier, FileCopy, échoue si le fichier en cours est actuellement ouvert (violation de partage). Pour contourner ce probleme, il faut faire appel à une API du kernel nommée CopyFile. Dans l'exemple ci-dessous, cette méthode est utilisée pour sauvegarder une base Access alors même que celle-ci est ouverte.
Private Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" _ (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, _ ByVal bFailIfExists As Long) As Long 'bFailIfExists doit etre à false pour permettre 'l'overwriting Private Sub Form_Load() Dim Nouvfich As String CommonDialog1.Filter = "Base de données (*.mdb)|*.mdb" On Error GoTo erreur CommonDialog1.ShowSave Nouvfich = CommonDialog1.FileName CopyFile App.Path & "\\tests.mdb", Nouvfich, False erreur: If Err = 32755 Then Exit Sub End If End Sub
[edit] Comment renommer un fichier ou un répertoire ?
'Renomme "c:\\temp\\Erreurs.tmp" en "c:\\temp\\Erreurs.bak" Name "c:\\temp\\Erreurs.tmp" As "c:\\temp\\Erreurs.bak" 'Renomme le répertoire "c:\\temp" en "c:\\var" Name "c:\\temp" As "c:\\var"
[edit] Comment détruire un fichier ?
Kill "c:\\Erreurs.tmp"
Le fichier doit exister sinon une erreur d'exécution a lieu.
[edit] Comment récupérer le nom d'un fichier à partir d'un chemin complet ?
Cette fonction reçoit le chemin complet d'un fichier en paramètre et renvoie le nom du fichier :
Public Function ExtractFileName(ByVal sFullPath As String) As String If InStr(sFullPath, "\\") = 0 Or Right(sFullPath, 1) = "\\" Then ExtractFileName = "" Exit Function End If ExtractFileName = Mid(sFullPath, InStrRev(sFullPath, "\\") + 1) End Function
[edit] Comment récupérer l'extension d'un fichier à partir d'un chemin complet ?
Cette fonction reçoit le chemin complet d'un fichier en paramètre et renvoie l'extension du fichier, si elle existe, sinon renvoie une chaine vide : (Nécessite la fonction faq ExtractFileName)
Public Function ExtractFileExt(ByVal sFullPath As String) As String Dim sName As String sName = ExtractFileName(sFullPath) If InStr(sName, ".") = 0 Then
ExtractFileExt = ""
Else
ExtractFileExt = Mid(sName, InStrRev(sName, ".") + 1)
End If End Function
[edit] Comment envoyer un e-mail ?
Cochez Microsoft MAPI Controls 6.0 dans la liste des composants. Inserez un contrôle MAPISession et un contrôle MAPIMessages à votre projet
MAPISession1.SignOn MAPIMessages1.MsgIndex = -1 MAPIMessages1.SessionID = MAPISession1.SessionID MAPIMessages1.RecipDisplayName = "toto@domaine.fr" 'Destinataire MAPIMessages1.MsgSubject = "Un petit bonjour" 'Objet MAPIMessages1.MsgNoteText = "Salut." 'Texte MAPIMessages1.Send MAPISession1.SignOff
[edit] Comment extraire un élément d'une chaine délimitée qui est à une position donnée ?
On utilise la fonction ci-dessous qui attend en paramètres la chaine, la position de l'élément à extraire et le délimiteur. Cette fonction renvoie une chaine vide lorsqu'elle ne peut pas procéder à l'extraction. Dans le cas d'une extraction partielle, cette fonction est beaucoup plus rapide qu'un Split.
Function ExtraitElement(ChaineRecherche As String, Position As Long, Delim As String) As String 'Renvoie une chaine vide si l'extraction n'est pas possible On Error GoTo Err_Function Dim compteur As Long, LastPos As Long, CurPos As Long If InStr(ChaineRecherche, Delim) = 0 Or Len(ChaineRecherche) = 0 Then Exit Function LastPos = 1 Do CurPos = InStr(LastPos, ChaineRecherche, Delim) If CurPos = 0 Then
If compteur = Position - 1 Then ExtraitElement = Mid(ChaineRecherche, LastPos) Exit Do
Else
compteur = compteur + 1 If compteur = Position Then ExtraitElement = Mid(ChaineRecherche, LastPos, CurPos - LastPos) Exit Do End If
End If LastPos = CurPos + 1 Loop While CurPos > 0 Exit Function Err_Function: MsgBox "Error " & Err.Number & ": " & Err.Description Resume Next End Function
[edit] Comment lire un fichier XML ?
La lecture d'un fichier XML se fait à l'aide d'un parseur. Dans les références du projet, ajoutez Microsoft XML.
Voici un exemple qui affiche dans la fenêtre de débogage la liste des balises contenues dans un document xml.
Private Sub BrowseChildNodes(root_node As IXMLDOMNode) Dim i As Long For i = 0 To root_node.childNodes.length - 1
If root_node.childNodes.Item(i).nodeType <> 3 Then Debug.Print root_node.childNodes.Item(i).baseName BrowseChildNodes root_node.childNodes(i)
Next End Sub Private Sub BrowseXMLDocument(ByVal filename As String) Dim xmlDoc As DOMDocument, root As IXMLDOMElement Set xmlDoc = New DOMDocument xmlDoc.async = False xmlDoc.Load filename Set root = xmlDoc.documentElement If Not root Is Nothing Then
Debug.Print root.baseName BrowseChildNodes root
End If End Sub
Appelez simplement la procédure BrowseXMLDocument en passant en paramètre le chemin du fichier. Cette procédure ouvre le fichier puis appelle la procédure BrowseChildNodes qui parcoure l'ensemble des balises de façon récursive.
[edit] Comment connaître le type du contenu d'un TextBox ?
Dim D as Double If isNumeric(Text1.Text) Then D=CDbl(Text1.Text) If D-Int(D) = 0 Then
'Le nombre est entier
Else
'Le nombre est décimal
End if Else 'Ce n'est pas un nombre End if
[edit] Comment savoir si le contenu d'un TextBox est un Integer ?
Private Function isInteger(Expression As Variant) As Boolean Dim D As Double If IsNumeric(Text1.Text) Then D = CDbl(Text1.Text) If D = Int(D) Then isInteger = True End If End Function