Je voudrais vous présenter mon problème que je n'ai pas encore pu résoudre :hum::
J'ai codé un petit programme dans Excel via VBA qui communique avec des instruments de mesures et sauvegarde automatiquement la mesure dans un second fichier Excel.
Le programme fonctionne parfaitement sur mon PC de développement.
Mais une fois le dossier collé sur un second PC j'ai une erreur 13 sur la ligne en gras :
...
Dim val As Double, valO As Double, valC As Double
...
instr_spectrum.WriteString ":CALC:MARK1:Y?" val = instr_spectrum.ReadString()
...
Voila un exemple de valeur lu sur l'instrument : -9.37E-01 ou encore -1.207E+00
La communication avec l'instrument fonctionne car d'autres informations (format string) sont lues correctement. ;)
Je me demandais si ce n'était pas lié au séparateur de décimal ou à une protection quelconque.
Merci d'avance pour vos lumières.
Cordialement
L'origine du problème est bien le séparateur décimal :
Ce code fonctionne correctement.
...
Dim value As String, valu As String
Dim val As Double
...
instr_spectrum.WriteString ":CALC:MARK1:Y?"
value = instr_spectrum.ReadString()
valu = Replace(value, ".", ",")
val = valu
...
Y a t'il un réglage a effectuer pour que le même code fonctionne sur les 2 PCs ?
Merci
Bonjour
Le type de séparateur décimal est un problème récurrent en VB et VBA et il est recommandé d'utiliser le point [.] dans les paramètres système de Windows.
Cependant et c'est curieux, il semble que ce soit l'appareil connecté qui génère une valeur avec comme séparateur un virgule ou je me trompe ?
Cela dit, tu as trouvé la solution en passant par le format texte que tu peux à nouveau convertir en numérique après avoir remplacé la virgule.
[QUOTE]
Ca dépend certainement de la "langue par défaut" du pc configuré dans windows, je dirais.
[/QUOTE]
Non, je n'ai jamais eu de soucis avec la langue. Ce sont les séparateurs décimaux et les dates qu'il faut remettre au « format américain» si le programme VBA en manipule.
on peut changer le point décimal quelque soit la langue du PC.
Mais là, de ce que je vois, tu fais une lecture de chaine (ReadString) donc on retourne une chaine. A tester en "forçant" la conversion en double avec CDbl(..), ça devrait marcher
Merci à tous pour vos retours et vos compléments d'information.
Je me trouve confronter à un second problème similaire mais plus ennuyeux.
Je diffuse mon petit programme autour de moi sur différents PC.
La plupart tout fonctionne très bien.
Mais sur un des PC, disons PCx, la communication avec les instruments ne fonctionne pas du tout.
Sur ce PCx, Je suis en mesure de communiquer avec mes instruments via d'autres logiciel dédiés.
Je sais donc que j'utilise la bonne adresse de communication et je sais que mes commandes fonctionnent.
Mais c'est comme si Vba refusait d'utiliser les resources VISA ou qu'il y a un conflit.
J'ai pris le temps de vérifier la liste des références. La version VISA-COM8 Type Library est bien activité sur le PCx. Pas de différence notable de ce côté là.
Théorie 1 : Le problème peut-il venir de la version de Excel mon PC utilise une version 14729.20260 64bit and the PCx une version 14729.20224 32bit.
Théorie 2 : 2 versions de VISA installer sur le PCx : "Use Keysight 32-bit VISA with another vendor’s VISA on the same PC"
N'hésitez pas à me partager vos éventuels autres théories.
Je travail activement sur le sujet en parallèle.
Merci à tous :)
Pour l'interface de communication, je suis sur que c'est bien la bonne. Aucun doute la dessus.
Je ne déclare pas de fonction externe dans ce programme.
Je vais essayer de faire les diverses mise à jour possible pour essayer de faire correspodre au mieux le PCx.
D'autres idées ?