[]
Nombre de membres 1 membre
Connectés : ( personne )
 

La Charte du Forum - La Charte du Forum

Forum - Forum
Problèmes Access des débutants - Problèmes Access des débutants


clos par 3Stone le 04/06/2013 : 23:33  Sujet n° 680  Recherche de valeur maximum et comparaison dans une table

le 30/05/2013 : 12:31
par maxmusix

Anonyme

visiteur

Bonjour, je cherche trouver un moyen de détecter des doublons dans une table entre 2 champs:
Champ1 |Champ2  
A        |  1          ---> A    |      1A         | 1          ---> A   |       3A          | 2          ---> A  |        2B         | 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 ma procédure de recherche de doublons si ça peut aider: 

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
            .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 =

Ecrire à maxmusix  sujet clos  Haut

[]   

DébutPrécédent [ 1 2 ] SuivantFin
Réponse n° 1
--------
le 30/05/2013 : 12:33
par maxmusix

Anonyme

visiteur
Je viens de voir l'espace que prends mon code je m'en excuse d'avance
Ecrire à maxmusix   clos par 3Stone le 04/06/2013 : 23:33  Haut
Réponse n° 2
--------
le 30/05/2013 : 16:59
par maxmusix

Anonyme

visiteur
Je viens de trouver une solution pour Trouver ma valeur maximal dans ma table, mais suis confronté à une erreur d’exécution '3464': "Type de données incompatible dans l'expression du critère" Au niveau de ma recherche.
 
 .FindNext "[Tag3]= ' " & champsActuel & " ' and [Tag2]= ' " & champsActuel2 & " ' "
Ecrire à maxmusix   clos par 3Stone le 04/06/2013 : 23:33  Haut
Réponse n° 3
--------
le 30/05/2013 : 18:06
par 3Stone

3Stone

Administrateur

Bonjour,

Désolé, mais je ne suis pas arrivé à donné un aspect correct à ton code... k

Pour ton problème, tu traite les champs comme des champs texte. Est-ce bien le cas ?

PS:
Pour coller correctement du code, tu commence par le coller.
Puis, tu le sélectionne et tu clique sur le petit signe "< >" dans la barre d'outils.

Cordialement,
Pierre(3stone)
  clos par 3Stone le 04/06/2013 : 23:33  Haut
Réponse n° 4
--------
le 30/05/2013 : 23:34
par maxmusix

Anonyme

visiteur
Voici mon code j'espère qu il sera plus lisible.

Les champs que je traite dans ma table sont: 
TAG2= type texte
TAG3= type numérique

Je m'explique, le champs TAG3 était de type texte avant mais j'ai remarqué un problème avec ma fonction DMax() en effet certain enregistrement etait du type 00012  ou 3 par exemple, et la fontion Dmax() me renvoyé 00012 comme valeur max car le champs etait de type texte, la recherche se faisait par caractère.Donc j'ai changé le format de ce champs et de la m'est venu cette erreur.
J'ai essayer les fonction Cstr() et CInt() sur mes variables, mais je vois pas comment je pourrais proceder. Avez vous une idée?
 
Code :
Dim champsActuel As String          'Variable correspondant à l'enregistrement du recordSet en cours dans la table
Dim champsActuel2 As String
'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
            
            test = 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
                        test = test + 1                                                                  'Modification de la valeur alternative pour eviter les doublons
                        ![Tag3] = test                                                                   '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 & "')"            
Ecrire à maxmusix   clos par 3Stone le 04/06/2013 : 23:33  Haut
Réponse n° 5
--------
le 31/05/2013 : 00:06
par 3Stone

3Stone

Administrateur

Bonsoir,
 
Citation :

Les champs que je traite dans ma table sont:
TAG2= type texte
TAG3= type numérique

 
Code :
.FindFirst "[Tag3]= '" & champsActuel & "' and [Tag2]= '" & champsActuel2 & "'"
 Cette écriture est valide pour des champs texte (à cause des quillemets)

Donc, pour Tag2 texte et Tag3 numérique:
 
Code :
.FindFirst "[Tag3]= '" & champsActuel & "' and [Tag2]= " & champsActuel2
 
donc, Tag3 sans les guillemets.

Cordialement,
Pierre(3stone)
Ecrire à 3Stone   clos par 3Stone le 04/06/2013 : 23:33  Haut
Réponse n° 6
--------
le 31/05/2013 : 08:47
par maxmusix

Anonyme

visiteur
Bonjour, je viens de tester mon code sans les simple quote mais j'ai toujours le même résultat. 

J'ai regardé comment mes variables été declaré et j'ai passé champsActuel2 en integer mais au final j'obtient toujours la même erreur. Cela ne viendrai t'il pas de mon find? 


merci de votre aide
Ecrire à maxmusix   clos par 3Stone le 04/06/2013 : 23:33  Haut
Réponse n° 7
--------
le 31/05/2013 : 09:01
par maxmusix

Anonyme

visiteur
Mille excuse j'ai relu encore une fois mon code depuis le début, par mégarde j'ai placé ma colonne Tag3 avant ma colonne Tag2 dans ma requête find, machinalement j'ai enlevé les guillemets au mauvais champs. 

Voila maintenant mon programme s’exécute normalement, je vous remercie de votre attention et vous félicite pour votre site et votre rapidité d'assistancee
cordialement
Ecrire à maxmusix   clos par 3Stone le 04/06/2013 : 23:33  Haut
Réponse n° 8
--------
le 31/05/2013 : 11:31
par maxmusix

Anonyme

visiteur
Ha apparemment le champ TAG3 doit être impérativement en format texte après la modification.

Serait t'il possible de modifier le format du champs à l'ouverture de mon programme et à le remettre en format texte à la fermeture? Si oui comment pourrais procéder?

merci encore
Ecrire à maxmusix   clos par 3Stone le 04/06/2013 : 23:33  Haut
DébutPrécédent [ 1 2 ] SuivantFin
actif sujet actif   clos sujet clos   Important! Important!   Nouveau Nouveau message   -   Rectifier Rectifier message   Clôturer Clôturer sujet   Remonter Remonter
[]
Catégories de discussion  Forum 



Haut