IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Code avec de multiple condition SI [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 297
    Points : 74
    Points
    74
    Par défaut Code avec de multiple condition SI
    Bonjour la communauté,

    je suis entrain de modifier un code existant qui fonctionne actuellement.
    Sauf que ce code fonctionne avec trois requêtes, et vu que ce code ce mets sur un tableau de bord, je souhaite obtenir quelque chose de beaux, donc j'ai effectué un code pour obtenir une phrase correcte qui éliminait les phrases ou le champ est égal à 0.

    Ci-dessous le code qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    Public Sub InfosChq(TypeAffich As Integer)
     
        Dim oDb As DAO.Database
        Dim oRst As DAO.Recordset
     
        Dim StrSynt As String       ' variable résultat obtenu.
     
        Dim StrNbChq As String     ' variable nombre de chèque non encaissé.
        Dim IntMtChq As Currency   ' variable montant total des chèques non encaissés.
     
        Dim StrNbChqE As String     ' variable nombre de chèque émis non encaissé.
        Dim IntMtChqE As Currency   ' variable montant total des chèques émis non encaissés.
     
        Dim StrNbChqSup3M As String     ' variable nombre de chèque émis non encaissé.
        Dim IntMtChqSup3m As Currency   ' variable montant total des chèques émis non encaissés.
     
     
     
        Set oDb = CurrentDb
     
        Set oRst = oDb.OpenRecordset("ChqNonEncaisse", dbOpenSnapshot) 'Appel de la réquete ChqNonEncaisse
                StrNbChq = Nz(oRst.Fields(0), 0) 'Attribue à la variable le résultat de la colonne 1 de la requête ChqNonEncaisse
                IntMtChq = Nz(oRst.Fields(1), 0) 'Attribue à la variable le résultat de la colonne 2 de la requête ChqNonEncaisse
     
        Set oRst = oDb.OpenRecordset("ChqEmis", dbOpenSnapshot) 'Appel de la réquete ChqEmis
                StrNbChqE = Nz(oRst.Fields(0), 0) 'Attribue à la variable le résultat de la colonne 1 de la requête ChqEmis
                IntMtChqE = Nz(oRst.Fields(1), 0) 'Attribue à la variable le résultat de la colonne 2 de la requête ChqEmis
     
        Set oRst = oDb.OpenRecordset("ChqNonEncaisseSup3mois", dbOpenSnapshot) 'Appel de la réquete ChqEmis
                StrNbChqSup3M = Nz(oRst.Fields(0), 0) 'Attribue à la variable le résultat de la colonne 1 de la requête ChqEmis
                IntMtChqSup3m = Nz(oRst.Fields(1), 0) 'Attribue à la variable le résultat de la colonne 2 de la requête ChqEmis
     
     
     
        Select Case StrNbChq
            Case Is = 0   'S'il n'y a pas de chèque en attente d'encaissement
               StrSynt = "Aucun chèque en attente d'encaissement actuellement."
     
            Case Is = 1   'S'il n'y a qu'un chèque en attente d'encaissement
                StrSynt = StrSynt & "    - " & StrNbChq & " chèque non encaissé actuellement pour un montant de " & Format(IntMtChq, "Currency") & vbCrLf _
     
     
         Case Else
               'Crée une boucle qui va déterminer les résultats sous la forme :
               ' - Chèques non encaissé :
               '    - StrNbChq chèque(s) non encaissé pour un total de IntMtChq à ce jour
               '      dont StrNbChqE chèque(s) émis pour IntMtChqE.
            StrSynt = ""
     
              While Not oRst.EOF
     
                     StrSynt = StrSynt & "    - " & StrNbChq & " chèques non encaissés actuellement pour un montant total de " & Format(IntMtChq, "Currency") & vbCrLf _
                                        & "  dont " & StrNbChqE & " chèques émis pour un solde de " & Format(IntMtChqE, "Currency") & " ." & vbCrLf _
                                        & " Nous avons " & StrNbChqSup3M & " chèques d'un solde de " & Format(IntMtChqSup3m, "Currency") & " qui sont en attente d'encaissement depuis au moins 3 mois."
     
                     oRst.MoveNext
              Wend
     
        End Select
     
     
        'Comme Source de la Zone de Texte, mise en place d'un titre + le résultat de la boucle.
        Select Case TypeAffich
            Case Is = -1    ''TypeAffich :  -1 Pour Zone de texte
               Form_Menu.TxtChq.ControlSource = _
               "=" & """" & StrSynt & """"
        End Select
     
        'Fermetures des connexions
        oRst.Close
        oDb.Close
        Set oDb = Nothing
        Set oRst = Nothing
     
     
    End Sub

    Donc le but est de développer la partie des "select case" via des If de la façon suivante en français :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    Si nombre de Chéque Encaissé = O
    	alors Aucun chèque en attente d'ecencaissement actuellement.
     
    	Sinon Si nombre de Chéque Encaissé = chq emis = chqsup3mois = 1
    		alors 	1 chéque émis de plus de 3 mois en attente d'encaissemnet actuellement
     
    	Sinon Si nombre de Chéque Encaissé = chqsup3mois = 1 et chq emis = 0 
    		alors 	1 chéque reçu de plus de 3 mois en attente de d'encaissement actuellement
     
    	Sinon Si nombre de Chéque Encaissé = chq emis = 1 et chqsup3mois = 0
    		alors 	1 chéque émis en attente d'encaissement actuellement
     
    	Sinon Si nombre de Chéque Encaissé = 1 et chq emis = chqsup3mois = 0
    		alors 	1 chéque reçu en attente d'encaissement actuellement
     
     
    		Sinon Si nombre de Chéque Encaissé > 1 et chq emis = chqsup3mois = 0
    			alors 	X chéques reçus en attente d'encaissement actuellement.
     
    		Sinon Si nombre de Chéque Encaissé > 1 et chq emis = 1 et chqsup3mois = 0
    			alors 	X chéques en attente d'encaissement actuellement dont 1 chèquen émis.
     
    		Sinon Si nombre de Chéque Encaissé = chq emis > 1 et chqsup3mois = 0
    			alors 	X chéques en attente d'encaissement actuellement dont X chèques émis.
     
     
    			Sinon Si nombre de Chéque Encaissé > 1 et chq emis = chqsup3mois = 1
    				alors 	X chéques non encaissés actuellement dont 1 chèque émis.
    					Nous avons un chèque en attente d'encaissement depuis plus de 3 mois.
     
    			Sinon Si nombre de Chéque Encaissé = chq emis > 1 et chqsup3mois = 1
    				alors 	X chéques non encaissés actuellement dont X chèque émis.
    					Nous avons un chèque en attente d'encaissement depuis plus de 3 mois.
     
    			Sinon Si nombre de Chéque Encaissé = chq emis = chqsup3mois > 1
    				alors 	X chéques non encaissés actuellement dont X chèque émis.
    					Nous avons X chèques en attente d'encaissement depuis plus de 3 mois.

    Et en code j'ai mis ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    If StrNbChq = O
    	Then StrSynt = "Aucun chèque en attente d'ecencaissement actuellement."
     
    	Else If StrNbChq = StrNbChqE = StrNbChqSup3M = 1
    		then 	StrSynt = "1 chéque émis de plus de 3 mois en attente d'encaissemnet actuellement"
     
    	Else If StrNbChq = StrNbChqSup3M = 1 AND StrNbChqE = 0 
    		then	StrSynt = "1 chéque reçu de plus de 3 mois en attente de d'encaissement actuellement"
     
    	Else If StrNbChq = StrNbChqE = 1 AND  StrNbChqSup3M = 0
    		then 	StrSynt = "1 chéque émis en attente d'encaissement actuellement"
     
    	Else If StrNbChq = 1 AND  StrNbChqE = StrNbChqSup3M = 0
    		then 	StrSynt = "1 chéque reçu en attente d'encaissement actuellement"
     
     
    		Else If StrNbChq > 1 AND  StrNbChqE = StrNbChqSup3M = 0
    			then 	StrSynt = & IntMtChq & "chéques reçus en attente d'encaissement actuellement."
     
    		Else If StrNbChq > 1 AND  StrNbChqE = 1 AND  StrNbChqSup3M = 0
    			then	StrSynt = & IntMtChq & "chéques en attente d'encaissement actuellement dont 1 chèquen émis."
     
    		Else If StrNbChq = StrNbChqE > 1 AND  StrNbChqSup3M = 0
    			then 	StrSynt = & IntMtChq & "chéques en attente d'encaissement actuellement dont" & IntMtChqE & "chèques émis."
     
     
    			Else If StrNbChq > 1 AND  StrNbChqE = StrNbChqSup3M = 1
    				then 	StrSynt = & IntMtChq & "chéques non encaissés actuellement dont 1 chèque émis." & vbCrLf _
    						  & "Nous avons un chèque en attente d'encaissement depuis plus de 3 mois."
     
    			Else If StrNbChq = StrNbChqE > 1 AND  StrNbChqSup3M = 1
    				then 	StrSynt = & IntMtChq & "chéques non encaissés actuellement dont" & IntMtChqE & "chèque émis." & vbCrLf _
    						  & "Nous avons un chèque en attente d'encaissement depuis plus de 3 mois."
     
    			Else If StrNbChq = StrNbChqE = StrNbChqSup3M > 1
    				then 	StrSynt = & IntMtChq & "chéques non encaissés actuellement dont" & IntMtChqE & "chèque émis." & vbCrLf _
    						  & "Nous avons" & IntMtChqSup3m & "chèques en attente d'encaissement depuis plus de 3 mois."
    			End If
    			End If
    			End If
    		End If
    		End If
    		End If
    	End If
    	End If
    	End If
    	End If
    End If
    Je voulais savoir si mettre autant de condition est possible dans un codage ?
    Et si oui, est ce que code semble t-il être cohérent, et correct ?

    Merci pour les réponses et vos aides que je pourrai obtenir.

    Bien cordialement,
    Benjamin.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Est-ce que Access proteste ? Si non alors tu n'as pas atteind la limite max qui doit exister mais que je ne connais.

    Le code StrNbChq = StrNbChqE = StrNbChqSup3M = 1 ne fonctionnera pas. Il faut mettre quelque chose comme StrNbChq = 1 and StrNbChqE = 1 and StrNbChqSup3M = 1.

    Aussi il est imprudent de se baser sur la position d'un champ dans une requête pour récupérer une valeur.
    Utliser le nom du champ est beaucoup plus sur car cela marchera quelque soit l'ordre des colonnes.

    Enfin tes phrases semblent assez redondantes donc il est sans doute possible de ne gérer que les pluriels et des tronçons de texte plutôt que de répéter tout le texte.

    Quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    if nbChequeEmi<>0
      if texte<>"" then
         texte=texte & " et "
      end if
      texte=texte & nbChequeEmi & " chèque" & iif(nbChequeEmi > 1, "s", "") & " émi" & iif(nbChequeEmi > 1, "s", "")
    end if
     
    if nbChequeRecu<>0
     
      if texte<>"" then
         texte=texte & " et "
      end if
     
      texte=texte & nbChequeRecu & " chèque" & iif(nbCheque > 1, "s", "") & " reçu" & iif(nbChequeRecu > 1, "s", "")
    end if
     
    if texte<>"" then
      texte=texte & "."
    end if
    L'idée c'est d'avoir un minimum d'interventions à faire dans le code si le texte change.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 297
    Points : 74
    Points
    74
    Par défaut
    Bonjour marot,

    je te remercie pour les explications.

    Donc j'ai appliqué tes deux premières recommandations.
    Par contre la dernière, j'ai du mal à comprendre comment elle fonctionne. Si je comprends bien, tu as créé une formule si pour intégrer trois lignes de texte mais lorsque l'une des variables est nulle alors ce texte ne s'affiche mais si elle est égale à un, u traduit directement le texte en singulier ?
    J'ai remis les deux codes dans mon code mais si j'enlève le miens fastidieu, ceci devrait être bon, au niveau phrases que je souhaite ? Car pour l'instant le code ne fonctionne mais c'est un brouillon pour l'instant aussi, puisque la variable résultat n'est pas correcte..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    Dim oDb As DAO.Database
     
        Dim StrSynt As String       ' variable résultat obtenu.
     
        Dim StrNbChq As String     ' variable nombre de chèque non encaissé.
        Dim IntMtChq As Currency   ' variable montant total des chèques non encaissés.
     
        Dim StrNbChqE As String     ' variable nombre de chèque émis non encaissé.
        Dim IntMtChqE As Currency   ' variable montant total des chèques émis non encaissés.
     
        Dim StrNbChqSup3M As String     ' variable nombre de chèque émis non encaissé.
        Dim IntMtChqSup3m As Currency   ' variable montant total des chèques émis non encaissés.
     
     
     
        Set oDb = CurrentDb
     
        'Attribue la valeur à la variable
        StrNbChq = (ChqNonEncaisse.NbrChqNonEncaisse) ' Appel champs de la réquete ChqNonEncaisse
        IntMtChq = (ChqNonEncaisse.MontantChqNonEncaisse)  ' Appel champs de la réquete ChqNonEncaisse
     
        StrNbChqE = (ChqEmis.NbChqEmis) 'Appel champs de la réquete ChqEmis
        IntMtChqE = (ChqEmis.MontantChqEmis) 'Appel champs de la réquete ChqEmis
     
        StrNbChqSup3M = (ChqNonEncaisseSup3mois.NbrChqSup3m) ' Appel des champs de la réquete ChqNonEncaisseSup3mois
        IntMtChqSup3m = (ChqNonEncaisseSup3mois.MntChqSup3m) ' Appel des champs de la réquete ChqNonEncaisseSup3mois
     
     
     
    If NbChqEmis <> 0 Then
      If texte <> "" Then
         texte = texte & " et "
      End If
      texte = texte & NbChqEmis & " chèque" & IIf(NbChqEmis > 1, "s", "") & " émi" & IIf(NbChqEmis > 1, "s", "")
    End If
     
    If NbrChqNonEncaisse <> 0 Then
     
      If texte <> "" Then
         texte = texte & " et "
      End If
     
      texte = texte & NbrChqNonEncaisse & " chèque" & IIf(NbrChqNonEncaisse > 1, "s", "") & " reçu" & IIf(NbrChqNonEncaisse > 1, "s", "")
    End If
     
    If texte <> "" Then
      texte = texte & "."
    End If
     
     
     
    If StrNbChq = O Then
        StrSynt = "Aucun chèque en attente d'ecencaissement actuellement."
     
        If StrNbChq = 1 And StrNbChqE = 1 And StrNbChqSup3M = 1 Then
            StrSynt = "1 chéque émis de plus de 3 mois en attente d'encaissemnet actuellement"
     
            If StrNbChq = 1 And StrNbChqSup3M = 1 And StrNbChqE = 0 Then
                StrSynt = "1 chéque reçu de plus de 3 mois en attente de d'encaissement actuellement"
     
                If StrNbChq = 1 And StrNbChqE = 1 And StrNbChqSup3M = 0 Then
                    StrSynt = "1 chéque émis en attente d'encaissement actuellement"
     
                    If StrNbChq = 1 And StrNbChqE = 0 And StrNbChqSup3M = 0 Then
                        StrSynt = "1 chéque reçu en attente d'encaissement actuellement"
     
     
                        If StrNbChq > 1 And StrNbChqE = 0 And StrNbChqSup3M = 0 Then
                            StrSynt = "" & IntMtChq & "chéques reçus en attente d'encaissement actuellement."
     
                            If StrNbChq > 1 And StrNbChqE = 1 And StrNbChqSup3M = 0 Then
                                StrSynt = "" & IntMtChq & "chéques en attente d'encaissement actuellement dont 1 chèquen émis."
     
                                If StrNbChq > 1 And StrNbChqE > 1 And StrNbChqSup3M = 0 Then
                                     StrSynt = "" & IntMtChq & "chéques en attente d'encaissement actuellement dont" & IntMtChqE & "chèques émis."
     
     
                                    If StrNbChq > 1 And StrNbChqE = 1 And StrNbChqSup3M = 1 Then
                                        StrSynt = "" & IntMtChq & "chéques non encaissés actuellement dont 1 chèque émis." & vbCrLf _
                                                  & "Nous avons un chèque en attente d'encaissement depuis plus de 3 mois."
     
                                        If StrNbChq > 1 And StrNbChqE > 1 And StrNbChqSup3M = 1 Then
                                            StrSynt = "" & IntMtChq & "chéques non encaissés actuellement dont" & IntMtChqE & "chèque émis." & vbCrLf _
                                                      & "Nous avons un chèque en attente d'encaissement depuis plus de 3 mois."
     
                                            If StrNbChq > 1 And StrNbChqE > 1 And StrNbChqSup3M > 1 Then
                                                StrSynt = "" & IntMtChq & "chéques non encaissés actuellement dont" & IntMtChqE & "chèque émis." & vbCrLf _
                                                & "Nous avons" & IntMtChqSup3m & "chèques en attente d'encaissement depuis plus de 3 mois."
                End If
                End If
                End If
            End If
            End If
            End If
        End If
        End If
        End If
        End If
    End If
     
     'Comme Source de la Zone de Texte, mise en place d'un titre + le résultat de la boucle.
        Select Case TypeAffich
            Case Is = -1    ''TypeAffich :  -1 Pour Zone de texte
               Form_Menu.TxtChq.ControlSource = _
               "=" & """" & StrSynt & """"
        End Select
     
        'Fermetures des connexions
     
        oDb.Close
        Set oDb = Nothing

    En tout cas merci pour ton aide, car ton idée de code est superbe comme idée.

    Bien cordialement,
    Benjamin.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Oui l'idée est de composer ta phrases totale en mettant bout à bout des morceaux de phrase.
    Comme la seule différence entre 1 et plusieurs c'est un "s", ne gérer que l'accord fait du sens.

    Et en effet, j'ai oublié de gérer le cas ou la donnée est nulle. Le code devient.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if Nz(nbChequeEmi,0)<>0 then
      if texte<>"" then
         texte=texte & " et "
      end if
      texte=texte & nbChequeEmi & " chèque" & iif(nbChequeEmi > 1, "s", "") & " émi" & iif(nbChequeEmi > 1, "s", "")
    end if
    Et évidement rien ne t'empèche d'avoir du code pour le cas où elle est nulle ou 0.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    if Nz(nbChequeEmi,0)<>0 then
     
         if texte<>"" then
            texte=texte & " et "
         end if
     
         texte=texte & nbChequeEmi & " chèque" & iif(nbChequeEmi > 1, "s", "") & " émi" & iif(nbChequeEmi > 1, "s", "")
      else
     
         if texte<>"" then
            texte=texte & " et "
         end if
     
         texte=texte &  "il n'y aucun chèque émi"
     
    end if
    En pensant bien notre phrase on peut arriver souvent à une qui se contruit comme un puzzle.

    L'autre avantage c'est que réorganiser les morceaux ce fait juste en déplaçant quelques lignes de codes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
         if texte<>"" then
            texte=texte & " et "
         end if
    Se charge d'ajouter ou pas une conjonction de coordination entre les morceaux.
    On aurait pu mettre une virgule et du code pour gérer un "et" seulement au niveau du dernier morceau.

    Une trucs que j'ai fait dans cet ordre d'idée c'était d'avoir un texte fixe suivi par un détail qui lui dépendait des données.
    En reprenant ton exemple, cela ressemblait à l'exmeple ci-dessous (sans gestion des accords en nombre).

    Ici le détails du nombre de chèques :
    • 0 chèques(s) émi(s)
    • 10 chèque(s) recu(s)
    • 1 chèque(s) rejeté(s)


    Cela reste très acceptable pour un humain et cela se programme assez simplement.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 297
    Points : 74
    Points
    74
    Par défaut
    Bonjour marrot,

    merci pour ton détail et les explications.

    Par contre je ne comprends pas pourquoi vous mettez plusieurs fois le champ texte dans ton code, il correspond à quoi exactement cet intitulé ?
    Car vous comparez l'intitulé texte en fonction d'un signe arithmétique + ou -, suivis derrière d'un égal suivit de texte également, donc ça signifie quoi texte = texte ?

    Encore merci.

    Bien cordialement,
    Benjamin.

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Pas sur ce comprendre, je n'utilise pas de comparaison arithmétique.

    Je vais expliquer le code ligne à ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'Texte est la variable qui va contenir mon texte final, composé des morceaux
    if texte<>"" then 'Le <> signifie "différent de". Le test se lit "Si Texte est différent d'une chaîne vide" donc c'est que j'ai déjà des caractères dans ma variable texte.
        texte=texte & " et " 'Ajoute la conjonction de coordination aux caractères déjà dans texte.
    end if
    J'espère avoir été plus clair.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 297
    Points : 74
    Points
    74
    Par défaut
    Bonjour marot,

    je vous remercie car votre idée a permis d'économiser un certain nombre de ligne dans mon codage.

    Par contre, comment vous faites pour renvoyer la position champs d'une requête pour renvoyer une valeur au lieu d'indiquer la colonne de la requête, car je n'y arrive pas.

    Merci pour votre aide.

    Bien cordialement,
    Benjamin.

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Il y a plusieurs méthodes.
    Est la plus "compacte". C'est aussi la 1ère que j'ai apprise et j'ai donc tendance à la préférée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oRst.Fields("NomDuChamp")
    Plus longue mais plus versatile.
    Elle a le mérite aussi d'être moins cryptique pour quelqu'un qui ne connait pas le VBA.
    Juste à lire les mots, on comprends ce que cela fait.

    On peut remplacer la chaîne par une variable.
    ici un exemple basic de cela.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dim nomChamp as string
    nomChamp='Ici du code qui assigne le nom du champ
    debug.print oRst.Fields(nomChamp)
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 297
    Points : 74
    Points
    74
    Par défaut
    Bonjour marrot,

    je vous remercie pour les différentes versions.

    Je n'avais seulement inversé le point avec le point d'exclamation.

    Grâce à votre aide, j'ai pu faire un code qui tiens la route, et simple.

    Bonne soirée à vous, et encore merci.

    Bien cordialement,
    Benjamin.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Simplifier code avec condition
    Par AMO05 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/05/2009, 12h27
  2. Comment vérifier un code PHP avec beaucoup de conditions ?
    Par Gunner4902 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 03/07/2008, 14h53
  3. Multiples conditions avec macro
    Par Toine45 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 27/12/2007, 15h24
  4. Code avec condition "Or"
    Par jam92400 dans le forum Access
    Réponses: 2
    Dernier message: 12/02/2007, 14h43
  5. Débutante - Code VBA pour MsgBox avec actions multiples
    Par kisscool35 dans le forum Access
    Réponses: 5
    Dernier message: 22/08/2006, 17h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo