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 :
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à
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