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 :

Recherche de valeur max et comparaison dans une table


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 18
    Points : 12
    Points
    12
    Par défaut Recherche de valeur max et comparaison dans une table
    Bonjour, je cherche trouver un moyen de détecter des doublons dans une table entre 2 champs:

    Champ1 |Champ2

    A | 1 ---> A | 1
    A | 1 ---> A | 3
    A | 2 ---> A | 2
    B | 1 ---> B | 1

    A l'heure actuelle j'arrive a detecter les doublons en fontion de mon premier champs, le problème vient de ma modification: je dois trouver la plus grande valeur de mon champs 2 en fonction de mon premier champ pour pouvoir la stocker dans une variable et l'incrémenter par la suite.

    Or j'ai essayer plusieurs fonction(DLOOKUP,DMAX) mais aucun résultat.

    voici mon code:
    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
     
    Set rst = CurrentDb.OpenRecordset( _
      "SELECT * FROM [SOLODATA]", _
      dbOpenDynaset, dbInconsistent)
     
      champsActuel = rst("TAG3")
      champsActuel2 = rst("TAG2")
     
     
      With rst                                                                
            Do While Not .NoMatch   
     
                Do While Not .NoMatch                                           'comparaison des tuples avec le tuple selectionné
     
                .FindNext "[Tag3]= '" & champsActuel & "' and [Tag2]= '" & champsActuel2 & "'"                  'Cherche le premiers doublon dans la table
     
                    If .NoMatch = False Then                               'Si il y a un resultat alors on entre dans la procedure de modification
     
    ''''''''''''''''''''''''''''''''''''''''''''''' ICI ma procedure de modification'''''''''''''''''''''''''''''''''''''
    ''''''''''''''''''''''''''''''''''''''''''''''' Je cherche la plus grandes valeur de TAG3 pour TAG2= champsActuel2''''''''''''''''''''''''''''
                       '.FindFirst "MAX([Tag3]) and [Tag2]= '" & champsActuel2 & "'"
                       'test = DMax("Tag3", "SOLODATA", [Tag2] = " & champsActuel2 & ")
     
                        .Edit
                        valeurModifie = test + 1                            'Le doublon est remplacé par une valeur alternative
                        .Update
                       ' valeurModifie = valeurModifie + 1                       'Modification de la valeur alternative pour eviter les doublons
                     End If
                Loop
                .FindFirst "[Tag3]= '" & champsActuel & "' and [Tag2]= '" & champsActuel2 & "'"                      'Retour à l'enregistrement de depart
     
                '.MoveFirst
                .FindNext "([Tag3]<> '" & champsActuel & "' and [Tag2]= '" & champsActuel2 & "') or ([Tag3]= '" & champsActuel & "' and [Tag2]<> '" & champsActuel2 & "')"                     'Passage à l'enregistrement suivant
     
                .Edit
                champsActuel = ![Tag3]                                          'Affectation de l'enregistrement à controler à une variable
                champsActuel2 = ![Tag2]
                .Update
                test = DLookup("Tag3", "solodata", "Tag2" = " & champsActuel2 & ")
            Loop
        End With
    J'espère ne pas être trop brouillon.

    merci d'avance

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Je suis passé par une fonction en utilisant DMax() pour obtenir ma valeur maximale. J'ai modifié le format de l'un de mes champs (TAG3) qui etait en texte en format numérique pour résoudre un problème: DMax() détecté 3 en valeur max au lieux de 0013 par exemple.

    Depuis cette modification j'ai une erreur d’exécution '3464': Type de données incompatible dans l'expression du critère à la ligne 20 dans mon Find

    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
    Dim rst As DAO.Recordset
    Dim champsActuel As String         'Variable correspondant à l'enregistrement du recordSet en cours dans la table
    Dim champsActuel2 As String
    Dim valMax As Integer               'Variable correspondant à la valeur alternative en cas de doublon
     
    'Modification des doublons du champs TAG3 dans la table SOLODATA
    'Ici on selectionne tout les enregistrement contenue dans la colonne TAG3 de la table SOLODATA
    Set rst = CurrentDb.OpenRecordset( _
      "SELECT * FROM [SOLODATA]", _
      dbOpenDynaset, dbInconsistent)
     
      champsActuel = rst("TAG3")    'Initialisation de l'enregistrement en cours
      champsActuel2 = rst("TAG2")   'Initialisation de l'enregistrement en cours
     
      With rst                                                                 'Faire des actions sur le recordset
            Do While Not .NoMatch                                               'Exécuter changement si trouver
     
                valMax = CalculMax("Tag3", "solodata", "Tag2= '" & champsActuel2 & "'")
                Do While Not .NoMatch                                                                        'comparaison des tuples avec le tuple selectionné
                    .FindNext "[Tag3]= '" & champsActuel & "' and [Tag2]= '" & champsActuel2 & "'"           'Cherche le premiers doublon dans la table
                    If .NoMatch = False Then                                                                 'Si il y a un resultat alors on entre dans la procedure de modification
                        .Edit
                            valMax = valMax + 1                                                                  'Modification de la valeur alternative pour eviter les doublons
                            ![Tag3] = valMax                                                                   'Le doublon est remplacé par une valeur alternative
                        .Update
                    End If
                Loop
                .FindFirst "[Tag3]= '" & champsActuel & "' and [Tag2]= '" & champsActuel2 & "'"              'Retour à l'enregistrement de depart
                .FindNext "([Tag3]<> '" & champsActuel & "' and [Tag2]= '" & champsActuel2 & "') or ([Tag3]= '" & champsActuel & "' and [Tag2]<> '" & champsActuel2 & "') or ([Tag3]<> '" & champsActuel & "' and [Tag2]<> '" & champsActuel2 & "')"        'Passage à l'enregistrement suivant
                .Edit
                    champsActuel = ![Tag3]                                                                   'Affectation de l'enregistrement à controler à une variable
                    champsActuel2 = ![Tag2]
                .Update
     
            Loop
       End With
     
    'fermeture du recordSet
    rst.Close
    Set rst = Nothing
     
    End Sub
    Public Function CalculMax(strExpression As String, strDomaine As String, Optional strCritere As String) As Variant
        CalculMax = DMax(strExpression, strDomaine, strCritere)
    End Function
    En format texte le programme fonctionne normalement mais en cas de nombre tel que 0011 il y aura une confusion.

    Avez vous une idée pour mon erreur '3464'? j'ai essayé Cstr() et CInt() sur mes variables: aucun résultat.

    merci d'avance

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

Discussions similaires

  1. Déterminer la Valeur la plus grande dans une table
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 9
    Dernier message: 22/08/2014, 23h35
  2. Valeur existante ou pas dans une table
    Par Invité dans le forum VBA Access
    Réponses: 9
    Dernier message: 27/05/2008, 17h03
  3. recherche date de maj de données dans une table
    Par Switch03 dans le forum SQL
    Réponses: 5
    Dernier message: 05/03/2008, 13h15
  4. Réponses: 7
    Dernier message: 23/06/2006, 14h52
  5. Copier les valeurs d'un formulaire dans une table
    Par Cyphen dans le forum Access
    Réponses: 4
    Dernier message: 19/06/2006, 10h45

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