Erreur lors de l'execution d'une macro au demarrage d'excel
Bonjour,
Je suis nouveau sur ce forum et j'aimerais avoir un petit coup de pouce. Je travaille sur un projet ou l'on doit récuperer un signal tout ou rien (0 ou 1) d'un automate sur une feuille excel via liaison DDE. Le but est de générer un CSV toutes les heures et donc de pouvoir exploiter ces données par la suite.
On veut que cela soit automatiser. J'ai donc programmer 3 programme en .bat pour cela (Je sais que c'est hors du sujet du forum mais je les mets au cas ou).
BAT
Code:
1 2 3 4 5 6 7 8
| @ECHO OFF
start "" "C:\Users\f.chaloin-externe\Desktop\bat1.bat"
start "" "C:\Users\f.chaloin-externe\Desktop\bat2.bat"
exit |
BAT1
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| @ECHO OFF
"C:\Users\f.chaloin-externe\Desktop\Original - Copie1.csv"
rem/cmd/macro1
remC:\Program Files (x86)\Microsoft Office\Office14\XLSTART\Personal.xlam
rem "C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE"
exit |
BAT2
Code:
1 2 3 4 5 6 7 8
| @ECHO OFF
ping -n 15 localhost
TASKKILL /f /T /im excel.exe
exit |
Voila ma macro:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| Sub Macro1()
Application.AskToUpdateLinks = False
ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources
Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=CoDeSys|'C:\Program Files (x86)\WAGO Software\CoDeSys V2.3\Projects\wago.PRO'!PLC_PRG.H1"
Range("A2").Select
ActiveCell.FormulaR1C1 = _
"=CoDeSys|'C:\Program Files (x86)\WAGO Software\CoDeSys V2.3\Projects\wago.PRO'!PLC_PRG.H2"
Range("A3").Select
ActiveCell.FormulaR1C1 = _
"=CoDeSys|'C:\Program Files (x86)\WAGO Software\CoDeSys V2.3\Projects\wago.PRO'!PLC_PRG.H3"
Range("A4").Select
ActiveCell.FormulaR1C1 = _
"=CoDeSys|'C:\Program Files (x86)\WAGO Software\CoDeSys V2.3\Projects\wago.PRO'!PLC_PRG.H4"
Range("A5").Select
ActiveCell.FormulaR1C1 = _
"=CoDeSys|'C:\Program Files (x86)\WAGO Software\CoDeSys V2.3\Projects\wago.PRO'!PLC_PRG.H5"
Range("A6").Select
ActiveCell.FormulaR1C1 = _
"=CoDeSys|'C:\Program Files (x86)\WAGO Software\CoDeSys V2.3\Projects\wago.PRO'!PLC_PRG.H6"
Range("A7").Select
ActiveCell.FormulaR1C1 = _
"=CoDeSys|'C:\Program Files (x86)\WAGO Software\CoDeSys V2.3\Projects\wago.PRO'!PLC_PRG.H7"
Range("A8").Select
ActiveCell.FormulaR1C1 = _
"=CoDeSys|'C:\Program Files (x86)\WAGO Software\CoDeSys V2.3\Projects\wago.PRO'!PLC_PRG.H8"
Range("A9").Select
Range("A1,A1,A2,A3,A4,A6,A5,A7,A8").Select
Range("A8").Activate
Selection.NumberFormat = "@"
'Application.Wait Now + TimeValue("00:00:05")
If Dir("Y:\DMS\Chaloin_Florent\Recuperation\*.csv") <> "" Then
Kill "Y:\DMS\Chaloin_Florent\Recuperation\*.csv"
End If
Range("A1,A2,A3,A4,A5,A6,A7,A8").Select
Range("A8").Activate
Selection.Copy
Workbooks.Add
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Dim Chemin As String, Fichier As String
Chemin = "Y:\DMS\Chaloin_Florent\Recuperation\"
'Ajoute la date du jour et l'heure dans le nom du fichier
Fichier = "Données " & Format(Date, "dd-mm-yyyy") & "_" & Format(Time, "hh-mm-ss") & ".csv"
ActiveWorkbook.SaveAs Filename:=Chemin & Fichier, FileFormat:= _
xlCSV, _
CreateBackup:=False
End Sub |
Et donc si je veux exécuter ma macro au démarrage d'excel en la mettant dans le workbook, la macro beug des la première instruction quel qu'elle soit. Je fait debogage et je demarre la macro manuellement et sa marche. Je pense que c'est parce que la macro s'execute avant l'ouverture de la feuille excel.
Voila si quelqu'un as une petite idée même des conseils et dites moi si mon post est incomplet merci beaucoup.
Commande qui actualise un lien DDE sous VBA Excel
J'ouvre cette discussion car ce problème n'as pas l'air d'avoir déja été traiter. Le probleme est de récuperer des valeurs sur un automate va liaison DDE. J'aimerais donc une commande qui permette d'activer tous mes liens DDE mais au lancement automatique de la macro dans le workbook. Voici mon code
Sub Macro1()
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| Application.AskToUpdateLinks = False
ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources
Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=CoDeSys|'C:\Program Files (x86)\WAGO Software\CoDeSys V2.3\Projects\wago.PRO'!PLC_PRG.H1"
Range("A2").Select
ActiveCell.FormulaR1C1 = _
"=CoDeSys|'C:\Program Files (x86)\WAGO Software\CoDeSys V2.3\Projects\wago.PRO'!PLC_PRG.H2"
Range("A3").Select
ActiveCell.FormulaR1C1 = _
"=CoDeSys|'C:\Program Files (x86)\WAGO Software\CoDeSys V2.3\Projects\wago.PRO'!PLC_PRG.H3"
Range("A4").Select
ActiveCell.FormulaR1C1 = _
"=CoDeSys|'C:\Program Files (x86)\WAGO Software\CoDeSys V2.3\Projects\wago.PRO'!PLC_PRG.H4"
Range("A5").Select
ActiveCell.FormulaR1C1 = _
"=CoDeSys|'C:\Program Files (x86)\WAGO Software\CoDeSys V2.3\Projects\wago.PRO'!PLC_PRG.H5"
Range("A6").Select
ActiveCell.FormulaR1C1 = _
"=CoDeSys|'C:\Program Files (x86)\WAGO Software\CoDeSys V2.3\Projects\wago.PRO'!PLC_PRG.H6"
Range("A7").Select
ActiveCell.FormulaR1C1 = _
"=CoDeSys|'C:\Program Files (x86)\WAGO Software\CoDeSys V2.3\Projects\wago.PRO'!PLC_PRG.H7"
Range("A8").Select
ActiveCell.FormulaR1C1 = _
"=CoDeSys|'C:\Program Files (x86)\WAGO Software\CoDeSys V2.3\Projects\wago.PRO'!PLC_PRG.H8"
If Dir("Y:\DMS\Chaloin_Florent\Recuperation\*.csv") <> "" Then
Kill "Y:\DMS\Chaloin_Florent\Recuperation\*.csv"
End If
Dim Chemin As String, Fichier As String
Chemin = "Y:\DMS\Chaloin_Florent\Recuperation\"
'Ajoute la date du jour et l'heure dans le nom du fichier
Fichier = "Données " & Format(Date, "dd-mm-yyyy") & "_" & Format(Time, "hh-mm-ss") & ".csv"
ActiveWorkbook.SaveAs Filename:=Chemin & Fichier, FileFormat:= _
xlCSV, _
CreateBackup:=False
End Sub |
En effet, la mise en place de ces liens DDE se fait après la fin de la macro ce qui a pour effet d'enregistrer des #REF au lieu de nos valeurs. D'ailleurs manuellement cela marche donc il n'y as pas de soucis de format ou autre. Merci de votre aide par avance.