Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/07/2011, 11h10   #1
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : juin 2011
Messages : 75
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 75
Points : 27
Points : 27
Par défaut Problème de comparaison de champs

Bonjour,

J'ai un problème au niveau du résultat dans une comparaison de champs. En effet, sur deux fichiers access différents, j'ai exactement le même code vba.
Sur les 2 fichiers, je réalise
Code :
1
2
3
4
5
6
7
If champs1(i) > champs2(i) Then
        cmp = 1     'supérieur
        Exit For
    End If
    If champs1(i) < champs2(i) Then
        cmp = -1    'inférieur
        Exit For
Sachant que champs1(i) = "THA_HC" et que champs2(i) = "TH_RW"

Sur le fichier access original, j'obtiens comme résultat cmp = 1, et sur l'autre, dans exactement la même situation, j'obtiens cmp = -1.
Quelqu'un aurait une idée sur ce problème?
candrau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 11h29   #2
Membre du Club
 
Homme Pierrick
Étudiant
Inscription : avril 2011
Messages : 57
Détails du profil
Informations personnelles :
Nom : Homme Pierrick
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : avril 2011
Messages : 57
Points : 45
Points : 45
Citation:
Sur le fichier access original, j'obtiens comme résultat cmp = 1, et sur l'autre, dans exactement la même situation, j'obtiens cmp = -1.
Quelqu'un aurait une idée sur ce problème?
Bonjour! Il doit forcément y avoir une différence...
(réponse très utile hein?? )

Plus sérieusement, vérifie les types de tes variables, ça peut venir de la.
Sinon, exécute le code en mode pas à pas (touche f8 après avoir inséré un point d'arrêt sur le if) et survole toutes tes variables avec la souris. Tu te rendras surement compte que tu n'est pas "dans exactement la même situation".

A bientot!!
koluche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 11h33   #3
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : juin 2011
Messages : 75
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 75
Points : 27
Points : 27
Les types sont les mêmes, et les valeurs des variables sont pareilles (j'ai évidemment déjà vérifié tout ça en débugant pas à pas avant de poster mon message). D'ailleurs, pour tester, j'ai créer dans mes 2 fichiers un nouveau bouton, dans lequel j'ai copié-collé le code suivant
Code :
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
Private Sub Toggle0_Click()
Dim champs1(4) As Variant
    Dim champs2(4) As Variant
    Dim cmp As Variant
 
    cmp = 0
    champs1(0) = Empty
    champs1(1) = "THA_HL16_TRSPs"
    champs1(2) = "000FL"
    champs1(3) = "001"
    champs2(0) = Empty
    champs2(1) = "TH_RW-4_TRP"
    champs2(2) = "000FL"
    champs2(3) = "002"
 
    Debug.Print "debut fonction"
    cmp = Autres.compare_champs(3, champs1, champs2)
    If cmp = 0 Then
        Debug.Print "cmp = 0"
    Else
        If cmp = 1 Then
            Debug.Print "cmp = 1"
        Else
            Debug.Print "cmp = -1"
        End If
    End If
End Sub
Voila la fonction compare_champs
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
' Comparaison de deux listes de champs, en tenant compte des champs "null"
' Nota : un champ null est considéré comme inférieur à toute valeur.
Function compare_champs(nb_champs, champs1(), champs2())
' champ1 = champs2 =>  0
' champ1 > champs2 => +1
' champ1 < champs2 =>  -1
 
cmp = 0 'égaux par défaut
 
Debug.Print "debut"
For i = 1 To nb_champs
 
    If champs1(i) > champs2(i) Then
        cmp = 1     'supérieur
        Exit For
    End If
    If champs1(i) < champs2(i) Then
        cmp = -1    'inférieur
        Exit For
    End If
Next i
compare_champs = cmp
End Function
Et donc dans un fichier, j'obtiens cmp = 1, dans l'autre cmp = -1... Cela pourrait-il venir des bibliothèques par exemple?
candrau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 14h41   #4
Membre du Club
 
Homme Pierrick
Étudiant
Inscription : avril 2011
Messages : 57
Détails du profil
Informations personnelles :
Nom : Homme Pierrick
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : avril 2011
Messages : 57
Points : 45
Points : 45
Désolé de t'avoir demandé pour le débuggage, mais il y a beaucoup de gens qui viennent poser une question en ayant brulé des étapes!!
Et ton problème me semble tellement "mystique"...

J’espère ne pas passer pour un bouffon (qui à dit "Trop tard!!" ?)en te demandant:
dans ta fonction "Function compare_champs(nb_champs, champs1(), champs2())" j'ai l'impression que tu ne déclare pas ta variable "cmp". Si cette fonction se situe dans un module a part, ça peut poser problème non?

J’espère que quelqu'un de plus expérimenté que moi viendra t'aider =)
Bon courage!

EDIT: au passage, truc un peu futile mais qui peut t'aider a pas avoir trop mal au crane quand tu debug, tu peux modifier
Code :
1
2
3
4
5
6
7
8
9
 If cmp = 0 Then
        Debug.Print "cmp = 0"
    Else
        If cmp = 1 Then
            Debug.Print "cmp = 1"
        Else
            Debug.Print "cmp = -1"
        End If
    End If
par
Code :
Debug.print "cmp=" & cmp
koluche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 16h52   #5
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : juin 2011
Messages : 75
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 75
Points : 27
Points : 27
au niveau de la déclaration de cmp, effectivement, je n'avais même pas remarqué que je ne l'avais pas déclaré dans la fonction. Mais, je viens de tester, et ça ne change rien à mon problème
candrau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 22h23   #6
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Bonjour,

Le mieux, pour vérifier la comparaison, serait de traduire la chaine issue du fichier en caractère asccii (utiliser la fonction ASC) pour vérifier que les caractères sont bien identiques
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 09h56   #7
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : juin 2011
Messages : 75
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 75
Points : 27
Points : 27
Bonne idée ! Je viens de le faire et...... c'est bien les mêmes

J'ai même essayé, dans mon deuxième fichier (celui qui ne donne pas le résultat voulu) de lancer la comparaison sur les valeurs ascii correspondant à mes chaines de caractères, soit champs1(1) = "84726595727649549584828380115" et champs2(1) = "8472958287455295848280" , et ça me renvoie toujours comme résultat cmp = -1, donc que champs2(1) > champs1(1).... Je n'y comprend plus rien
candrau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 13h38   #8
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Citation:
champs1(1) = "84726595727649549584828380115" et champs2(1) = "8472958287455295848280" , et ça me renvoie toujours comme résultat cmp = -1, donc que champs2(1) > champs1(1).... Je n'y comprend plus rien
????

champs2(1)=8472958287455295848280
champs1(1)=84726595727649549584828380115

C'est bien le cas non ?
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 14h07   #9
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : juin 2011
Messages : 75
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 75
Points : 27
Points : 27
Dans ce cas, dans l'autre fichier, pourquoi ça me dit l'inverse avec les mêmes valeurs? vu que c'est exactement le même code, les mêmes variables, etc, je devrais logiquement obtenir le même résultat, non?
candrau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 14h43   #10
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Citation:
Dans ce cas, dans l'autre fichier, pourquoi ça me dit l'inverse
Citation:
avec les mêmes valeurs?
Est-ce vraiment le cas ?
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 14h52   #11
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : juin 2011
Messages : 75
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 75
Points : 27
Points : 27
le code de mon message n°3 est exactement identique sur les 2 fichiers (j'ai fait un copié-collé, et j'ai du vérifier une bonne dizaine de fois, lol), quand aux valeurs, je viens de les revérifier, et retester, et j'ai toujours le même résultat, et je ne sais pas pourquoi.... le pire, c'est que cette erreur de comparaison ne se fait pas tout le temps : sur 6546 champs testés, seulement 78 sont faux.....
candrau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 15h31   #12
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Il n'y aurait pas d'espaces ou de caractères non-imprmables par hasard ? (d'où mon idée de mettre en binaires TOUS les enregistrements pour vérifier (cf. le ASC)
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 15h39   #13
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : juin 2011
Messages : 75
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 75
Points : 27
Points : 27
les seules caractères sont des lettres majuscules ou minuscules, des chiffres, underscore, ou un trait d'union... ce sont tous des caractères imprimables, non?

Ce qui est encore plus étrange, c'est que j'ai fait le même test en utilisant la fonction StrComp, et je retrouve le même problème !!!

De plus, j'ai quand même réussi à cibler le caractère qui fait planter la conversion, apparemment ça serait l'underscore.
candrau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 16h27   #14
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Peux-tu nous fournir en PJ un échantillon du jeux d'essai qui plante ? (voire-même les tables complètes)
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 09h47   #15
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : juin 2011
Messages : 75
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 75
Points : 27
Points : 27
Malheureusement, je suis stagiaire au sein d'une entreprise, et je n'ai pas le droit de divulguer le code et les tables utilisées, désolé...

De toute façon, grâce à l'astuce d'utiliser le code ascii, j'ai pu bidouiller mon code pour que ça marche de la manière suivante : j'ai copié dans une variable tampon mes chaines de caractères à comparer, puis j'ai remplacé dans ces copies le caractère underscore (qui entrainait une mauvaise comparaison) par un autre caractère (trouvé grâce à la table ascii), qui lui, donnait un bon résultat de comparaison. C'est barbare, mais au moins, je n'ai plus aucune erreur dans mes tables....

Merci encore pour avoir réfléchi sur mon problème
candrau est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h24.


 
 
 
 
Partenaires

Hébergement Web