IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Commande qui actualise un lien DDE sous VBA Excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 8
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonjour,

    Dans les scripts le seul élément Excel pouvant contenir des macros en en commentaire .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rem C:\Program Files (x86)\Microsoft Office\Office14\XLSTART\Personal.xlam
    Les macros complémentaires .xlam ne sont pas associée à un classeur. Le problème doit venir de là.
    Donc place la macro dans un fichier .xlsm, et ouvre ce fichier depuis le script.

    Les lignes de codes suivantes ne sont pas très jolies
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ping -n 15 localhost
    TASKKILL /f /T /im excel.exe
    Le plus simple serait d'ouvrir le fichier via batch.
    Mais une fois que le fichier est ouvert, tu peux faire des pauses et fermer Excel depuis VBA.
    (sans tuer la tâche ...) .

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 8
    Par défaut
    Merci de votre réponse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rem C:\Program Files (x86)\Microsoft Office\Office14\XLSTART\Personal.xlam
    J'ai essayer sous le format xslm et xlsb et cela ne marche pas c'est pour ça que je préfère lancer ma macro via le workbook.

    Oui je sais mes lignes sont moches je suis débutant dans ces deux langages mais du moment que sa marche cela conviendra

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ping -n 15 localhost
    TASKKILL /f /T /im excel.exe
    La tempo doit se faire sous DOS car cela laisse tout simplement le temps a la macro de s'executer sachant que l'on importe des données dynamiques. En effet la macro suspend également tout excel ce qui ne lui permet pas d'accéder au chemin DDE.
    Pour la fermeture auto j'ai eu du mal a obtenir un résultat adaptable n'engendrant pas d'erreur.

    Sinon j'avais penser a activé la simulation clavier sous .batch car finalement je dois faire un "entrer" pour le débogage et F5 qui est le raccourci pour le lancement de la macro. Il y a sendkeys, skeys et surtout Autoit 3 qui revient souvent pour faire cela mais je ne sais pas lequel serait le mieux. Pouvez vous me conseillez?

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonsoir,

    J'ai essayer sous le format xslm et xlsb et cela ne marche pas c'est pour ça que je préfère lancer ma macro via le workbook.
    Quel est ce workbook ?
    Comme dit, dans les scripts il n'y a aucune ligne qui correspond à l'ouverture d'un workbook.

    Oui je sais mes lignes sont moches je suis débutant dans ces deux langages mais du moment que sa marche cela conviendra
    Si tu veux apprendre les choses, mieux vaut essayer de faire marcher les choses comme elles devraient,
    plutôt que se contourner les fonctionnement au premier obstacle.


    Par exemple pour lancer l'ouverture d'un classeur nommé Classeur1.xlsm se trouvant dans le même dossier que le batch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo OFF
    echo Ouverture du fichier excel classeur1.xlsm ...
    start classeur1.xlsm
    echo fichier classeur1.xlsm ouvert!
    Et si dans ce classeur Classeur1.xlsm on veut exécuter une macro dès l'ouverture du classeur,
    il suffit de placer dans la partie ThisWorbook de l'éditeur VBA, une routine Workbook_Open().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Workbook_Open()
        Call MsgBox(ActiveWorkbook.Name & " ouvert!" & vbLf & "Lorsque tu cliqueras sur Ok, Excel se fermera")
        Application.Quit
    End Sub
    Ensuite :
    - si tu as des messages parce que le classeur n'est pas enregistré, tu peux fermer le classeur sans l'enregistrer ThisWorkbook.Close False.
    - si tu as des messages d'avertissement lié au risque perte d'infos pour une conversion à un format texte, tu peux masquer les alertes avec un
    Application.DisplayAlerts = False.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 8
    Par défaut
    Et si dans ce classeur Classeur1.xlsm on veut exécuter une macro dès l'ouverture du classeur,
    il suffit de placer dans la partie ThisWorbook de l'éditeur VBA, une routine Workbook_Open().
    Oui cette partie la est faite et j'ai placer ma macro1 dans module 1. Le démarrage automatique se fait correctement sauf que cela bloque a la premiere ligne de code concernant la feuille1 qui na pas encore été générer.

    Par exemple pour lancer l'ouverture d'un classeur nommé Classeur1.xlsm se trouvant dans le même dossier que le batch :
    Je ne savais pas que l'on devait avoir les deux dans le même dossier pour cette commande merci je note. Je precise que ma macro est externe en.xlam cela change quelque chose? merci

    "C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE"
    Le souci est lorsque je veux faire cette commande sous dos, le tableau que je genere m'affiche #REF et l'enregistre comme sa alors qui si je fait cette commande:

    "C:\Users\f.chaloin-externe\Desktop\Original - Copie1.csv"

    là la récupération de données marche. J'ouvre donc un csv vide mais préexistant. Et la justement ma macro s'execute avant l'ouverture de ma feuille1 (je le constate lors du message d'erreur).

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Salut,

    Le démarrage automatique se fait correctement sauf que cela bloque a la premiere ligne de code concernant la feuille1 qui na pas encore été générer.
    Dans un fichier xlam, il n'y aucune feuille.
    Donc ce n'est pas qu'elle n'est pas encore générée, c'est qu'elle ne sera jamais générée sans code explicite qui créé un nouveau classeur.
    (ou bien si Excel est lancé depuis l'ouverture d'un classeur ou autre fichier)

    Comme j'essaye de l'expliquer depuis 2 posts, un fichier xlam ne contient aucune feuille. Ce n'est donc pas un WorkBook classique.
    C'est juste un fichier destiné à accueillir des macros complémentaires.

    Donc pourquoi ne pas mettre ta macro dans un fichier xlsm (un classeur avec feuille et contenant des macros),
    plutôt que de mettre mettre la macro dans un xlam et qui plante parce qu'il n'y a pas de feuille existant.
    Et si vraiment le comportement souhaité est d'utiliser les macros complémentaire,
    pourquoi ne pas ouvrir un nouveau classeur depuis la macro Workbooks.Add, avant de lancer le reste du traitement.
    Plutôt que d'utiliser un fichier csv, qui si j'ai bien compris ne sert pas.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 8
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/11/2014, 11h02
  2. Liens DDE Access vers Excel
    Par PapouDomi dans le forum Access
    Réponses: 5
    Dernier message: 16/03/2007, 19h36
  3. [VBA-E] Comment créer un tableau sous vba excel
    Par jeanpierreco dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/01/2007, 10h52
  4. Arc de cercle sous VBA excel?
    Par fredieuric dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/11/2006, 14h58
  5. ptit probleme combobox sous vba/excel
    Par bandito dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/10/2006, 10h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo