Rapatrier variable VBA vers C#.

fanlabise31 Messages postés 3 Date d'inscription jeudi 12 décembre 2013 Statut Membre Dernière intervention 13 décembre 2013 - 12 déc. 2013 à 13:01
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 - 13 déc. 2013 à 13:18
Bonjour,
J'ai créé une macro Word avec un userform et une textbox ou je rentre le chemin d'un fichier.
Ensuite via la commande Shell j'éxecute un autre programme que j'ai développé en C# (Visual studio 2010).
Mon problème est que je ne trouve pas le moyen de récupérer la valeur de la TextBox de ma userform VBA dans mon autre programme.
Déjà est ce que cela est possible? Peut être en passant par le clipboard?

Cordialement

3 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
12 déc. 2013 à 13:28
Bonjour,

Comment passes-tu de VBA à C# ?
En lançant une commande Shell ?

Si oui, essayes de passer le contenu de la TextBox par argument dans la ligne de commande.
0
fanlabise31 Messages postés 3 Date d'inscription jeudi 12 décembre 2013 Statut Membre Dernière intervention 13 décembre 2013
12 déc. 2013 à 14:31
Bonjour,

En fait je lance un autre programme que j'ai développé en C# par la commande Shell de VBA. Cela fonctionne trés bien.
Mais j'ai résolu mon problème en passant par le presse papier.

VBA:

Dim strContenupressepapier$
Dim dobPressepapiers As DataObject

strContenupressepapier = "le contenu";

Set dobPressepapiers = New DataObject
dobPressepapiers.SetText strContenupressepapier
dobPressepapiers.PutInClipboard

C#:

Cliboard.Getdata

Ca marche impeccable!!!
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
12 déc. 2013 à 19:41
En en essayant :
Shell "MonProgram.exe MonParametre"
Puis dans ton code C#, tu récupères les arguments de la ligne de commande.
?
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
12 déc. 2013 à 20:32
Pareil, et ça évitera qu'un autre processus vide ou remplisse ton presse papier au mauvais moment.
0
fanlabise31 Messages postés 3 Date d'inscription jeudi 12 décembre 2013 Statut Membre Dernière intervention 13 décembre 2013
13 déc. 2013 à 12:22
Bonjour et merci pour l'intérêt que vous portez à ma question. Récupérer les arguments dans la ligne de commande était ma première idée.

VBA:
Dim ma variable as string
mavariable=textbox1.value
Shell monprog.exe, mavariable

C#

private void monprog(mavariable as string)


J'avais quelque chose comme ça... Mais ça n'a pas marché


Je pense que côté VBA la méthode est correcte. Mais étant novice en C# je ne connais pas la syntaxe.
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
Modifié par Whismeril le 13/12/2013 à 13:19
Bonjour, c'est dans l'idée.

Si ton programme est en Winform, voici un exemple, tiré d'un tuto de developez.com, pour ouvrir un fichier dont le chemin est passé en paramètre à l'application.

private void MonAppli_Load(object sender, EventArgs e)//à mettre dans l'évenement Load du formulaire principal de ton application
{
    try
    {
        //si le chemin du fichier est passé en argument
        if (Environment.GetCommandLineArgs().Length == 2)
        {
            MessageBox.Show("Chargement du fichier: " + Environment.GetCommandLineArgs()[1]);
            string fileContents;
            //lecture du contenu du fichier
            using (System.IO.StreamReader sr = new System.IO.StreamReader(Environment.GetCommandLineArgs()[1]))
            {
                fileContents = sr.ReadToEnd();
            }
            //on met le contenu du fichier dans la textbox
            textBox1.Text = fileContents;
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Erreur lors du chargement: " + ex.Message);
    }
}


Si ton programme est une application console, même principe, mais dans le Main().


Penser aux balises de coloration syntaxique: bouton <>, préciser le langage :<code csharp>.
Quand la solution est trouvée, mettre la discussion Résolue.
0
Rejoignez-nous