Bloc-notes (code commenté pour mieux comprendre)

Description

Le seul truc a faire pour que ce code marche correctement est d'activer la référence "Microsoft Scripting Runtime", cela permet d'utiliser FileSystemObject.
(Projet / Référence... / Cocher "Microsoft Scripting Runtime").

Source / Exemple :


Option Explicit
' Pour activer la référence "FileSystemObject" :
' Projet / Référence... / Cocher "Microsoft Scripting Runtime"
Public fso As New FileSystemObject

' Variables du fichier en cours :
Dim nChemin As String ' Chemin du dossier parent du fichier
Dim nTexte As String ' Texte du fichier en cours
Dim nTitre As String ' Nom du fichier en cours
Dim nPath As String ' Adresse complete du fichier en cours
Dim nName As String ' Nom de l'application

' Variables Height et Width de txtSaisie :
Dim hHeight As Integer
Dim hWidth As Integer

Private Sub Form_Load()
  ' Initialisation et mise en forme de txtSaisie
  hHeight = 670
  hWidth = 100
  txtSaisie.Text = ""
  txtSaisie.Top = 0
  txtSaisie.Left = 0
  txtSaisie.Height = Form1.Height - hHeight
  txtSaisie.Width = Form1.Width - hWidth
  
  ' Initialisation des variables du fichier texte
  nChemin = ""
  nTexte = ""
  nPath = ""
  nTitre = "Sans titre"
  nName = "Bloc-notes"
  
  ' Caption de l'application
  Form1.Caption = nTitre & " - " & nName
End Sub

Private Sub Form_Resize()
  ' Mise en forme de txtSaisie,
  ' quand la fenetre change de taille
  txtSaisie.Height = Form1.Height - hHeight
  txtSaisie.Width = Form1.Width - hWidth
End Sub

Private Sub Form_Unload(Cancel As Integer)
  Dim R
  
  ' Vérifie que la zone de texte n'est pas déjà vide
  If txtSaisie.Text <> "" Then
    
    ' Vérifie que le texte a été modifié
    If txtSaisie.Text <> nTexte Then
      ' Le texte a été modifié, donc demande si
      ' on veut enregistrer, ou pas, ou annuler l'opération
      R = MsgBox("Le fichier texte " & nTitre & " a été modifié." & _
        vbCrLf & vbCrLf & "Voulez-vous enregistrer les modifications ?", _
          vbYesNoCancel + vbExclamation, nName)
      
      ' Si Oui, on enregistre
      If R = vbYes Then
        mnuEnre_Click
      ' Si Annuler, sortie
      ElseIf R = vbCancel Then
        Exit Sub
      End If
    End If
  End If
  ' Quitte l'application
  End
End Sub

Private Sub mnuAbout_Click()
  frmAbout.Show vbModal, Me
End Sub

Private Sub mnuEnre_Click()
  Dim strm As TextStream
  Dim fNew As String
  
  On Error GoTo Erreur ' Prise en charge des erreurs
  
  ' Vérifie si la zone de texte n'est pas vide
  If txtSaisie.Text <> "" Then
  
    ' Verifie si le fichier existe déjà
    If (fso.FileExists(nPath)) Then
    
      ' Verifie que le texte a changé
      If txtSaisie.Text <> nTexte Then
      
        ' Si oui, enregistre les nouvelles
        ' données dans le fichier texte existant
        Set strm = fso.OpenTextFile(nPath, ForWriting, False)
        With strm
          .Write (txtSaisie.Text)
          .Close
        End With
        
        ' Reformate le caption sans "*"
        Form1.Caption = nTitre & " - " & nName
        
        ' Informations de la variable que le texte a changé
        nTexte = txtSaisie.Text
        
      ' Si le texte n'a pas changer, aucun enregistrement
      ' et ouverture de msgbox
      Else
        MsgBox "Vous n'avez pas modifié le fichier texte", _
          vbExclamation, nName
      End If
    
    ' Si le fichier texte n'existe pas, le créer
    Else
      ' Ouverture du CommonDialog pour enregistrer le fichier
      CD.Filter = "Fichier Texte (*.txt)|*.txt;|"
      CD.ShowSave
      
      If CD.FileName <> "" Then
        With fso
          ' Crée le nouveau fichier
          fNew = .BuildPath(.GetParentFolderName(CD.FileName), _
            CD.FileTitle)
          Set strm = .CreateTextFile(fNew, True)
        End With
        
        With strm
          ' Ecrit le texte dans le fichier
          .Write txtSaisie.Text
          .Close
        End With
        
        ' Modifie le Caption de la fenetre, par le nom du fichier
        Form1.Caption = fso.GetBaseName(CD.FileName) & _
          " - " & nName
        
        ' Information des variables
        With fso
          nChemin = .GetParentFolderName(CD.FileName)
          nTexte = txtSaisie.Text
          nPath = .GetAbsolutePathName(CD.FileName)
          nTitre = .GetBaseName(CD.FileName)
        End With
        
        ' Reformate le caption sans "*"
        Form1.Caption = nTitre & " - " & nName
        
      End If
    End If
  
  ' Si elle est vide, msgbox
  Else
    MsgBox "Ce document est vide !", vbExclamation, nName
  End If
  
  Exit Sub ' Aucune erreur, donc sortie
Erreur:
  Beep
  MsgBox "Problème dans l'enregistrement du fichier texte", _
    vbCritical + vbOKOnly, nName
End Sub

Private Sub mnuEnregs_Click()
  Dim strm As TextStream
  Dim fNew As String
  
  On Error GoTo Erreur ' Prise en charge des erreurs
  
  ' Vérifie si la zone de texte n'est pas vide
  If txtSaisie.Text <> "" Then
  
      ' Ouverture du CommonDialog pour enregistrer le fichier
      CD.Filter = "Fichier Texte (*.txt)|*.txt;|"
      CD.ShowSave
      
      If CD.FileName <> "" Then
        With fso
          ' Crée le nouveau fichier
          fNew = .BuildPath(.GetParentFolderName(CD.FileName), _
            CD.FileTitle)
          Set strm = .CreateTextFile(fNew, True)
        End With
        
        With strm
          ' Ecrit le texte dans le fichier
          .Write txtSaisie.Text
          .Close
        End With
        
        ' Modifie le Caption de la fenetre, par le nom du fichier
        Form1.Caption = fso.GetBaseName(CD.FileName) & _
          " - " & nName
        
        ' Information des variables
        With fso
          nChemin = .GetParentFolderName(CD.FileName)
          nTexte = txtSaisie.Text
          nPath = .GetAbsolutePathName(CD.FileName)
          nTitre = .GetBaseName(CD.FileName)
        End With
        
        ' Reformate le caption sans "*"
        Form1.Caption = nTitre & " - " & nName
      
      End If
  
  ' Si elle est vide, msgbox
  Else
    MsgBox "Ce document est vide !", vbExclamation, nName
  End If
  
  Exit Sub ' Aucune erreur, donc sortie
Erreur:
  Beep
  MsgBox "Problème dans l'enregistrement du fichier texte", _
    vbCritical + vbOKOnly, nName
End Sub

Private Sub mnuNew_Click()
  Dim R
  
  ' Vérifie que la zone de texte n'est pas déjà vide
  If txtSaisie.Text <> "" Then
    
    ' Vérifie que le texte a été modifié
    If txtSaisie.Text <> nTexte Then
    
      ' Le texte a été modifié, donc demande si
      ' on veut enregistrer, ou pas, ou annuler l'opération
      R = MsgBox("Le fichier texte " & nTitre & " a été modifié." & _
        vbCrLf & vbCrLf & "Voulez-vous enregistrer les modifications ?", _
          vbYesNoCancel + vbExclamation, nName)
      
      ' Si Oui, on enregistre
      If R = vbYes Then
        mnuEnre_Click
        
      ' Si Annuler, sortie
      ElseIf R = vbCancel Then
        Exit Sub
      End If
    End If
    
    ' Nouvelle page
    Form_Load
  End If
End Sub

Private Sub mnuOpen_Click()
  Dim strm As TextStream
  
  On Error GoTo Erreur ' Prise en charge des erreurs
  
  ' Ouverture du CommonDialog, pour ouvrir un fichier texte
  CD.DialogTitle = "Ouvrir un Fichier Texte"
  CD.Filter = "Fichier Texte (*.txt)|*.txt;|"
  CD.ShowOpen
  
  ' Si l'utilisateur a bien choisi un fichier,
  ' ouverture et lecture de celui-ci
  If CD.FileName <> "" Then
    Set strm = fso.OpenTextFile(CD.FileName) ' Ouverture
    With strm
      txtSaisie = .ReadAll ' Lit et inscrit dans txtSaisie
      .Close ' Fermeture
    End With
    
    ' Modifie le Caption de la fenetre, par le nom du fichier
    Form1.Caption = fso.GetBaseName(CD.FileName) & _
      " - " & nName
  End If
  
  ' Information des variables qu'un nouveau fichier est lancé
  nChemin = fso.GetParentFolderName(CD.FileName)
  nTexte = txtSaisie.Text
  nPath = fso.GetAbsolutePathName(CD.FileName)
  nTitre = fso.GetBaseName(CD.FileName)
  
  Exit Sub  ' Aucune erreur, donc sortie
Erreur:
  Beep
  MsgBox "Problème dans l'ouverture du fichier texte", _
    vbCritical + vbOKOnly, nName
End Sub

Private Sub mnuPrint_Click()
  CD.ShowPrinter
End Sub

Private Sub mnuQuitter_Click()
  Unload Me ' Passe par la procedure OnUnload
  End ' Fermeture du programme
End Sub

Private Sub txtSaisie_Change()
  ' Si le texte a été modifie, ajoute "*" à la fin du nom
  If nTexte <> txtSaisie.Text Then
    Form1.Caption = nTitre & "* - " & nName
  End If
End Sub

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.