Forum Clubic

Récuperer un controle d'un formulaire Access

J’ai un formulaire “Créer une nouvelle affaire” et un formulaire “Parametres”.

http://img505.imageshack.us/img505/862/sanstitre1yr7.jpg

http://img505.imageshack.us/img505/8748/sanstitreox8.jpg

Dans le formulaire “Parametre”, je mets le chemin dans lequel vont etre sotcké les répertoires et dans le formulaire “Créer une …”, je dois rentrer le N° de l’affaire et le Nom de l’affaire. Ensuite, en cliquant sur le bouton “Créer”, il me créer normalement des répertoires dans le chemin indiqué dans le formulaire “Parametres”.
Alors le probleme c’est que j’arrive à créer les répertoires mais pas dans le bon chemin.

Voici le code :
Private Sub Créer_Click()

Forms![PARAMETRE]![Chemin] = Chemin.Value
Dim strDirPath As String
strDirPath = Chemin.Value & " \ " & Numéro.Value & " - " & NAffaire.Value
MsgBox strDirPath

If Dir(Chemin.Value & " \ " & Numéro.Value & " - " & NAffaire.Value, vbDirectory) > "" Then
    MsgBox ("Cette Affaire existe déjà")
Else
    MkDir Chemin.Value & " \ " & Numéro.Value & " - " & NAffaire.Value
End If

    MkDir Chemin.Value & " \ " & Numéro.Value & " - " & NAffaire.Value & "\ESQ"

    MkDir Chemin.Value & " \ " & Numéro.Value & " - " & NAffaire.Value & "ESQ\Secrétariat"
    
    MkDir Chemin.Value & " \ " & Numéro.Value & " - " & NAffaire.Value & "ESQ\Autocad"

On Error GoTo Err_Créer_Click

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "AFFAIRE"
DoCmd.Close
DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_Créer_Click:
Exit Sub

Err_Créer_Click:
MsgBox Err.Description
Resume Exit_Créer_Click

End Sub

Il me semble que dans ce code il manque la vérification du contenu des zones de texte avant de créer les répertoire mais je ne sais pas c’est lequelle.

Si quelqu’un pouvait m’aider, ce serait sympa.
Merci d’avance.

1- Peux-tu nous donner un exemple ? (ce que tu voulais créer, ce qu’il te crée en fait)
2- Dans ton path, tu as la notion de disque (E:) ; CHDIR et MKDIR ne gèrent pas cette notion ; il faut passer par CHDRIVE
3- d’après ton écran, N° Affaire semble être un entier ; tu confirmes ?
La ligne MsgBox strDirPath te donne-t-elle ce que tu attends ?

En fait, je me suis trompé, il ne crée pas les répertoires. Si je veux qu’il crée les répertoires, je dois mettre entre " " chemin.value.
Exemple:
Je mets 898 dans “N°Affaire” et ABCD dans “Nom Affaire”. Le 1er répertoire devrait se nommer “898 - ABCD” dans le chemin indiqué dans le formilaire “PARAMETRE”. Ensuite dans ce répertoire devrait se créer un autre répertoire qui se nommerait “ESQ” ainsi de suite.

Dans ton path, tu as la notion de disque (E:) ; CHDIR et MKDIR ne gèrent pas cette notion ; il faut passer par CHDRIVE
Qu’es ce que vous voulez dire par notion, car si je remplace “Chemin.Value” par un chemin classique, le code fonctionne trés bien.

N°Affaire est bien un entier.

La ligne MsgBox strDirPath me met une erreur “424” objet requis. Je pense qu’il ne connait pas l’objet chemin. Je pense qu’il faut dire à quel formulaire ce controle appratient.

J’espere que j’ai été clair. :slight_smile:

C’est un peu plus clair …

Private Sub Créer_Click()
Forms![PARAMETRE]![Chemin] = Chemin.Value
Je pensais que le form servait à fournir la valeur qui servira plus tard à former le path ?
Si oui, c’est le contraire qu’il faut écrire
Chemin.Value = Forms![PARAMETRE]![Chemin]
Pourquoi n’y a-t-il pas besoin de faire la même chose pour NAffaire ?

Dim strDirPath As String
strDirPath = Chemin.Value & " \ " & Numéro.Value & " - " & NAffaire.Value
MsgBox strDirPath

A partir du moment où le nom du champ contient des caractères étendus, on doit l’utiliser entre crochets.
La remarque suivante est valable pour Numéro et NAffaire
De plus, comme c’est un numérique, on ne peut pas l’insérer dans une chaîne.
Il faut d’abord le transformer avec la fonction str()
Mais comme la fonction str() insère un espace en début de chaine (au moins pour les nombres positifs), il faut la tronquer à gauche
NumeroStr = mid(str([Numéro]),2)

[i]If Dir(Chemin.Value & " \ " & Numéro.Value & " - " & NAffaire.Value, vbDirectory) > “” Then
MsgBox (“Cette Affaire existe déjà”)
Else
MkDir Chemin.Value & " \ " & Numéro.Value & " - " & NAffaire.Value
End If

MkDir Chemin.Value & " \ " & Numéro.Value & " - " & NAffaire.Value & “\ESQ”

MkDir Chemin.Value & " \ " & Numéro.Value & " - " & NAffaire.Value & “ESQ\Secrétariat”

MkDir Chemin.Value & " \ " & Numéro.Value & " - " & NAffaire.Value & “ESQ\Autocad”
[/i]Mêmes remarques[i]

On Error GoTo Err_Créer_Click

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = “AFFAIRE”
DoCmd.Close
DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_Créer_Click:
Exit Sub

Err_Créer_Click:
MsgBox Err.Description
Resume Exit_Créer_Click

End Sub
[/i]

Ce n’est sûrement pas complet, mais avec ça on devrait pouvoir avancer un peu

Ca ne marche toujours pas, il me met " Projet ou bibliothèque introuvable" en selectionnant “chemin” .

J’ai peur de ne pas bien comprendre cette phrase.

NAffaire et Numéro sont dans le formulaire “Créer une nouvelle affaire” et c’est à partir de ce formulaire que je créer le répertoire. Ce qui n’est pas le cas pour Chemin qui lui est dans le Formulaire “PARAMETRE”.
Le Chemin des répertoires est dans “PARAMETRE” pour la simple raison que l’utilsateur puisse le changer à tout moment.
Cela fait plus d’un mois que je suis bloqué dessus, du coup je ne peux pas avancé dans mon projet. :frowning:
Peut etre, il serai plus simple que je partage la base de données ?

OK ; je pensais que tout le code était écrit dans un module indépendant.
Effectivement, pour aller plus loin, il faudrait connaître l’organisation du programme.

Voici le lien pour télecharger la BD : files.filefront.com…
Edité le 26/06/2007 à 12:56

Le fait qu’il sélectionne “chemin” n’est pas significatif.
En fait, le module ne se compile pas et il s’arrête sur la première ligne.
C’est un problème d’environnement, qui ne peut donc se résoudre qu’en fonction de la configuration de chaque micro.

Il faut voir sur le micro quelles sont les macros complémentaires, ou les additifs à Access qui ont été faits, et vérifier qu’ils fonctionnent tous.
Au besoin, les désinstaller, confirmer que le noyau du programme fonctionne et les réinstaller un par un.

NB : pour que ça fonctionne, les remarques qu’on a échangées hier restent valables

J’ai réussis. Il fallait simplement récupérer le chemin dans la table PARAMETRE au lieu du formulaire;

Voilà le code:

Private Sub Créer_Click()
 
    Chemin = DLookup("Chemin", "PARAMETRE")
    Dim strDirPath As String
    strDirPath = Chemin & Numéro.Value & " - " & NAffaire.Value
    MsgBox strDirPath
    
    If Dir(Chemin & Numéro.Value & " - " & NAffaire.Value, vbDirectory) > "" Then
        MsgBox ("Cette Affaire existe déjà")
    Else
        MkDir Chemin & Numéro.Value & " - " & NAffaire.Value
    End If
    
        MkDir Chemin & Numéro.Value & " - " & NAffaire.Value & "\ESQ"
  
        MkDir Chemin & Numéro.Value & " - " & NAffaire.Value & "\ESQ\Secrétariat"
        
        MkDir Chemin & Numéro.Value & " - " & NAffaire.Value & "\ESQ\Autocad"
        
On Error GoTo Err_Créer_Click
 
    Dim stDocName As String
    Dim stLinkCriteria As String
 
    stDocName = "AFFAIRE"
    DoCmd.Close
    DoCmd.OpenForm stDocName, , , stLinkCriteria
    
Exit_Créer_Click:
    Exit Sub
 
Err_Créer_Click:
    MsgBox Err.Description
    Resume Exit_Créer_Click
    
End Sub

J’ai une autre question: Est ce qu’on peut créer un évènement sur un click droit ?

Merci pour votre aide.

Ca doit également marcher avec Chemin =forms!PARAMETRE!Chemin (à condition que le formulaire soit ouvert)

Je ne vois toujours pas comment
strDirPath = Chemin & Numéro.Value & " - " & NAffaire.Value
peut fonctionner si Numéro.Value est un entier…
Enfin, l’essentiel, c’est que ça marche.

Je ne crois pas qu’on puisse intercepter l’évènement click droit
Par contre, on doit pouvoir modifier le contenu du menu contextuel comme on veut, et donc y rajouter les actions qui nous intéressent.
Je ne me rappelle pas l’avoir fait en access, par contre je l’ai fait de nombreuses fois en excel et à ce niveau il ne doit pas y avoir énormément de différence.