Avoir un numéro de série

Bonjour les amis

je vous trouve aujourd’hui hui avec un grand souci ,je vous explique :

j'ai une requête nommé requete99 ,le résultat de cette requête m affiche 7 champs dont un nommé REF_AUTO_GLOBAL

je voudrai que si le resultat de ce champ est :

- vide il renvoie la valeur vide
- si le résultat est vide les nombres identiques renvoie la valeur 1 et les autres 2 .....

dans le cas ci dessous le resultat doit etre comme cella

- les 4 premiers champ seront vides
-les champs 5 et 6 la valeurs 1
- les champs de 7 a 10 la valeurs 2
- les autres la valeur 3

MERCIIIIIIIII

Configuration: Windows / Chrome 72.0.3626.119

7 réponses

  1. Contributeur
    bonjour, peux-tu partager le texte de la requête en format SQL?
    0
    1. j'ai mieux je partage la base si vous le permettez (par mail) ou bien je copie le code vba fourni par un ami :


      Function fNumeroterSerie()
      Dim odb As Database
      Dim oRst As Recordset
      Dim stRupture As String
      Dim lgCompteur As Long

      Set odb = CurrentDb
      Set oRst = odb.OpenRecordset("RQ_MAJ_REF_AUTO", dbOpenDynaset)

      Do Until oRst.EOF
      ' Rupture sur le code si nul ou même série
      If Nz(oRst.Fields("REF_AUTO_GLOBAL"), "") <> stRupture Or IsNull(oRst.Fields("REF_AUTO_GLOBAL")) Then
      stRupture = Nz(oRst.Fields("REF_AUTO_GLOBAL"), "")
      lgCompteur = lgCompteur + 1
      End If

      oRst.Edit
      oRst.Fields("REF_AUTO_GLOBAL") = lgCompteur
      oRst.Update
      oRst.MoveNext
      Loop

      oRst.Close
      Set odb = Nothing

      End Function



      le seul souci avec ce code c est qui ne permet pas le retour a zero des que je passe a un autre client.
      0
      1. Contributeur
        tu changes donc totalement de sujet.
        si tu veux aller dans cette nouvelle direction:
        - partage le code SQL de la requête RQ_MAJ_REF_AUTO
        - explique quel est le nom du champ que tu appelles "client"
        merci, quand tu partages du code VBA, de choisir "basic" comme type de code.
        0
    2. rebonjour

      1- ci apres le code de la requete :

      SELECT IDCE.REF_AUTO_GLOBAL
      FROM IDCE
      WHERE (((IDCE.CODE_ETAT)="2" Or (IDCE.CODE_ETAT)="4" Or (IDCE.CODE_ETAT)="6") AND ((IDCE.CODE_PRODUIT)<>"W 1003 M"))
      ORDER BY IDCE.REF_TIERS, IDCE.REF_AUTO_GLOBAL;

      2- le champ client est le champ REF_TIERS

      3 ci apres le code en vba basic

      
      Function fNumeroterSerie()
      Dim odb As Database
      Dim oRst As Recordset
      Dim stRupture As String
      Dim lgCompteur As Long
       
      Set odb = CurrentDb
      Set oRst = odb.OpenRecordset("RQ_MAJ_REF_AUTO", dbOpenDynaset)
       
          Do Until oRst.EOF
              ' Rupture sur le code si nul ou même série
              If Nz(oRst.Fields("REF_AUTO_GLOBAL"), "") <> stRupture Or IsNull(oRst.Fields("REF_AUTO_GLOBAL")) Then
                  stRupture = Nz(oRst.Fields("REF_AUTO_GLOBAL"), "")
                  lgCompteur = lgCompteur + 1
              End If
       
              oRst.Edit
              oRst.Fields("REF_AUTO_GLOBAL") = lgCompteur
              oRst.Update
              oRst.MoveNext
          Loop
       
      oRst.Close
      Set odb = Nothing
       
      End Function
      
      0
      1. Contributeur
        suggestion:
        Function fNumeroterSerie()
        Dim odb As Database
        Dim oRst As Recordset
        Dim stRupture As String, stRuptClient As String
        Dim lgCompteur As Long
         
        Set odb = CurrentDb
        Set oRst = odb.OpenRecordset("RQ_MAJ_REF_AUTO", dbOpenDynaset)
        stRuptClient = ""
        lgCompteur = 0
        Do Until oRst.EOF
            If Nz(oRst!REF_TIERS, "") <> stRuptClient Then
                    ' rupture sur le client
                    lgCompteur = 0
                    stRuptClient = Nz(oRst!REF_TIERS, "")
                    stRupture = Nz(oRst.Fields("REF_AUTO_GLOBAL"), "")
                Else
                    ' Rupture sur le code si nul ou même série
                    If Nz(oRst.Fields("REF_AUTO_GLOBAL"), "") <> stRupture Or IsNull(oRst.Fields("REF_AUTO_GLOBAL")) Then
                        stRupture = Nz(oRst.Fields("REF_AUTO_GLOBAL"), "")
                        lgCompteur = lgCompteur + 1
                    End If
                End If
            oRst.Edit
            oRst.Fields("REF_AUTO_GLOBAL") = lgCompteur
            oRst.Update
            oRst.MoveNext
        Loop
        oRst.Close
        Set odb = Nothing
        End Function
        0
        1. rebonsoir be

          j'ai une erreur au niveau de la ligne 12

          If Nz(oRst!REF_TIERS, "") <> stRuptClient Then
          0
          1. Contributeur
            le texte du message d'erreur peut souvent à déterminer comment éviter l'erreur.
            suggestion:
            Function fNumeroterSerie()
            Dim odb As Database
            Dim oRst As Recordset
            Dim stRupture As String, stRuptClient As String, reqsql As String
            Dim lgCompteur As Long
             
            Set odb = CurrentDb
            reqsql = "SELECT IDCE.REF_TIERS, IDCE.REF_AUTO_GLOBAL " _
                + " FROM IDCE " _
                + " WHERE (((IDCE.CODE_ETAT) = '2' Or (IDCE.CODE_ETAT) = '4' Or (IDCE.CODE_ETAT) = '6') And ((IDCE.CODE_PRODUIT) <> 'W 1003 M')) " _
                + " ORDER BY IDCE.REF_TIERS, IDCE.REF_AUTO_GLOBAL "
            Set oRst = odb.OpenRecordset(reqsql, dbOpenDynaset)
            stRuptClient = ""
            lgCompteur = 0
            Do Until oRst.EOF
                If Nz(oRst!REF_TIERS, "") <> stRuptClient Then
                        ' rupture sur le client
                        lgCompteur = 0
                        stRuptClient = Nz(oRst!REF_TIERS, "")
                        stRupture = Nz(oRst.Fields("REF_AUTO_GLOBAL"), "")
                    Else
                        ' Rupture sur le code si nul ou même série
                        If Nz(oRst.Fields("REF_AUTO_GLOBAL"), "") <> stRupture Or IsNull(oRst.Fields("REF_AUTO_GLOBAL")) Then
                            stRupture = Nz(oRst.Fields("REF_AUTO_GLOBAL"), "")
                            lgCompteur = lgCompteur + 1
                        End If
                    End If
                oRst.Edit
                oRst.Fields("REF_AUTO_GLOBAL") = lgCompteur
                oRst.Update
                oRst.MoveNext
            Loop
            oRst.Close
            Set odb = Nothing
            End Function
            0
        2. rebonjour be

          ci après une capture d’écran de la requête, je te remercie d avance :-)
          0
          1. Contributeur
            quelle ligne pour cette erreur?
            0
          2. voila une capture d ecran et merci bcp

            0
        3. rebonsoir be

          le code s est débloquer le seul souci qui reste est que j'aimerai si possible que si le champ : REF_AUTO_GLOBAL n'est pas en double je voudrai qu il n'affiche aucun numéro de serie.

          je te remercie d avance
          0
          1. Contributeur
            je ne comprends pas "si le champ REF_AUTO_GLOBAL n'est pas en double". peux-tu expliquer?
            0
          2. je veux dire que si la reference n'est pas reppété , le champ REF_AUTO_GLOBAL doit etre vide

            et si le champ la reference est vide ,le champ REF_AUTO_GLOBAL doit etre vide

            je te remercie d'avance pour t avoir occupé de mon probleme ca va vraiment me sauver le boulot
            0
          3. Dans la capture d'ecran voila ce que le resultat doit etre:

            0
          4. Contributeur
            cela change pas mal par rapport à ta demande initiale...
            0