Se connecter avec
S'enregistrer | Connectez-vous
Résolu

[VBA] Enregistrement automatique - Logiciel Pulse

Dernière réponse : dans Programmation
Partagez

Bonjour,

Je fais des mesures acoustiques grâce au logiciel PULSE (Bruel & Kjaer), ce logiciel est ancien et intègre VBA. Je souhaite enregistrer automatiquement à la fin de l'acquisition les données d'une courbe dans un fichier sur le disque.

Un clic-droit sur le graphique > Save Curve est possible mais je cherche à automatiser cette commande. L'enregistrement des "clic" effectués n'est pas disponible sur cette version de VBA. La commande Application. me propose plusieurs possibilité de Sub mais je n'arrive pas à les utiliser (débutant en VBA).

J'aimerai avoir un équivalent de ce code sur PULSE :

  1. ActiveDocument.SaveAs Filename:="Doc1.doc", FileFormat:=wdFormatDocument
  2.  
  3. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  4. Application.AlertBeforeOverwriting = False
  5. ActiveWorkbook.Save
  6. End Sub


C'est assez important dans mon projet, pouvez-vous me donner vos idées ?


Niveau en VB6 : débutant
OS : XP Pro
Microsoft Office 2010

Salut,

OS: Slackware
VB: Expert.

M'enfin !

----------------------

Je ne connais malheureusement pas le logiciel dont tu parles.
Mais il est sans doute possible de trouver un moyen de lister tes objets.
Je pense à quelque chose comme ça :

  1. Private Sub toto
  2.  
  3. For Each mon_graph In Project.Curves
  4. MsgBox mon_graph.Name
  5. Next
  6.  
  7.  
  8. End Sub


Mais je n'en connais pas le modèle objet.
N'as tu pas de manuel ou autre qui en parlerait ?
  • zeb a édité ce message
  • zeb a édité ce message

J'ai essayé ta proposition et cela ne fonctionne pas..

En fait, mon problème est plutôt dans l'appel d'une fonction, je m'explique :

Mon projet s'appelle Application (Pulse.ost), il y a une Form (userForm1) et un module (Module 1).
J'ai fait plusieurs essais sur la UserForm1 avec des boutons qui permettent de lancer l'acquisition sur le logiciel ou de le stopper, etc.. Ces fonctions étant pré-programmées dans la base de fonction PulseLabShop. Cela fonctionne.

Mais je butte sur l'appel des fonctions d'enregistrement.. Si je me réfère au Object Browser : dans la librairie PulseLabShop et dans la sous-partie Application, j'ai la liste des fonctions enregistrées :
- Activate
- AutoRange
- Exit
- Save
- SaveProjectAs
- Start
- ...etc

Ces fonctions ci sont applicables assez facilement. Cependant je cherche l'enregistrement de plusieurs courbes précises et pas tout le projet. Le projet étant au format .pls et je souhaite récupérer les données d'acquisition en .txt .

Le logiciel PULSE enregistre les fonctions dans le Function Organiser puis on créé des zones graphiques ou l'on insere ces fonctions. Mon idée est d'aller chercher la fonction précise puis de l'enregistrer (Un clic droit dans le Function Organizer pour sauver la fonction est possible) pour que l'enregistrement se fasse automatiquement. Je ne sais pas comment créé une nouvelle fonction et quelles données/format/syntaxe utiliser.


Je voulais fournir des ImprEcran vu que le logiciel est peu connu et mes explications plus ou moins claires, mais je ne peux le faire sur ce forum. L'aide du logiciel de programmation a été désactivée..

Merci de porter attention à mon soucis.


----------------------------

Bill Russell
  • BillRussell a édité ce message

Salut,

Citation :
L'aide du logiciel de programmation a été désactivée..


J'ai tendance à répondre que nous ne sommes pas là pour remplacer le manuel. Au contraire.
Ce n'est pas contre toi, car j'ai compris que tu préfèrerais l'avoir.

Va voir ton chef et exige de lui (si, si) que l'aide soit installée.
(Perso, ça me rappelle des souvenirs ;)  )
Contenus similaires
Posez votre question

Désactivée était pas le bon terme, je veux dire qu'elle ne fonctionne pas, j'ai les drivers et les droits d'admin. J'ai déjà tout réinstallé et elle ne fonctionne pas (pas détectée ou autre)

De toutes façons j'ai pu retrouver des bribes sur internet de cette aide. Elle ressemble à un dictionnaire : "Programmation : action de programmer" !! et je te donne un exemple :

" SaveProjectAs : fonction qui permet de sauver le projet sous un nom défini.
Function SaveProjectAs(FileName, [DoOverwrite]) As Boolean "

C'est a peu de chose près la même chose pour toutes les fonctions..
Moi j'aimerai comprendre comment je peux appeler une fonction créé et ou est ce que je dois l'appeler (obligatoirement dans userform? utilité du Module ? String ? etc.. )

Il te faudrait te rapprocher d'un forum spécialisé dans ce logiciel particulier.
Ici, nous sommes trop généralistes, ou spécialisés dans des logiciels plus répandus.

Mais ton sujet reste ouvert. Un guru de Pulse pourrait passé et te répondre.

Oui tu as raison, je suis toujours à la recherche d'un dieu en Pulse. J'ai fait plusieurs autres forum (meme anglais) genre NI ou encore le fournisseur Bruel & Kjaer mais même eux ne savent plus rien sur ce logiciel v10.0 alors qu'ils sortent la version v16.2 ...
Enfin je suis à la recherche du Graal mais les questions sur les forums généraliste me permettent aussi de faire le point sur ce que je sais et ce que je ne sais pas.

En tout cas le sujet reste ouvert et je suis toujours à l’affût ! =)

Mise à Jour : J'ai trouvé le plus gros du code, il me reste une modification à faire:

J'ai essayé de créer une Variable et de mettre mes données dedans. Pour ensuite insérer ma variable dans le fichier. Mais il y a une erreur à ce niveau là, je ne sais pas comment déclarer ma variable "Data" : en tant que Object ou en tant que Variable ?

Voici mon code :

  1. Private Sub CommandButton5_Click()
  2. Dim FSys As Object
  3. Dim TXT As Object
  4. Dim OpenTxt
  5. Dim LeFichierTxt As String
  6. LeFichierTxt = "C:\Documents and Settings\All Users\Desktop\fichier2.txt"
  7. Dim FunctionData As BKDataSet
  8. Dim MyPulseData As Variant
  9. Dim Data As Object
  10.  
  11.  
  12. Set FunctionData = Project.FunctionOrganiser.FunctionGroups("LOG").
  13. Functions("Spectre dB (Input 1)").FunctionData
  14.  
  15. FunctionData.GetAllValues (True)
  16.  
  17. Set Data = FunctionData. 'C'est là que je plante, je ne sais pas quoi mettre pour les changer en objet
  18.  
  19.  
  20. 'Pour creer le fichier texte si il existe pas
  21. Set FSys = CreateObject("Scripting.FileSystemObject")
  22. If FSys.FileExists(LeFichierTxt) = False Then
  23. Set TXT = FSys.CreateTextFile(LeFichierTxt)
  24. End If
  25.  
  26. 'Ouverture en ecriture du Fichier texte
  27. Set TXT = FSys.GetFile(LeFichierTxt)
  28. Set OpenTxt = TXT.OpenAsTextStream(8, -2) '8 = ForAppending = Ouvre un fichier et écrit à la fin du fichier.
  29.  
  30. 'Pour écrire dans le fichier texte
  31. With OpenTxt
  32. .Write Now & " --> " & Data & (Chr(13) + Chr(10))
  33. End With
  34.  
  35. End Sub


Pouvez-vous m'aider ?
  • BillRussell a édité ce message
  • BillRussell a édité ce message

J'ai aussi a disposition ce pdf mais j'avoue ne pas trop comprendre l'explication de la syntaxe décrite à partir du slide 40.
J'ai essayé ce que vous m'avez indiquer :

  1. Private Sub CommandButton5_Click()
  2. Dim FSys As Object
  3. Dim TXT As Object
  4. Dim OpenTxt
  5. Dim LeFichierTxt As String
  6. LeFichierTxt = "C:\Documents and Settings\All Users\Desktop\fichier2.txt"
  7. Dim FunctionData As BKDataSet
  8. Dim MyPulseData As Variant
  9. Dim Data As Variant
  10.  
  11.  
  12. Set FunctionData = Project.FunctionOrganiser.FunctionGroups("LOG").Functions("Spectre dB (Input 1)").FunctionData
  13. FunctionData.GetAllValues (True)
  14.  
  15. Data = FunctionData.GetAllValues(True) 'Data contient bien mes données : tableau 2 colonnes 1600 valeurs
  16.  
  17.  
  18. [...]
  19.  
  20. 'Pour écrire dans le fichier texte
  21. With OpenTxt
  22. .Write Data
  23. End With
  24.  
  25. End Sub


Par contre il ne veut pas écrire dans le fichier texte car Data est une variable, comment je le met en Object ??
Redim ??
  • BillRussell a édité ce message

Ben normalement pas de soucis pour écrire une variable ... (j'ai fais l'essais en mettant une string dans data). Peux-tu nous dire le type de donné qu'il y a dans data ?
(à l'aide d'un breakboint juste avant ".Write data" et d'un "watch" sur data).

Essaye aussi de mettre une string à la place de "FunctionData.GetAllValues(True)" et de voir si ça passe.

edit: apparement ton data est un tableau, tu dois écrire chaque donnée indépendemment: qqch comme ça devrait jouer:

  1. Private Sub CommandButton5_Click()
  2. Dim FSys As Object
  3. Dim TXT As Object
  4. Dim OpenTxt
  5. Dim LeFichierTxt As String
  6. LeFichierTxt = "C:\fichier.txt"
  7. Dim MyPulseData As Variant
  8. Dim test(0 To 2) As String
  9. Dim data As Variant
  10.  
  11. 'Set Data = FunctionData.GetAllValues(True) 'C'est là que je plante, je ne sais pas quoi mettre pour les changer en objet
  12. 'Pour creer le fichier texte si il existe pas
  13. Set FSys = CreateObject("Scripting.FileSystemObject")
  14. If FSys.FileExists(LeFichierTxt) = False Then
  15. Set TXT = FSys.CreateTextFile(LeFichierTxt)
  16. End If
  17. test(0) = "test"
  18. test(1) = "test2"
  19. test(2) = "test3"
  20. data = test
  21. 'Ouverture en ecriture du Fichier texte
  22. Set TXT = FSys.GetFile(LeFichierTxt)
  23. Set OpenTxt = TXT.OpenAsTextStream(8, -2) '8 =ForAppending = Ouvre un fichier et écrit à la fin du fichier.
  24.  
  25. 'Pour écrire dans le fichier texte
  26.  
  27. With OpenTxt
  28. .Write Now & " --> "
  29. For i = LBound(data) To UBound(data)
  30. .Write data(i)
  31. Next
  32. .Write (Chr(13) + Chr(10))
  33. End With
  34. End Sub


Re-Edit: Je sais Zeb, j'ai pas déclarer "i", c'est ... MAL ...:pfff: 
  • drul a édité ce message
  • drul a édité ce message

Quand j'ouvre le fichier texte il y a écrit :

15.06.2012 10:00:00 --> testtest2test3

Si je défini Data en tant que String il ne reconnait plus.
"Compile Error Type Mismatch"
sur la ligne Data = test (ligne 20)

J'ai déclarer i en tant que Variant...

Salut,
Je n'ai pas Pulse, j'ai donc remplacer "FunctionData.GetAllValues(True)" par "test" qui simule un tableau (en l'occurence de string).
si tu copie juste:

  1. With OpenTxt
  2. .Write Now & " --> "
  3. For i = LBound(data) To UBound(data)30. .Write data(i)
  4. Next
  5. .Write (Chr(13) + Chr(10))
  6. End With

Dans TON projet ( le code que tu as publié le 14 juin) ça donne quoi ?
  • zeb a édité ce message

Oui pardon j'avais bêtement copié collé pour tester ta solution...


Avec le code, j'ai deux erreurs :

- Si je définis Data en tant que Variant : "Subscript Out of range" sur la ligne 30
- Si je définis Data en tant que String : "Expected Array" il attend un tableau. Ligne 29 sur LBound.

STP, met un breakpoint sur la ligne d'erreur et regarde ce qu'il y a dans data (bouton droit "add watch")

Data doit être un variant, string c'était juste pour faire un test.

Tu as bien garder les lignes suivantes ?

  1. Set FunctionData = Project.FunctionOrganiser.FunctionGroups("LOG").Functions("Spectre dB (Input 1)").FunctionData13.FunctionData.GetAllValues (True)
  2.  
  3. Data = FunctionData.GetAllValues(True)


Tiens en regardant de plus près, je suis surpris par la présence de getallValues sur les deux lignes ... Essaye le code suivant:

  1. Set FunctionData = Project.FunctionOrganiser.FunctionGroups("LOG").Functions("Spectre dB (Input 1)").FunctionData13.FunctionData
  2.  
  3. Data = FunctionData.GetAllValues (True)

  • drul a édité ce message

L'erreur est sur la ligne .Write Data(i)

Avec le break point et le Watch : on voit bien que Data contient les données. elles sont de la forme :

Data............................................................................Variant/Double(0 to 1600, 0 to 0)
...Data(0).....................................................................Double(0 to 0)
.......Data(0,0).............1.57140459577931E-06................Double
...Data(1) Double(0 to 0)
.......Data(1,0) 2.04580459557782E-06 Double

[...]
  • BillRussell a édité ce message
  • BillRussell a édité ce message

Un peu d'inspiration ....

  1. Private Sub CommandButton5_Click()
  2. Dim FSys As Object
  3. Dim TXT As Object
  4. Dim OpenTxt
  5. Dim LeFichierTxt As String
  6. LeFichierTxt = "C:\fichier.txt"
  7. Dim MyPulseData As Variant
  8. Dim test(0 To 3, 0 To 2) As Double
  9. Dim data As Variant
  10.  
  11.  
  12.  
  13. 'Set Data = FunctionData.GetAllValues(True) 'C'est là que je plante, je ne sais pas quoi mettre pour les changer en objet
  14. 'Pour creer le fichier texte si il existe pas
  15. Set FSys = CreateObject("Scripting.FileSystemObject")
  16. If FSys.FileExists(LeFichierTxt) = False Then
  17. Set TXT = FSys.CreateTextFile(LeFichierTxt)
  18. End If
  19. test(0, 0) = 0.1
  20. test(0, 1) = 0.213
  21. test(0, 2) = 3.14
  22. test(1, 0) = 0.22
  23. test(1, 1) = 0.3132
  24. test(1, 2) = 3.1432
  25. test(2, 0) = 0.131
  26. test(2, 1) = 0.3213
  27. test(2, 2) = 3.4
  28. test(3, 0) = 0.32
  29. test(3, 1) = 0.13
  30. test(3, 2) = 3.3
  31. data = test
  32. 'Ouverture en ecriture du Fichier texte
  33. Set TXT = FSys.GetFile(LeFichierTxt)
  34. Set OpenTxt = TXT.OpenAsTextStream(8, -2) '8 =ForAppending = Ouvre un fichier et écrit à la fin du fichier.
  35.  
  36. 'Pour écrire dans le fichier texte
  37.  
  38. With OpenTxt
  39. .Write Now & " --> "
  40. For i = LBound(data, 1) To UBound(data, 1)
  41. For j = LBound(data, 2) To UBound(data, 2)
  42. .Write data(i, j) & " "
  43. Next
  44. Next
  45. .Write (Chr(13) + Chr(10))
  46. End With
  47. End Sub

Je pense que Data ne contient pas d'abscisses mais plutôt un numéro de mesure (point1, point2,..). pourtant l'unité des abscisses est bien une dimension (Hertz) Mon graphique a exporté est de la forme dB = f(Hz)

Enfin ce sont des détails qui ne concernent pas ce sujet de programmation. Je donne mon code final. J'ai moi même recréer les abscisses, je connaissait le pas de mesure (j). J'ai mis un point-virgule comme séparateur entre abscisse et ordonnée pour faciliter l'importation et la séparation des données.

Merci en tout cas à toi drul, c'est gentil à toi d'avoir consacré de ton temps à mon problème

Voici mon code final qui extrait des données d'un logiciel d'acquisition, comptabilise le nombre de mesures effectuées, l'unité des abscisses, créé un fichier texte, l'ouvre en mode écriture, et insère les données d'une variable double.

  1. Private Sub CommandButton5_Click()
  2. Dim FSys As Object
  3. Dim TXT As Object
  4. Dim OpenTxt
  5. Dim LeFichierTxt As String
  6. LeFichierTxt = "C:\Documents and Settings\All Users\Desktop\fichier2.txt"
  7. Dim FunctionData As BKDataSet
  8. Dim MyPulseData As Variant
  9. Dim Data As Variant
  10. Dim Xaxis As String
  11. Dim Entries As Long
  12. Dim test(0 To 2) As String
  13. Dim i As Variant
  14.  
  15.  
  16. Set FunctionData = Project.FunctionOrganiser.FunctionGroups("LOG").Functions("Spectre dB (Input 1)").FunctionData
  17.  
  18.  
  19. Data = FunctionData.GetAllValues(True)
  20.  
  21.  
  22. Entries = FunctionData.NumberOfXAxisEntries
  23. ReDim ValueArr1(Entries - 1) As Double 'Variable de type tableau
  24. FunctionData.RealValues ValueArr1 'Récuperation des Y
  25. TextBox1.Text = Entries
  26.  
  27. Xaxis = FunctionData.XaxisUnit 'Cette fonction marche mais pas celle de recup des données
  28. ReDim ValueArr2(Entries - 1) As Double
  29. FunctionData.RealValues ValueArr2
  30. TextBox2.Text = Xaxis
  31.  
  32. 'Pour creer le fichier texte si il existe pas
  33. Set FSys = CreateObject("Scripting.FileSystemObject")
  34. If FSys.FileExists(LeFichierTxt) = False Then
  35. Set TXT = FSys.CreateTextFile(LeFichierTxt)
  36. End If
  37.  
  38.  
  39. 'Ouverture en ecriture du Fichier texte
  40. Set TXT = FSys.GetFile(LeFichierTxt)
  41. Set OpenTxt = TXT.OpenAsTextStream(8, -2) '8 = ForAppending = Ouvre un fichier et écrit à la fin du fichier.
  42.  
  43.  
  44. 'Pour écrire dans le fichier texte
  45. With OpenTxt
  46. j = 0
  47. For i = LBound(Data) To UBound(Data)
  48.  
  49. .write j & ";"
  50. .write Data(i, 0)
  51. .write (Chr(13) + Chr(10))
  52. j = j + 16
  53. Next
  54.  
  55. End With
  56.  
  57. Msg = "Écriture réussie dans fichier2.txt"
  58. MsgBox (Msg)
  59.  
  60. End Sub
  • BillRussell a édité ce message
  • BillRussell a édité ce message

Meilleure solution

pfeewwwwwww ... Content que tu aies pu t'en sortir...

Pas évident quand on connais pas du tout pulse ...

A bientôt peut-être ...
(P.S. mais ton sujet en résolu stp)

Edit: y a un peu de nettoyage à faire dans ton code ...
  • BillRussell a sélectionné cette solution comme la meilleure réponse
  • drul a édité ce message

Nouvelle Question toute bête :
J'ai maintenant un UserForm avec :
- Un bouton Start d'acquisition
- Un bouton Stop
- Deux OptionButton
- un bouton d'execution de la function

Je souhaite donc que lorsque l'utilisateur coche l'OptonButton1, que l'enregistrement se fasse sous le nom de Série n°1 et que l'enregistrement concerne les microphones. Plus clairement, j'aimerai que la variable NumeroSérie ait la valeur "1", et que la variable NumeroMicro prenne une première fois la valeur "1", que l'enregistrement se fasse, puis la valeur "2" et enregistrement à nouveau. Le problème que j'ai c'est que le logiciel ne reconnait pas la ligne
  1. Set FunctionData = Project.FunctionOrganiser.FunctionGroups("LOG").Functions("Spectre dB (Input "NumeroMicro")").FunctionData


En effet, le chemin normal ne contient pas de variable.. Car on fait appel à des données du logiciel d'acquisition.

Mon projet touche à sa fin et j'implore votre aide afin de pouvoir finir à temps..

  1. Function Enregistrement_text(NumeroSerie As Integer, NumeroMicro As Integer) As Integer
  2.  
  3. Dim FSys As Object
  4. Dim TXT As Object
  5. Dim OpenTxt
  6. Dim FunctionData As BKDataSet
  7. Dim Data As Variant
  8. Dim i As Variant
  9.  
  10. Dim LeDossier, LeSousDossier, LeFichierTxt As String
  11. LeDossier = "C:\Documents and Settings\All Users\Desktop\Mesures Acoustiques 2012"
  12. LeSousDossier = "C:\Documents and Settings\All Users\Desktop\Mesures Acoustiques 2012\Série" & NumeroSerie
  13. LeFichierTxt = "C:\Documents and Settings\All Users\Desktop\Mesures Acoustiques 2012\Série" & NumeroSerie & "\Micro" & NumeroMicro & ".txt"
  14.  
  15. Set FunctionData = Project.FunctionOrganiser.FunctionGroups("LOG").Functions("Spectre dB (Input "NumeroMicro")").FunctionData
  16. Data = FunctionData.GetAllValues(True)
  17.  
  18. Set FSys = CreateObject("Scripting.FileSystemObject")
  19. If FSys.FolderExists(LeDossier) = False Then
  20. Set FOLD = FSys.CreateFolder(LeDossier)
  21. End If
  22.  
  23. Set FSys = CreateObject("Scripting.FileSystemObject")
  24. If FSys.FolderExists(LeSousDossier) = False Then
  25. Set FOLD = FSys.CreateFolder(LeSousDossier)
  26. End If
  27.  
  28. Set FSys = CreateObject("Scripting.FileSystemObject")
  29. If FSys.FileExists(LeFichierTxt) = False Then
  30. Set TXT = FSys.CreateTextFile(LeFichierTxt)
  31. End If
  32.  
  33. Set TXT = FSys.GetFile(LeFichierTxt)
  34. Set OpenTxt = TXT.OpenAsTextStream(8, -2)
  35. With OpenTxt
  36. j = 0
  37. For i = LBound(Data) To UBound(Data)
  38. .write j & ";"
  39. .write Data(i, 0)
  40. .write (Chr(13) + Chr(10))
  41. j = j + 16
  42. Next
  43. End With
  44.  
  45. Msg = "Écriture réussie dans : Serie " & NumeroSerie
  46. MsgBox (Msg)
  47.  
  48. End Function
  49.  
  50. Private Sub CommandButton2_Click()
  51. PulseLabShop.Start
  52. End Sub
  53.  
  54. Private Sub CommandButton3_Click()
  55. PulseLabShop.Stop
  56. End Sub
  57.  
  58. Private Sub CommandButton4_Click()
  59. Call Enregistrement_text(2, 1)
  60. End Sub
  61.  
  62. Private Sub OkButton_Click()
  63. UserForm3.Hide
  64. End Sub
  • BillRussell a édité ce message
  • BillRussell a édité ce message
  • BillRussell a édité ce message
  • BillRussell a édité ce message
  • BillRussell a édité ce message
  • BillRussell a édité ce message

Comme tu l'as très bien fait en ligne 45, utilise l'opérateur & pour concatener !

  1. Set FunctionData = Project.FunctionOrganiser.FunctionGroups("LOG").Functions("Spectre dB (Input " & NumeroMicro & ")").FunctionData


Edit: et stp utilise la balise code=vb au lieu de code=cpp
  • drul a édité ce message

Pardon pour la balise, didn't know :S

"&"... suis-je bête, Merci.


Le "must" serait que je puisse enregistrer les deux fichiers textes en cliquant sur un seul bouton. Il y a t il un moyen plus simple et plus joli que d'appeler la fonction plusieurs fois ?

  1. Function Enregistrement_text(NumeroSerie As Integer, NumeroMicro As Integer) As Integer
  2.  
  3. Dim FSys As Object
  4. Dim TXT As Object
  5. Dim OpenTxt
  6. Dim FunctionData As BKDataSet
  7. Dim Data As Variant
  8. Dim i As Variant
  9.  
  10. Dim LeDossier, LeSousDossier, LeFichierTxt As String
  11. LeDossier = "C:\Documents and Settings\All Users\Desktop\Mesures Acoustiques 2012"
  12. LeSousDossier = "C:\Documents and Settings\All Users\Desktop\Mesures Acoustiques 2012\Série" & NumeroSerie
  13. LeFichierTxt = "C:\Documents and Settings\All Users\Desktop\Mesures Acoustiques 2012\Série" & NumeroSerie & "\Micro" & NumeroMicro &".txt"
  14.  
  15. Set FunctionData = Project.FunctionOrganiser.FunctionGroups("LOG").Functions("Spectre dB (Input " & NumeroMicro & " )").FunctionData
  16. Data = FunctionData.GetAllValues(True)
  17.  
  18. Set FSys = CreateObject("Scripting.FileSystemObject")
  19. If FSys.FolderExists(LeDossier) = False Then
  20. Set FOLD = FSys.CreateFolder(LeDossier)
  21. End If
  22.  
  23. Set FSys = CreateObject("Scripting.FileSystemObject")
  24. If FSys.FolderExists(LeSousDossier) = False Then
  25. Set FOLD = FSys.CreateFolder(LeSousDossier)
  26. End If
  27.  
  28. Set FSys = CreateObject("Scripting.FileSystemObject")
  29. If FSys.FileExists(LeFichierTxt) = False Then
  30. Set TXT = FSys.CreateTextFile(LeFichierTxt)
  31. End If
  32.  
  33. Set TXT = FSys.GetFile(LeFichierTxt)
  34. Set OpenTxt = TXT.OpenAsTextStream(8, -2)
  35. With OpenTxt
  36. j = 0
  37. For i = LBound(Data) To UBound(Data)
  38. .write j & ";"
  39. .write Data(i, 0)
  40. .write (Chr(13) + Chr(10))
  41. j = j + 16
  42. Next
  43. End With
  44.  
  45. Msg = "Écriture réussie dans: Série " & NumeroSerie
  46. MsgBox (Msg)
  47.  
  48. End Function
  49.  
  50.  
  51. Private Sub CommandButton4_Click()
  52. If OptionButton1.Value = False Then
  53. Else: Call Enregistrement_text(1, 1) & call Enregistrement_text(1, 2) & Call Enregistrement_text(1, 3) & Call Enregistrement_text(1, 4)
  54. End If
  55.  
  56. If OptionButton2.Value = False Then
  57. Else: Call Enregistrement_text(2, 1) & call Enregistrement_text(2, 2) & Call Enregistrement_text(2, 3) & Call Enregistrement_text(2, 4)
  58. End If
  59.  
  60. End Sub

L'appel de la fonction à plusieurs reprise n'est pas un probleme.
Esthetiquement une boucle serait mieux, mais bon.

Sinon, une solution amusante et parfois utile s'appel la récursivité: un exemple

  1. Sub appel()
  2. test (1)
  3. End Sub
  4. Sub test(ligne As Integer)
  5. Cells(ligne, 1).Value = "ceci est une fonction recursive " & ligne
  6. If ligne < 4 Then
  7. test (ligne + 1)
  8. End If
  9. End Sub

La répétition des fonctions fonctionne très bien, j'ai maintenant un programme complet qui fonctionne sans erreur. Des petits ajustements ont été nécessaires mais rien d'important.

En tout cas, un grand merci à tous ceux qui m'ont aidé (drul en fait =D )
J'avais déjà vu la possibilité d'une récursivité mais il fallait que je code quelque chose d'intuitif, que quelqu'un qui ne s'y connaisse pas trop en prog puisse comprendre le déroulement du code.

(Sélectionne une réponse de Drul comme étant la meilleure pour marquer ce topic comme résolu. Drul y gagnera quelques points, en plus de ta reconnaissance.)
Posez votre question