[AIDE] Fonction AppPath [Résolu]

NeriXs 101 Messages postés lundi 4 mai 2015Date d'inscription 11 janvier 2018 Dernière intervention - 27 mai 2015 à 13:28 - Dernière réponse : ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

17 réponses

Whismeril 11969 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 août 2018 Dernière intervention - 27 mai 2015 à 16:13
0
Merci
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.
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 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 !
Whismeril 11969 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 août 2018 Dernière intervention > ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 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.
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 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.
Whismeril 11969 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 août 2018 Dernière intervention > ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 27 mai 2015 à 18:34
C'est pas faux
Commenter la réponse de Whismeril
NeriXs 101 Messages postés lundi 4 mai 2015Date d'inscription 11 janvier 2018 Dernière intervention - Modifié par NeriXs le 28/05/2015 à 08:33
0
Merci
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...."
Commenter la réponse de NeriXs
Whismeril 11969 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 août 2018 Dernière intervention - 28 mai 2015 à 13:38
0
Merci
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.
Commenter la réponse de Whismeril
NeriXs 101 Messages postés lundi 4 mai 2015Date d'inscription 11 janvier 2018 Dernière intervention - Modifié par NeriXs le 28/05/2015 à 15:02
0
Merci
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 28 mai 2015 à 17:41
Open as # quoi ?
NeriXs 101 Messages postés lundi 4 mai 2015Date d'inscription 11 janvier 2018 Dernière intervention > ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 29 mai 2015 à 08:21
ARFFFF de la rigueur, de la rigueur DSL!
Open FtpAppPath For Output As # 1
Commenter la réponse de NeriXs
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 28/05/2015 à 21:56
0
Merci
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.
Commenter la réponse de ucfoutu
NeriXs 101 Messages postés lundi 4 mai 2015Date d'inscription 11 janvier 2018 Dernière intervention - Modifié par NeriXs le 28/05/2015 à 23:03
0
Merci
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
vb95 1637 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 17 août 2018 Dernière intervention - 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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 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 !
Commenter la réponse de NeriXs
NeriXs 101 Messages postés lundi 4 mai 2015Date d'inscription 11 janvier 2018 Dernière intervention - 29 mai 2015 à 08:16
0
Merci
Bonjour vb95,
Merci à toi aussi de me consacrer un peu de ton temps et pour ce petit complément d'informations
Commenter la réponse de NeriXs
NeriXs 101 Messages postés lundi 4 mai 2015Date d'inscription 11 janvier 2018 Dernière intervention - Modifié par NeriXs le 29/05/2015 à 09:38
0
Merci
Bonjour,
Puis-je passer ce sujet en résolu?
Le traitement donné en réponse #8 vous semble convenable?
Commenter la réponse de NeriXs
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 29 mai 2015 à 11:56
0
Merci
Oui.
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.