[AIDE] Fonction AppPath

Résolu
NeriXs
Messages postés
116
Date d'inscription
lundi 4 mai 2015
Statut
Membre
Dernière intervention
18 août 2020
- 27 mai 2015 à 13:28
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 29 mai 2015 à 11:56
Bonjour,
Je travaille avec des fichiers dans mon code et dois les appeler depuis plusieurs Forms .
Pour ce fait, j'ai créé un module, mais je ne sais pas si c'est LA méthode à employer.
Pourrais-je avoir votre avis ?

Public Function FtpAppPath() As String
Dim sAppPath As String
sAppPath = App.Path
sAppPath = sAppPath & "\Identity.txt"
FtpAppPath = sAppPath
End Function

Public Function PrescribCmdAppPath() As String
Dim oAppPath As String
oAppPath = App.Path
oAppPath = oAppPath & "\PrescribCmd.txt"
PrescribCmdAppPath = oAppPath
End Function

Public Function BatAppPath() As String
Dim hAppPath As String
hAppPath = App.Path
hAppPath = hAppPath & "\GoCmd.bat"
BatAppPath = hAppPath
End Function

9 réponses

Whismeril
Messages postés
17474
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
1 juillet 2022
600
27 mai 2015 à 16:13
Bonjour

c'est une solution, mais tu sembles aimer les lignes qui ne servent à rien...

Public Function FtpAppPath() As String
    Dim sAppPath As String
    sAppPath = App.Path
    sAppPath = sAppPath & "\Identity.txt"
    FtpAppPath = sAppPath
End Function

Se réduit
Public Function FtpAppPath() As String
    FtpAppPath = App.Path & "\Identity.txt"
End Function


Tu peux aussi, dans la partie déclaration de ton module, mettre des variable globale, que tu initialises dans le load de ta première fom.
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
27 mai 2015 à 16:45
Bonjour,
On peut surtout se demander à quoi sert cette fonction sans paramètre.
Elle ne doit finalement que retourner App.Path & "\Identity.txt" ! ce que contiendrait n'importe quelle variable, sans appel d'aucune fonction ...
Idem pour les deux autres !
0
Whismeril
Messages postés
17474
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
1 juillet 2022
600 > ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018

27 mai 2015 à 17:19
Salut, d'ou ma seconde proposition
Tu peux aussi, dans la partie déclaration de ton module, mettre des variable globale, que tu initialises dans le load de ta première fom.
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
27 mai 2015 à 17:51
Bonjour, Whismeril,
même pas, pour si peu. Car écrire toto (comme variable globale), ne fait rien gagner par rapport à (exemple) : app.path & "machin" (y compris si utilisé plusieurs fois). Au contraire : mobilisation d'un peu (un tout petit chouia, il est vrai) de mémoire alors que app.path est déjà en mémoire de VB.
0
Whismeril
Messages postés
17474
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
1 juillet 2022
600 > ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018

27 mai 2015 à 18:34
C'est pas faux
0
NeriXs
Messages postés
116
Date d'inscription
lundi 4 mai 2015
Statut
Membre
Dernière intervention
18 août 2020

Modifié par NeriXs le 28/05/2015 à 08:33
Bonjour,

Suite à vos remarques justifiées concernant les incohérences que je peux vous exposer parfois, je tenais à vous apporter les faits suivants:
Je suis étourdie, je suis souvent trop pressé "saute sur un petit bout de code sans prendre la réflexion nécessaire) mais, surtout venant d'une profession totalement étrangère à la programmation.
En reclassement dans un hôpital au service informatique "assistance et maintenance matériel" j'essaie de me simplifier le quotidien en automatisant certaine tâche.
Alors, je vous demanderais juste un peu d'indulgence et de pédagogie, ne me guillotiné pas tous de suite.
Pour ma part je vais tâcher de prendre un peu plus de recul sur ce que je vous expose ou répond.

Pour revenir au sujet de ce poste:

L'utilisation d'une fonction dans un module m'a semblé le moyen le plus simple pour faire appel à mes fichiers depuis plusieurs Forms.
J'avais essayé avec une Sub public dans mon module.

Public Sub showPath(FtpAppPath As String)
FtpAppPath = App.path & "\Identity.txt"
End Sub


Puis un appel depuis le Load de ma Form

Private Sub Form_Load()
Call showPath(App.path)
End Sub


Le résultat voulu était là mais, après comment utiliser cet appel?
"ouvrire, ecrire ex...."
0
Whismeril
Messages postés
17474
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
1 juillet 2022
600
28 mai 2015 à 13:38
Bonjour si tu ne veux pas pas réécrire 30 fois cette ligne dans ton programme, ce que je comprends, je fais pareil, la variable globale est plus indiquée que la fonction.
En effet la fonction est sensée fournir un résultat, la tu stockes une données.

Ensuite pour ce qui est est d'ouvrir, écrire ect dans un fichier, c'est une autre question, qui devrait faire l'objet d'un autre post, mais après être aller faire un tour dans les posts, je suis sûr qu'il y a des exemples.
0
NeriXs
Messages postés
116
Date d'inscription
lundi 4 mai 2015
Statut
Membre
Dernière intervention
18 août 2020

Modifié par NeriXs le 28/05/2015 à 15:02
Bonjour,
Alors dans mon module:

Public FtpAppPath As String


Puis dans ma form Load

FtpAppPath = App.Path & "\Identity.txt"


Puis traitement:

Open FtpAppPath For Output As # 
Print #1, "blabla"
Close #1
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
28 mai 2015 à 17:41
Open as # quoi ?
0
NeriXs
Messages postés
116
Date d'inscription
lundi 4 mai 2015
Statut
Membre
Dernière intervention
18 août 2020
> ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018

29 mai 2015 à 08:21
ARFFFF de la rigueur, de la rigueur DSL!
Open FtpAppPath For Output As # 1
0

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

Posez votre question
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Modifié par ucfoutu le 28/05/2015 à 21:56
Ecoute :
Le développement est une chose sérieuse et se traite donc avec sérieux. Il passe par l'apprentissage des bases et par la lecture de l'aide de l'outil que l'on utilise.
Je commence à deviner ce que tu cherches en fait à faire.
Mon aide sera donc xde te proposer cette petite expérience , sur un projet nouveau, avec 3 boutons de commande ===>>
Option Explicit
Dim ret As String
Private Sub Command1_Click()
ret = traiter("d:\essai.txt", "ecrire", "blabla")
End Sub

Private Sub Command2_Click()
ret = traiter("d:\essai.txt", "lire")
If ret <> "" Then MsgBox ret
End Sub
Private Sub Command3_Click()
ret = traiter("d:\essai.txt", "ajouter", "coucou")
End Sub


Private Function traiter(chemin_fic As String, mode As String, Optional quoi As String) As String
Dim toto As String
Select Case mode
Case "ecrire", "ajouter"
If mode = "ecrire" Then
Open chemin_fic For Output As #1
Else
Open chemin_fic For Append As #1
End If
Print #1, quoi
Case "lire"
Open chemin_fic For Input As #1
Do While Not EOF(1)
Line Input #1, toto
traiter = traiter & vbCrLf & toto
Loop
End Select
Close #1
End Function

Le 1er bouton écrit dans un fichier, en l'écrasant
Le 2ème bouton lit le contenu du fichier
Le 3ème bouton écrit (sans l'écraser) à la fin du fichier

Joue comme tu l'entends avec les boutons 1 et/ou 3. Le 2 te montrera ce que contient le fichier lorsque tu le cliqueras
J'ai mis en "dur" ("d:\essai.txt") le chemin du fichier. Tu sais comment le faire en utilisant app.path et la chaîne de ton choix (vu plus haut)
A toi d'analyser et comprendre tout cela. Ouvre ton aide VB sur les termes que tu maîtrises mal. A toi de jouer et t'y mettre, maintenant. Ce forum n 'est pas un forum d'apprentissage (cours, etc ...) mais a une autre vocation (aide au développement lorsque est rencontrée une difficulté spécifique et parfaitement isolée).

EDIT : tu vas probablement me trouver "rude".
Regarde alors ton titre ===>> il montre que les fondements mêmes sont encore ignorés de toi.
App.path n'est pas une "fonction".
App est un objet (l'objet application)
Path est l'une des propriétés de cet objet. Fais donc un tour dans ton aide VB à la rubrique App ===>> ouvre l'onglet propriétés ===>> tu y trouveras la propriété Path, mais également d'autres propriétés. Saisis cette occasion pour voir à quoi elles correspondent.
C'est en acceptant de faire ce genre de pas (et pas autrement) que tu prendras valablement le chemin du développement.
Bonne étude et bonne chance.

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
NeriXs
Messages postés
116
Date d'inscription
lundi 4 mai 2015
Statut
Membre
Dernière intervention
18 août 2020

Modifié par NeriXs le 28/05/2015 à 23:03
Bonsoir,

Non je ne te trouve pas "rude" mais, réaliste.
A moi de faire les efforts nécessaires.
J'ai besoin de personnes comme toi pour me remettre en place (et oui a 42 ans passés).
C'est motivant le genre d'exercice que tu me proposes.

je me suis amusé avec ton code.
fait quelques recherches, lu, testé, compris et commenté.
Très pédagogique pour moi.

Option Explicit
Dim ret As String 'Déclaration appel fonction
Dim PathChemin_fic As String 'Déclaration chemin

Private Sub Command1_Click(Index As Integer)
Select Case Index
Case Is = 0
ret = traiter(PathChemin_fic, "ecrire", "blabla") 'chemin, mode, quoi
Case Is = 1
ret = traiter(PathChemin_fic, "lire") 'chemin, mode
If ret <> "" Then MsgBox ret
Case Is = 2
ret = traiter(PathChemin_fic, "ajouter", "coucou") 'chemin, mode, quoi
End Select
End Sub

Private Function traiter(chemin_fic As String, mode As String, Optional quoi As String) As String
Dim toto As String 'Déclaration de la variable qui contient la ligne lue en cours
Select Case mode
Case "ecrire", "ajouter"
If mode = "ecrire" Then
Open chemin_fic For Output As #1 'ouverture / supprime et recrée le fichier
Else
'"ajouter"
Open chemin_fic For Append As #1 'ouverture / modifie
End If
Print #1, quoi 'blabla ou coucou

Case "lire"
Open chemin_fic For Input As #1
Do While Not EOF(1) '"End Of File" tant que c'est pas la fin du fichier
Line Input #1, toto 'lecture de la ligne et stochage dans la variable toto
traiter = traiter & vbCrLf & toto 'construction fichier = fin de champ CR LF = ligne
Loop
End Select
Close #1
End Function

Private Sub Form_Load()
PathChemin_fic = App.Path & "\essai.txt"
End Sub
0
vb95
Messages postés
2775
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
30 juin 2022
151
29 mai 2015 à 01:04
salut Nerixs
Salut NeriXs

Dim ret As String 'Déclaration appel fonction


c'est plutôt déclaration d'une chaine pour retour d'une fonction

Private Function traiter(chemin_fic As String, mode As String, Optional quoi As String) As String


Traiter est une fonction qui reçoit des paramètres en entrèe (3 entre parenthèses) et renvoie une valeur en retour : ici une String(chaine de caratère comme précisé après la parenthèse de fermeture des paramètres)

en plus vbCrLf est un retour-chariot saut-ligne et non un fin de champ
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
29 mai 2015 à 08:25
J'ai oublié de te dire : je paierais une fortune pour "reculer" de plus de 3 décennies et retrouver ainsi les 42 ans que tu as ... ah oui, alors !
0
NeriXs
Messages postés
116
Date d'inscription
lundi 4 mai 2015
Statut
Membre
Dernière intervention
18 août 2020

29 mai 2015 à 08:16
Bonjour vb95,
Merci à toi aussi de me consacrer un peu de ton temps et pour ce petit complément d'informations
0
NeriXs
Messages postés
116
Date d'inscription
lundi 4 mai 2015
Statut
Membre
Dernière intervention
18 août 2020

Modifié par NeriXs le 29/05/2015 à 09:38
Bonjour,
Puis-je passer ce sujet en résolu?
Le traitement donné en réponse #8 vous semble convenable?
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
29 mai 2015 à 11:56
Oui.
0