From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

Discussions au sujet de NI LabVIEW

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

Macro excel et Ecrire dans un fichier

Résolu !
Accéder à la solution

Bonjour à tous,

 

Je ne suis pas programmeur d'origine, mais je me débrouille avec Labview depuis quelques années, sur les bases d'anciens programmes.

Initialement en 8.2, je les ai fait passer progressivement en 2016 sans trop de problèmes. Mais depuis un passage simultané Win7/Win10 et  LV2016/LV2020, il y a un problème que je n'arrive pas à résoudre. Evidemment, le mieux serait d'essayer Win10+LV2016 ou Win7+LV2020 pour connaître l'origine, mais ce n'est pas possible...

 

La majorité de mes programmes consiste en l'acquisition de mesures, écrites au fur et à mesure dans un fichier.

A la fin de la session, le programme ouvre le fichier sous Excel, ainsi qu'une macro, et exécute cette dernière.

Hors, depuis la migration, le format des cellules dans lesquelles il y a une formule (moyenne, écart-type, etc...) est en "Personnalisé", avec un "." au lieu de la "," habituelle (en format Standard).

Le plus étrange, c'est que si j'exécute la macro indépendamment de LV sur mon fichier brut, cela fonctionne très bien !

 

Pour avancer, j'ai donc voulu moderniser un de ces programmes.
Mais le VI "Ecrire dans un fichier" n'est plus supporté, et le VI de remplacement ne fonctionne pas de la même manière.
L'ancien VI possédait une entrée "ajouter au fichier", pas le nouveau (qui possède une entrée Refnum).
Evidemment, à chaque fois que le nouveau VI est activé, il écrit au début du fichier.
Et il est impossible de câbler la sortie Refnum d'une structure à l'autre.

ecshom_1-1632746584866.jpeg

 

Ce n'est pas l'origine de mon problème de macro puisque, même s'il n'y a qu'une ligne dans mon fichier, les cellules avec formule se retrouvent quand même avec ce fichu format "Personnalisé". Néanmoins, j'aimerais savoir comment faire.

 

Je pense donc que le problème vient de cette partie :

ecshom_2-1632747659658.jpeg

 

VI "Macro" :

 

ecshom_3-1632747733412.jpeg

ecshom_4-1632747765268.jpeg

ecshom_5-1632747794059.jpeg

VI "Ouvre Excel" :

 

ecshom_6-1632747850979.jpeg

 

 

Désolé si le vocabulaire n'est pas assez technique... J'ai appris tout ce que je sais en étudiant les programmes d'origine, j'ai donc quelques (un paquet de) lacunes...

Et merci par avance pour votre aide !

 

0 Compliments
Message 1 sur 19
1 362 Visites

Je joins les fichiers.
Malheureusement il est impossible de charger un .xlsm sur le forum.

0 Compliments
Message 2 sur 19
1 359 Visites

 

Et si c'était bêtement un problème de séparateur décimal de Windows 10 :

https://portal.makeitsimple.ch/knowledgebase/63/Windows-10---Parametres-Region-et-langue---Francais-...

 

 

0 Compliments
Message 3 sur 19
1 318 Visites

Si ça fonctionne en dehors de LabVIEW alors c'est probablement relié à un paramètre de LabVIEW. Dans Outils, Options..., Front Panel, General assure toi que la case "Use localized decimal point" est cochée. Tu devras relancer LabVIEW par la suite.

 

Ben64

0 Compliments
Message 4 sur 19
1 312 Visites

Bonjour et merci pour votre retour.

 

Concernant le séparateur, W10 et LV sont bien configurés, je viens de vérifier.

 

Voici le fichier brut écrit par LV :

fichbrut.jpg

Voici le fichier après que le programme LV ait lancé et appliqué la macro (en orange, les cases avec une formule) :

 

macro_lv.jpg

 

Voici le fichier si j'applique la même macro au fichier brut, mais avec Excel :

 

macro_xl.jpg

 C'est bien le format de ces cellules qui est modifié. Mais comment est-ce possible ? Ca commence à me rendre fou 😕

0 Compliments
Message 5 sur 19
1 309 Visites

Dans le fichier généré par LV les cellules contenant la virgule comme séparateur décimal ont elles aussi le format personnalisée?

 

Ben64

0 Compliments
Message 6 sur 19
1 303 Visites

Non, elles sont en "Standard"

0 Compliments
Message 7 sur 19
1 301 Visites

Je crois que VBA utilise toujours le . comme séparateur décimal. Il est très possible que la cause soit dans la macro (lorsque qu'appelé via LabVIEW ça passe par une méthode ActiveX, c'est donc différent que lorsque c'est appelé directemet par Excel). Il est possible qu'il suffit d'ajouter .value à une (ou plusieurs) ligne de la macro pour forcer le format nombre.

 

Ben64

0 Compliments
Message 8 sur 19
1 299 Visites

Intéressant, merci.

 

Pouvez-vous me donner un exemple où insérer .value ?

Voici une de mes macros :

 

Sub Macro_test()
'
' Macro_test Macro
'

'
Range("A1").Select
ActiveCell.FormulaR1C1 = "Températures et heures de référence obtenues avec :"
Range("A1").Select
Selection.Font.Bold = True
Range("A16:D36").Select
Selection.Cut Destination:=Range("A19:D39")
Range("A18").Select
ActiveCell.FormulaR1C1 = "Tambiante"
Range("B18").Select
ActiveCell.FormulaR1C1 = "Tref"
Range("C18").Select
ActiveCell.FormulaR1C1 = "fref"
Range("D18").Select
ActiveCell.FormulaR1C1 = "Heure d'acquisition"
Range("A18:D18").Select
Selection.Font.Bold = True
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("D18").Select
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("D19").Select
ActiveWindow.SmallScroll Down:=15
Range("D42").Select
ActiveCell.FormulaR1C1 = "Moyenne"
Range("D43").Select
ActiveCell.FormulaR1C1 = "Ecart-type"
Range("D44").Select
ActiveCell.FormulaR1C1 = "9/1/2021"
Range("A44").Select
ActiveCell.FormulaR1C1 = "Sonde de référence SBE35 n°111"
Range("A44").Select
ActiveCell.FormulaR1C1 = "Sonde de référence SBE35 n° 111 corrigée le"
Range("A44").Select
Selection.Font.Bold = True
Range("A45").Select
ActiveCell.FormulaR1C1 = "Offset :"
Range("A46").Select
ActiveCell.FormulaR1C1 = "Pente :"
Range("C45").Select
ActiveCell.FormulaR1C1 = "0.00007"
Range("C46").Select
ActiveCell.FormulaR1C1 = "1.0000043"
Range("C42").Select
ActiveCell.FormulaR1C1 = "=AVERAGE(R[-23]C:R[-3]C)"
Range("C43").Select
ActiveCell.FormulaR1C1 = "=STDEV.S(R[-24]C:R[-4]C)"
Range("C43").Select
Selection.NumberFormat = "0.00"
Range("C42").Select
Selection.NumberFormat = "0.0"
Range("B42").Select
ActiveCell.FormulaR1C1 = "=AVERAGE(R[-23]C:R[-3]C)"
Range("B42").Select
Selection.NumberFormat = "0.0000"
Range("B43").Select
ActiveCell.FormulaR1C1 = "=STDEV.S(R[-24]C:R[-4]C)"
Range("B43").Select
Selection.NumberFormat = "0.0000"
Range("A42").Select
ActiveCell.FormulaR1C1 = "=AVERAGE(R[-23]C:R[-3]C)"
Range("A43").Select
ActiveCell.FormulaR1C1 = "=STDEV.S(R[-24]C:R[-4]C)"
Range("A43").Select
Selection.NumberFormat = "0.000"
Range("A42").Select
Selection.NumberFormat = "0.000"
Range("A43").Select
ActiveWindow.SmallScroll Down:=-6
Range("A42:C43").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("A47").Select
ActiveCell.FormulaR1C1 = "Tref cor"
Range("B47").Select
ActiveCell.FormulaR1C1 = "Ecart-type"
Range("C47").Select
ActiveCell.FormulaR1C1 = "Heure de déb."
Range("D47").Select
ActiveCell.FormulaR1C1 = "Heure de fin"
Range("D48").Select
ActiveWindow.SmallScroll Down:=-24
Range("A19:D40").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("F26").Select
ActiveWindow.SmallScroll Down:=-18
Range("A47:D47").Select
Selection.Font.Bold = True
Range("F43").Select
ActiveWindow.SmallScroll Down:=0
Range("A48").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=R[-3]C[2]+R[-2]C[2]*R[-6]C[1]"
Range("A48").Select
Selection.NumberFormat = "0.0000"
Range("A48:D48").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("B48").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=R[-6]C"
Range("C48").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=R[-29]C[1]"
Range("D48").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=R[-9]C"
Range("D49").Select
ActiveWindow.SmallScroll Down:=-42
End Sub

0 Compliments
Message 9 sur 19
1 291 Visites

Ma suggestion serait de changer NumberFormat pour NumberFormatLocal

 

Ben64

0 Compliments
Message 10 sur 19
1 286 Visites