Création d'une fonction d'enregistrement par un formulaire et code VBA

Bonjour,

Pour certains besoin dans mon travail, j'aurais besoin d'enregistrer des informations pour des choses que je réalise là bas. De fait à partir de mon excel j'aimerais bien pouvoir enregistrer les valeurs d'un tableau dans un format texte afin de pouvoir y accéder plus tard manuellement. Seulement j'aimerais automatiser la chose en passant par un code vba via un formulaire de demande.

Voici une image d'un exemple de mon fichier de base :

image

Sur cette page, je compte créer un formulaire pour demander le nom de client et comment on veux noter le nom de la teinte, afin qu'il me créer un fichier avec le combo des deux nom.

Par la suite, dans le tableau que vous voyez plus haut, j'aimerais que chaque cellule soit reprise, et réécrite sous forme de tableau dans le fichier texte. Est-ce possible que les valeurs du fichier text puissent être représenter sous la forme d'un genre de tableau pour une question de lisibilité ?

Si c'est possible, est-ce qu'il y a moyen de ne récupérer que les valeurs des lignes non noire ?

Merci à ceux qui prêteront attention à ma demande

Bonjour,

Je complète ma demande avec ce test que j'ai essayer de mon côté

Dans le userform j'aimerais donc y renseigner le nom du client et de la teinte réaliser. Le but étant de faire en sorte que le nom de fichier text soit le combo des deux avec : "TextboxClient_TextboxTeinte", je voudrais ce format là

image

En ce qui concerne le code, le voici :

Private Sub btn_save_Click()

Worksheets("Recherche Teinte").Unprotect "typeacier"
'Prise en compte des valeurs sur l'intervalle du tableau
Range("H8:AQ49").Select

'définition des variables
Dim FileName As String
Dim Data
Dim r As Long, c As Integer
Dim NumRows As Long
Dim ExpRng As Range

Set ExpRng = Application.Selection
NumRows = ExpRng.Rows.Count
Fichier = TextboxClient.Value & "_" & TextBoxTeinte.Value

'Définition du nom de fichier et lieu enregistrement
FileName = "C:\Users\user\Desktop\Enregistrement tab\Fichier.Txt"

Open FileName For Output As #1

For r = 1 To NumRows
    For c = 1 To 8 'nom, g, LabCH
        Data = ExpRng.Cells(r, c).Value
        If IsNumeric(Data) Then Data = Val(Data)
        If IsEmpty(ExpRng, Cells(r, c)) Then Data = ""
        If c <> 8 Then
            Write #1, Data;
        Else
            Write #1, Data
        End If
    Next c
    Data = ExpRng.Cells(r, 36).Value 'delta 2000
        If IsNumeric(Data) Then Data = Val(Data)
        If IsEmpty(ExpRng, Cells(r, 36)) Then Data = ""
Next r
Close #1
TextboxClient = ""
TextBoxTeinte = ""
Worksheets("Recherche Teinte").Protect "typeacier"
End Sub

Mon but étant de ne prendre les valeurs que des colonnes 1 à 8 et la 36e vu qu'il y a de la 9e à la 35e colonnes plein de valeurs calculé que je ne veux pas récupérer.

Mais lorsque j'essaie de le lancer il ne veux pas et me dit qu'il y a :

"Erreur compilation

Nombre d'arguments incorrects ou affectation de propriété incorrecte"

Pouvez vous m'aidez à résoudre mon code correctement ?

Bonjour,

Essaies le code suivant (non testé car pas de fichier fourni) :

Private Sub btn_save_Click()
'définition des variables
Dim FileName As String
Dim Data
Dim r As Long, c As Integer
Dim NumRows As Long
Dim ExpRng As Range
Dim fichier As String
Dim nNumF As Integer
Dim wsRT As Worksheet

   Set wsRT = Worksheets("Recherche Teinte")
   wsRT.Unprotect "typeacier"
   'Prise en compte des valeurs sur l'intervalle du tableau
   Set ExpRng = wsRT.Range("H8:AQ49")
   NumRows = ExpRng.Rows.Count

   'Définition du nom de fichier et lieu enregistrement
   fichier = TextBoxClient.Value & "_" & TextBoxTeinte.Value
   FileName = "C:\Users\user\Desktop\Enregistrement tab\" & fichier & ".Txt"

   nNumF = FreeFile
   Open FileName For Output As #nNumF

   For r = 1 To NumRows
      cEnrOut = ""
      For c = 1 To 8 'nom, g, LabCH
         Data = ExpRng.Cells(r, c).Value
         If Data = Empty Then
            Data = ""
         ElseIf IsNumeric(Data) Then
            Data = Val(Data)
         End If
         Write #nNumF, Data;
      Next c

      Data = ExpRng.Cells(r, 36).Value 'delta 2000
      If IsNumeric(Data) Then
         Data = Val(Data)
      ElseIf Data = Empty Then
         Data = ""
      End If
      Write #nNumF, Data
   Next r

   Close #nNumF
   TextBoxClient = ""
   TextBoxTeinte = ""
   wsRT.Protect "typeacier"
End Sub

Si les valeurs numériques sont tronquées des décimales :

' remplace (2 fois)
      If IsNumeric(Data) Then
         Data = Val(Data)
      ElseIf Data = Empty Then
         Data = ""
      End If

' Par simplement
      If Data = Empty Then Data = ""

Cdlt,

Cylfo

Bonjour,

Merci de votre réponse, pour le fichier je pensais que c'était faisable sans, mais voici un fichier test.

Pour la macro, quand je la teste, il y a une incompatibilité de type qui officie au niveau du premier "If data = empty then ...."

Bonjour,

Le fichier contient des cellules en erreur (référence circulaire, division par zéro, ...) c'est ce qui génère le message d'erreur. J'ai rajouté un test pour gérer les cellules en erreur et afficher "#ERR".

J'ai également mis en commentaire l'instruction "If IsNumeric(data) Then data = Val(data)" car comme mentionné dans ma 1ère réponse, les données numériques sont tronquées.

Au niveau du résultat, dans le fichier "txt", le séparateur est la virgule et le séparateur décimal est le point.

Cdlt,

Cylfo

Merci pour votre retour, les circulaires ne sont présentes que sur l'exemple, sur mon vrai fichier il n'y en a pas donc ce ne sera pas problèmes vis à vis de celles-ci. J'aurais juste une question c'est pour le fichier txt.

Est-ce qu'il y a moyen dans le code de lui imposer un genre de format lors de l'enregistrement, si je doit donner un exemple, lui demander de noter la chose comme ceci : | a | b | c | d | e | f .... tout en gardant par exemple, les trait verticaux du 6 mis au mêmes endroit pour que ca refasse comme un pseudo tableau?

Voici un exemple de formatage possible à adapter / améliorer en fonction de votre besoin.

C'est pile ce que j'imaginais. Merci beaucoup de votre aide

Rechercher des sujets similaires à "creation fonction enregistrement formulaire code vba"