Visual Basic

From Mesdoc

Contents

[edit] Comment contrôler les caractères qui peuvent être saisis dans un textbox ?

auteur : Romain Puyfoulhoux 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 ?

auteur : Romain Puyfoulhoux 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 ?

auteur : ThierryAIM 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 ?

auteur : SilkyRoad 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 ?

auteur : SilkyRoad 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 ?

auteur : Catbull


  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 ?

auteur : Romain Puyfoulhoux 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 ?

auteur : Romain Puyfoulhoux 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 ?

auteur : Jean-Marc Rabilloud 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 ?

auteur : Romain Puyfoulhoux 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 ?

auteurs : Catbull, ThierryAIM 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 ?

auteurs : Catbull, ThierryAIM 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é ?

auteur : Romain Puyfoulhoux 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 ?

auteur : Romain Puyfoulhoux Vous pouvez accéder au presse-papiers via l'objet Clipboard.

[edit] Comment savoir si un fichier existe ?

auteur : Romain Puyfoulhoux


  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 ?

auteur : Romain Puyfoulhoux


'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?

auteur : odan71 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 ?

auteur : Romain Puyfoulhoux


'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 ?

auteur : Romain Puyfoulhoux


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 ?

auteur : ThierryAIM 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 ?

auteur : ThierryAIM 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 ?

auteur : Romain Puyfoulhoux 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 ?

auteur : Jean-Marc Rabilloud 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 ?

auteur : Romain Puyfoulhoux 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 ?

auteur : Catbull


  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 ?

auteur : Catbull


  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
Personal tools