Concaténer des TextBox pour ouvrir un PDF

[Résolu]
Signaler
Messages postés
51
Date d'inscription
mercredi 6 janvier 2021
Statut
Membre
Dernière intervention
9 août 2021
-
Messages postés
16276
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 septembre 2021
-
Bonjour le Forum,

Je souhaiterais ouvrir un PDF avec la méthode ci dessous.
Chemdoss = "\\mon chemin\" & TextBox2.Text & "\" & TextBox3.Text & "\" & TextBox4.Text & "\" & TextBox5.Text & "\" & TextBox6.Text & "-code.Pdf"
 Process.Start(Chemdoss)


Avec ce code, seule la fenêtre ou se situe le PDF s'ouvre.

Mais si je rentre directement le chemin dans la variable cela fonctionne, le PDF s'ouvre correctement.
Chemdoss = "\\mon chemin\2021\juillet\12\15h\30m\M32-code.Pdf"
  Process.Start(Chemdoss)


Je ne dois pas être loin de la solution...

Merci pour votre aide.

11 réponses

Messages postés
16276
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 septembre 2021
562
De rien, pense à marquer le sujet résolu
Messages postés
7531
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 septembre 2021
127
Bonjour,

2021\juillet\12\15h\30m\M32-code.Pdf"
TextBox2.Text= "2021" 
TextBox3.Text = "juillet"
TextBox4.Text ="12"
TextBox5.Text ="15h"
TextBox6.Text= "30m" 
"-code.Pdf"


il manque M32
Messages postés
51
Date d'inscription
mercredi 6 janvier 2021
Statut
Membre
Dernière intervention
9 août 2021

Bonjour,

MT32 est avec -code.Pdf, "c'est une erreur de frappe" donc M32-code.pdf sont ensemble, cette partie ne change jamais.
Messages postés
7531
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 septembre 2021
127
l'as-tu mis comme cela?

"\M32-code.Pdf"
Messages postés
51
Date d'inscription
mercredi 6 janvier 2021
Statut
Membre
Dernière intervention
9 août 2021

Oui, le \ est bien présent.
"\" & TextBox6.Text & "-M32code.Pdf"


La TestBox6.text contient une lettre et plusieurs numéros par exemple "W123456789".

Le nom du PDF est donc W123456789-M32code.Pdf
Messages postés
7531
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 septembre 2021
127
Dans le post 1 j'ai fait l'attribution de tes TextBox . Il se trouve que le textBox6 contient 30m d'après ce que tu as montré!

C'est là que se situe l'erreur
Messages postés
51
Date d'inscription
mercredi 6 janvier 2021
Statut
Membre
Dernière intervention
9 août 2021

J'ai réalisé plusieurs "beaucoup d'essais", notamment avec différentes appellations et diffèrent chemin pour mes PDF au cas ou, mais en vain.

Par exemples, si j'appelle mon fichier M32-code.Pdf

Chemdoss ="\\mon chemin\2021\juillet\12\15h\30m\M32-code.Pdf"

le pdf s'ouvre, tout comme avec le code ci dessous "pdf avec un chemin diffèrent et une appellation différente".

et si je l'appelle W123456789-M32code.Pdf

Chemdoss = "\\mon chemin\2021\juillet\12\15h\W123456789-M32code.Pdf"

mais si je concatène les Textbox seule le dossier ou est situé le PDF s'ouvre.
Messages postés
7531
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 septembre 2021
127
Tu ne tiens pas compte de ma réponse en post 5.

Tu te contentes de répéter la même chose que ta demande

C'est un dialogue de sourd!

Salut
Messages postés
16276
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 septembre 2021
562
Bonjour

Plusieurs mauvaises pratiques dans ton code et dans "ta questions"

d'abord et avant tout, quand tu viens poser des questions et que tu ne tiens pas compte des réponses apportées, ça donne envie de ne plus répondre aux questions suivantes.

En février je t'ai dit qu'il est important de nommer ses contrôles https://codes-sources.commentcamarche.net/forum/affich-10104592-cherche-solution-pour-avoir-moins-de-if#1 je n'ai pas fouillé ton historique complet mais il me semble que cela t'a était au moins une fois par un autre.

Le problème avec les mauvaises pratiques c'est que si on s'y habitue, on a du mal à s'en défaire.
Second problème avec les mauvaises pratiques, c'est que si on en fait une pourquoi ne pas en faire une autre.

La 2eme mauvaise pratique dans le code, c'est de façon générale "ça se fait en vb6 ou en vba alors je le fais en .net". Si c'était le même langage pourquoi Microsoft se serait fait ch**** à tout réinventer?

En particulier ici, concatèner une string avec des &. En vba et vb6 y'avait pas d'autre solution ok, mais le hic c'est que souvent (et on dirait que c'est le cas ici vu ce que tu as posté) on s'emmêle les pinceaux et on n'arrive pas au résultat attendu. Je reviendrai aux bonnes façons de faire ensuite.

Pour vérifier, il suffit de mettre un point d'arrêt à la ligne d'après et de vérifier le contenu de la variable. Et c'est là qu'apparait la mauvaise pratique de la question, puisqu'à aucun moment tu ne mentionnes le résultat de la concaténation.
  • Option 1 : c'est le bon résultat, tu n'as pas trouvé ça pertinent de le préciser, mais le lecteur peut se poser la question
  • Option 2 : t'as pas vérifié, (c'est pourtant le B A BA du déboggage), avant même de venir ici, c'est ce qu'il faut faire et je t'enjoins donc à le faire et revenir nous dire le résultat


Pour construire une string à partir de plusieurs éléments, tu peux utiliser
  • string.Concat

        Dim puht As Double = 1.19999999
        Dim q As Integer = 5
        Dim reduc As Double = 10

        Dim texte1 As String = String.Concat("Le prix unitaire hors taxe de cet objet est de ", puht.ToString(), ".", Environment.NewLine, "Nous en commandons ", q.ToString(), ", ce qui fait ", (puht * q).ToString(), ".", Environment.NewLine, "On applique une réduction de ", reduc.ToString(), "%, ce qui fait ", Math.Round((puht * q * (100 - reduc) / 100), 2).ToString(), " €")

        Console.WriteLine("Texte 1")
        Console.WriteLine(texte1)
        Console.WriteLine(" ")

Je te l'accorde c'est pas beaucoup plus lisible et simple à s'y retrouver.
  • un peu mieux, un StringBuilder

        Dim texte2 As StringBuilder = New StringBuilder("Le prix unitaire hors taxe de cet objet est de ")
        texte2.Append(puht)
        texte2.AppendLine(".")
        texte2.Append("Nous en commandons ")
        texte2.Append(q)
        texte2.Append(", ce qui fait ")
        texte2.Append(puht * q)
        texte2.AppendLine(".")
        texte2.Append("On applique une réduction de ")
        texte2.Append(reduc)
        texte2.Append("%, ce qui fait ")
        texte2.Append(Math.Round((puht * q * (100 - reduc) / 100), 2))
        texte2.Append(" €")

        Console.WriteLine("Texte 2")
        Console.WriteLine(texte2.ToString())
        Console.WriteLine(" ")

Là c'est clair, facile à débogguer mais un peu long à écrire
  • beaucoup mieux string.format

        Dim texte3 As String = String.Format("Le prix unitaire hors taxe de cet objet est de {0}.
Nous en commandons {1}, ce qui fait {2}.
On applique une réduction de {3} %, ce qui fait {4:C}",
        puht,
        q,
        puht * q,
        reduc, puht * q * (100 - reduc) / 100)

        Console.WriteLine("Texte 3")
        Console.WriteLine(texte3.ToString())
        Console.WriteLine(" ")

Là tu voies, on écrit le texte presque en clair, en signifiant les balises où seront placées les valeurs avec les accolades, on peut même spécifier un formatage (4:C pour cet exemple)
On peut très bien mettre toutes les variables sur une seule ligne comme ça

        Dim texte3 As String = String.Format("Le prix unitaire hors taxe de cet objet est de {0}.
Nous en commandons {1}, ce qui fait {2}.
On applique une réduction de {3} %, ce qui fait {4:C}", puht, q, puht * q, reduc, puht * q * (100 - reduc) / 100)

        Console.WriteLine("Texte 3")
        Console.WriteLine(texte3)
  • Enfin le top du top, si tu travailles avec Visual Studio 2019 (p'tet 2017 mais pas sûr), le string.Format nouveau

        Dim texte4 As String = String.Format($"Le prix unitaire hors taxe de cet objet est de {puht}.
Nous en commandons {q}, ce qui fait {puht * q}.
On applique une réduction de {reduc} %, ce qui fait {puht * q * (100 - reduc) / 100:C}")

        Console.WriteLine("Texte 4")
        Console.WriteLine(texte4)

Là tu mets directement les variables dans le texte.

En exécutant ces différents codes, voilà ce qui s'affiche dans ma console

Texte 1
Le prix unitaire hors taxe de cet objet est de 1,19999999.
Nous en commandons 5, ce qui fait 5,99999995.
On applique une réduction de 10%, ce qui fait 5,4 €

Texte 2
Le prix unitaire hors taxe de cet objet est de 1,19999999.
Nous en commandons 5, ce qui fait 5,99999995.
On applique une réduction de 10%, ce qui fait 5,4 €

Texte 3
Le prix unitaire hors taxe de cet objet est de 1,19999999.
Nous en commandons 5, ce qui fait 5,99999995.
On applique une réduction de 10 %, ce qui fait 5,40 €

Texte 4
Le prix unitaire hors taxe de cet objet est de 1,19999999.
Nous en commandons 5, ce qui fait 5,99999995.
On applique une réduction de 10 %, ce qui fait 5,40 €


T'as vu le format :C arrondi, mets le 0 significatif et le symbole monétaire correspondant à la culture de mon PC.

Je t'invite à lire https://docs.microsoft.com/fr-fr/dotnet/standard/base-types/standard-numeric-format-strings pour faire un tour d'horizon de tous les formats possibles

Mais ton problème concerne un chemin, et pour construire un chemin il y' a un outil dédié
        Dim racine As String = "\\Reseau"
        Dim d1 As String = "dossier1"
        Dim d2 As String = "dossier2"
        Dim f As String = "fichier.txt"

        Dim texte5 As String = Path.Combine(racine, d1, d2, f)


Ce qui donne

Texte 5
\\Reseau\dossier1\dossier2\fichier.txt


Et là c'est simple et clair non?
En plus t'es sûr et certain de ne pas te retrouver avec une variable qui ressemble à

"\\mon chemin\2021\juillet\12\ & TextBox5.Text & \30m\M32-code.Pdf"


Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Messages postés
51
Date d'inscription
mercredi 6 janvier 2021
Statut
Membre
Dernière intervention
9 août 2021

Merci pour ces explications, à chaque fois le voile se lève un peu plus.
Je vais incorporer le code ci dessous et à la fin si tout se passe bien, le code finira par Process.Start(texte5).

 Dim racine As String = "\\Reseau"
        Dim d1 As String = "dossier1"
        Dim d2 As String = "dossier2"
        Dim f As String = "fichier.txt"

        Dim texte5 As String = Path.Combine(racine, d1, d2, f)
Messages postés
16276
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 septembre 2021
562
à chaque fois le voile se lève un peu plus.


D'un autre coté, ça fait 8 mois que tu es inscrit ici et dès le premier message il t'a été conseillé d'apprendre les bases en suivant un cours pour débutant.

Ce que je t'ai montré là est dans ce cours.

Ça fait donc 8 mois moins une semaine que tu devrais le connaitre.
Messages postés
51
Date d'inscription
mercredi 6 janvier 2021
Statut
Membre
Dernière intervention
9 août 2021

En 8 mois j'ai beaucoup appris, et coder de petite choses sympas, mais c'est vrai qu'il me reste encore pas mal à découvrir/tester.

Sinon voici le code que j'ai testé, malheureusement j'arrive au même résultat.
 Dim racine As String = "\\monchemin\"
            Dim D1 As String = TextBox2.Text
            Dim D2 As String = TextBox3.Text
            Dim D3 As String = TextBox4.Text
            Dim D4 As String = TextBox5.Text        
            Dim F As String = "W123456789-M32code.Pdf"

            Dim Texte5 As String = Path.Combine(racine, D1, D2, D3, D4, F)
            
            Process.Start(Texte5)


ou encore avec celui ci, même résultat aussi...
 Dim racine As String = "\\monchemin\"
            Dim D1 As String = TextBox2.Text
            Dim D2 As String = TextBox3.Text
            Dim D3 As String = TextBox4.Text
            Dim D4 As String = TextBox5.Text        
            Dim F As String = "W123456789-M32code.Pdf"

            Dim Texte5 As String = Path.Combine(racine, D1, D2, D3, D4, F)
             myProcess.StartInfo.FileName = "acroRd32.exe"

myProcess.StartInfo.Arguments = "/A ""page=1=OpenActions"" /n Texte5"
            myProcess.Start()
Messages postés
16276
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 septembre 2021
562
ET donc c'est quoi le contenu de texte5?
Messages postés
51
Date d'inscription
mercredi 6 janvier 2021
Statut
Membre
Dernière intervention
9 août 2021

Le contenu de Texte5 est le chemin complet qui permet d'accéder au Pdf demander.

L'utilisateur saisi par exemple un lieu et une date dans des Combobox "prérempli donc" puis il accède au dossier des archives qu'il souhaite consulter.
Ca c'est pour le code de base qui fonctionne très bien, mais je souhaite aller plus loin en proposant une ouverture du Pdf à consulter.
J'ai donc rajouté une Textbox ou il est possible de saisir le nom du Pdf et vous connaissez la suite.

Les archives sont bien en réseau, d'où le "\\monchemin\".

Merci pour votre aide.
Messages postés
16276
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 septembre 2021
562 >
Messages postés
51
Date d'inscription
mercredi 6 janvier 2021
Statut
Membre
Dernière intervention
9 août 2021

Je ne t’ai pas demandé ce qu’il y a en théorie dans la variable mais ce qui y est vraiment.
Dans mon premier message je t’ai expliqué vérifier est le b a ba du déboggage.
Soit tu postes le contenu réel de la variable et in pourra avancer soit tu arrêtes de nous faire perdre du temps
Messages postés
209
Date d'inscription
mardi 4 juillet 2017
Statut
Membre
Dernière intervention
29 juillet 2021
7
Salut à tous,

Pour programmer, il faut avoir les idées claires...
Je ne suis pas un expert, mais sur le nom sur le dernier exemple, on perd tous les backslashs du nom distant réseau ... ??? !

Pour un fichier local, "c:\mondossier\..." est obligatoire je pense.

C'est pas des slashs (/) pour un fichier distant réseau ?
Messages postés
16276
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 septembre 2021
562
Bonjour

Dans sa question il est écrit

Mais si je rentre directement le chemin dans la variable cela fonctionne, le PDF s'ouvre correctement.
Chemdoss = "\\mon chemin\2021\juillet\12\15h\30m\M32-code.Pdf"
Process.Start(Chemdoss)


donc ce n'est manifestement pas un fichier local.
C'est pas des slashs (/) pour un fichier distant réseau ?
et non


Quand à
mais sur le nom sur le dernier exemple, on perd tous les backslashs du nom distant réseau ... ??? !
la réponse est dans le message 7

Pour programmer, il faut avoir les idées claires...
je suis d'accord, mais pour intervenir il faut lire la discussion
Messages postés
209
Date d'inscription
mardi 4 juillet 2017
Statut
Membre
Dernière intervention
29 juillet 2021
7 >
Messages postés
16276
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 septembre 2021

Salut Whismeril,

La solitude et la qualité médiocre de ce forum semble éroder ta patience et ton fairplay.

Entre questions stupides et mal documentées, ton ton professoral va finir de faire fuir les programmeurs amateurs.

Bon, je te laisse avec cette question (encore une) non résolue...

Bonne chance avec tes élèves.
Messages postés
16276
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 septembre 2021
562 >
Messages postés
209
Date d'inscription
mardi 4 juillet 2017
Statut
Membre
Dernière intervention
29 juillet 2021

Oui c’est vrai ton message et la dernière réponse de tempus m’ont un peu agacés ce matin.

D’un autre côté, et c’est le début de ma première réponse ici, tempus pose des questions et ne tient pas compte des réponses, ce qui encore est le cas de son message 15. Ça en soit c’est irritant.

Et il t’arrive parfois d’intervenir à cote de la plaque quand, à priori, tu lis le sujet en diagonale. Pourtant tu peux aussi être très pertinent quand, à priori, tu prends le temps de lire l’ensemble.
Qu’on ait des avis techniques différents, c’est une chose. Mais que tu écrives une bêtise par phrase alors que le fil contient tous les éléments qui montrent le contraire, ça aussi ça irrite.

J’aurais sans doute du ne pas répondre à chaud
Messages postés
51
Date d'inscription
mercredi 6 janvier 2021
Statut
Membre
Dernière intervention
9 août 2021

Problème résolu, merci à vous deux pour votre aide.

il y avait deux erreurs, un espace et une barre \ en trop dans le chemin....

Messieurs, un bon coup de pied au c** n'a jamais fait de mal ! dans mon cas cela m'a permis de prendre le temps de relire le poste de Whismeril et ainsi d'apprendre une autre approche de coder.
Néanmoins, je commence à me rendre compte que pour arriver au même résultat il y a pas mal de méthodes de codage différentes.

Bonne journée à vous et encore merci !