Concaténer des TextBox pour ouvrir un PDF

Résolu
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 - 28 juil. 2021 à 17:22
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 - 29 juil. 2021 à 16:13
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

Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
29 juil. 2021 à 16:13
De rien, pense à marquer le sujet résolu
1
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
28 juil. 2021 à 17:47
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
0
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
28 juil. 2021 à 17:57
Bonjour,

MT32 est avec -code.Pdf, "c'est une erreur de frappe" donc M32-code.pdf sont ensemble, cette partie ne change jamais.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
Modifié le 28 juil. 2021 à 18:12
l'as-tu mis comme cela?

"\M32-code.Pdf"
0
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
28 juil. 2021 à 18:22
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
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
28 juil. 2021 à 18:32
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
28 juil. 2021 à 18:51
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.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
28 juil. 2021 à 19:05
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
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
Modifié le 28 juil. 2021 à 18:59
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"


0
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
28 juil. 2021 à 20:32
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)
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
28 juil. 2021 à 21:32
à 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.
0
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
28 juil. 2021 à 21:59
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()
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
28 juil. 2021 à 22:30
ET donc c'est quoi le contenu de texte5?
0
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
29 juil. 2021 à 08:15
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.
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656 > Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022
29 juil. 2021 à 08:31
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
0
JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 7
Modifié le 29 juil. 2021 à 02:30
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 ?
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
29 juil. 2021 à 07:20
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
0
JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 7 > Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024
29 juil. 2021 à 13:40
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.
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656 > JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023
29 juil. 2021 à 14:59
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
0
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
29 juil. 2021 à 16:01
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 !
0
Rejoignez-nous