ACCESS

Fermé
toocool - 2 juin 2011 à 15:56
 toocool - 2 juin 2011 à 19:19
Bonjour, j'aurai besoin d'aide sur access. j'ai crée une table client avec une liste de champs (non, adresse, materiel installe, reference etc...) , j'ai également créer un formulaire pour pouvoir renseigner tous ces champs, puis un etat afin de pouvoir imprimer.
Mon problème: j'aimerai imprimer cet état par exemple pour un seul client bien défini
comment proceder ? (une explication pas a pas ne sera pas du luxe je débute avec access merci)

2 réponses

Bonjour,

Il existe plusieurs façon, voici un exemple :

Dans un premier temps, il est souhaitable que le formulaire
soit accroché sur une requête et non sur une(les) table(s).

Étape 1

Créer une requête globale qui sélectionne tous les enregistrements
de toute(s) la(les) table(s).

Étape 2

Ouvrir ton formulaire en mode [Modification], et changer la référence
vers la requête plutôt que vers la table.

Étape 3

Créer une requête qui sélectionne tous les champs souhaité dans un état,
pour un client unique

Clause Where ID_Client = xyz

Étape 4

Créer un État qui s'accroche sur la requête précédamment crée.

Étape 5

Installer un bouton dans le pied de page du premier formulaire qui permet
de naviguer dans tous les enregistrements.

Private Sub cmd_Execute_Click()

On Error GoTo Err_cmd_Execute_Click


'MsgBox Me.TitreFrancais.Value
MsgBox Me.IDClient.Value


Exit_cmd_Execute_Click:
Exit Sub

Err_cmd_Execute_Click:
MsgBox Err.Description
Resume Exit_cmd_Execute_Click

End Sub


Étape 6

Éntrer en mode [Modification] pour la requête du client unique, changer
le format pour format SQL.

Copier/Coller le texte de la requête SQL


Étape 7

Amener ce texte dans le code du bouton ajouter

Exemple de requête :

'SELECT TableVideo.TitreFrancais, TableVideo.Cassette, TableVideo.Annee,
' TableVideo.Episode, TableVideo.Nationalite, TableVideo.Style,
' TableVideo.Categorie, TableVideo.Duree, TableVideo.Cote,
' TableVideo.Realisateur, TableVideo.Serie, TableVideo.TitreAnglais,
' TableVideo.Mode, TableVideo.FicheOK, TableVideo.Numero, TableVideo.Stock,
' TableVideo.Classe, TableVideo.Type, TableVideo.CompteurHeures,
' TableVideo.Qualite, TableVideo.Critiques, TableVideo.NumeroCode,
' TableVideo.ActeursPrincipaux, TableVideo.ActeursSecondaires,
' TableVideo.Position
'FROM
' TableVideo
'WHERE
' TableVideo.TitreFrancais="ROBIN DES BOIS";

Étape 8

Transformer cette requête en chaine de caractères, exemple :

Dim ReqSQL As String

ReqSQL = "SELECT TableVideo.TitreFrancais, TableVideo.Cassette, TableVideo.Annee," & _
"TableVideo.Episode, TableVideo.Nationalite, TableVideo.Style," & _
"TableVideo.Categorie, TableVideo.Duree, TableVideo.Cote," & _
"TableVideo.Realisateur, TableVideo.Serie, TableVideo.TitreAnglais," & _
"TableVideo.Mode, TableVideo.FicheOK, TableVideo.Numero, TableVideo.Stock," & _
"TableVideo.Classe, TableVideo.Type, TableVideo.CompteurHeures," & _
"TableVideo.Qualite, TableVideo.Critiques, TableVideo.NumeroCode," & _
"TableVideo.ActeursPrincipaux, TableVideo.ActeursSecondaires," & _
"TableVideo.Position " & _
"FROM TableVideo " & _
"WHERE " & _
"TableVideo.TitreFrancais=" & """" & "ROBIN DES BOIS" & """" & ";"

Étape 9

Modifier le titre (le numéro de client dans votre cas) par le champ contenant le numéro de client :

"WHERE " & _
"TableVideo.TitreFrancais=" & """" & "ROBIN DES BOIS" & """" & ";"

Devient :

"WHERE " & _
"TableVideo.TitreFrancais=" & """" & Me.TitreFrancais.Value & """" & ";"

Étape 10

Ajouter la fonction suivante :

Public Function ChangeRequeteDef(ChaineRequete As String, ChaineSQL As String) As Boolean

Dim Definition As QueryDef

If ((ChaineRequete = "") Or (ChaineSQL = "")) Then
ChangeRequeteDef = False
Else
Set Definition = CurrentDb.QueryDefs(ChaineRequete)
Definition.SQL = ChaineSQL
Definition.Close
RefreshDatabaseWindow
ChangeRequeteDef = True
End If

End Function
'

Étape 11

Ajouter un appel à la fonction qui change la définition de la requête dans la procédure du bouton.

et ajouter un appel au lancement de l'état.

Vous devriez donc avoir le code suivant derrière votre bouton :

Private Sub cmd_Execute_Click() 

On Error GoTo Err_cmd_Execute_Click 

    Dim Ensemble As Recordset 
    Dim ReqSQL As String 

    ReqSQL = "SELECT TableVideo.TitreFrancais, TableVideo.Cassette, TableVideo.Annee," & _ 
                "TableVideo.Episode, TableVideo.Nationalite, TableVideo.Style," & _ 
                "TableVideo.Categorie, TableVideo.Duree, TableVideo.Cote," & _ 
                "TableVideo.Realisateur, TableVideo.Serie, TableVideo.TitreAnglais," & _ 
                "TableVideo.Mode, TableVideo.FicheOK, TableVideo.Numero, TableVideo.Stock," & _ 
                "TableVideo.Classe, TableVideo.Type, TableVideo.CompteurHeures," & _ 
                "TableVideo.Qualite, TableVideo.Critiques, TableVideo.NumeroCode," & _ 
                "TableVideo.ActeursPrincipaux, TableVideo.ActeursSecondaires," & _ 
                "TableVideo.Position " & _ 
            "FROM TableVideo " & _ 
            "WHERE " & _ 
                "TableVideo.TitreFrancais=" & """" & Me.TitreFrancais.Value & """" & ";" 

    If (ChangeRequeteDef("Req_Titre_Specifique", ReqSQL)) Then 
        Set Ensemble = CurrentDb.OpenRecordset("Req_Titre_Specifique") 
        Ensemble.MoveLast 
        Ensemble.MoveFirst 
        Ensemble.Close 
        DoCmd.OpenReport "État DVD Titre Vidéo", acViewNormal, "", "", acNormal 
    End If 
     
Exit_cmd_Execute_Click: 
    Exit Sub 

Err_cmd_Execute_Click: 
    MsgBox Err.Description 
    Resume Exit_cmd_Execute_Click 
     
End Sub 
' 


n.b. Méfiez vous des sauts de ligne non souhaité dans ce texte.
surtout au moment de la création de la requête SQL.

Cdt

Lupin
0
Merci beaucoup pour ton explication et du temps passé , mais je crois que je vais abandonner cela est un peu trop compliqué pour moi , je ne suis vraiment pas arrivé a ce niveau de compétence merci encore
0