Incompatibilité de type vba

Résolu/Fermé
Pres62 Messages postés 23 Date d'inscription vendredi 27 avril 2012 Statut Membre Dernière intervention 2 juin 2012 - 27 avril 2012 à 09:28
 Utilisateur anonyme - 3 mai 2012 à 17:53
Bonjour,

Je suis débutante en vba et j'ai un problème au niveau d'une macro.
Dans un formulaire j'ai 2 listes déroulantes. Une qui retourne le nom d'un client. Et l'autre qui retourne l'id d'un client. On peut faire une recherche par id ou par nom.
J'aimerai mettre plusieurs conditions :
-Si aucun choix sélectionné -> Message d'erreur
-Si 2 choix sélectionné -> Message d'erreur
Sinon, on ouvre le formulaire client.

Pour la condition si 2 choix sélectionné, j'ai :
Si [Formulaires]![Formulaire Choix client]![Modifiable2]<>"" Et [Formulaires]![Formulaire Choix client]![Modifiable5]<>0 Alors
Message erreur.
Pour ça je n'ai aucun soucis ça fonctionne bien.

En revanche, quand je met :
Si [Formulaires]![Formulaire Choix client]![Modifiable2]="" Et [Formulaires]![Formulaire Choix client]![Modifiable5]=0

Il me met "Incompatibilité de type"

Je ne vois pas où est l'erreur vu que le contraire marche parfaitement.

Pouvez vous m'aider ?

Merci.


3 réponses

Utilisateur anonyme
27 avril 2012 à 13:24
Bonjour,

La majorité des contrôle sous VBA ont une propriété Text ou Value,
et ils retournent toujours un type String

Il serait souhaitable que tu ne laisse pas le compilateur
faire la promotion/démotion de type et que tu le réalise
explicitement.

Dim Valeur1 As String
Dim Valeur2 As String

Valeur1 = [Formulaires]![Formulaire Choix client]![Modifiable2]
Valeur2 = [Formulaires]![Formulaire Choix client]![Modifiable5]

If (Valeur1 <> "" And Val(Valeur2) <> 0) Then

If (Valeur1 = "" And Val(Valeur2) = 0) Then

Quand tu rencontre une erreur de ce type : "Incompatibilité de type"

Décompose tes morceaux, et effectue toi-même les
promotion/démotion.

Dans la ligne :
[Formulaires]![Formulaire Choix client]![Modifiable5]=0

Le compilateur doit faire une démotion [ de String à Integer ]

Or il semble en être incapable !

De plus, je te suggère aussi d'être explicite au niveau des champs

[Formulaires]![Formulaire Choix client]![Modifiable5].Value

Cdt

Lupin
0
Pres62 Messages postés 23 Date d'inscription vendredi 27 avril 2012 Statut Membre Dernière intervention 2 juin 2012
27 avril 2012 à 16:23
Bonjour,

Merci le problème est réglé :)
Maintenant j'ai un autre soucis...
J'ai des horaires de travail. Un exemple :
8:30 12:30 14:00 17:00
J'aimerai que les heures totales dans la journée soient dans une nouvelles colonnes dans la table.
J'ai effectuée une requête avec 3 colonnes supplémentaires :
heures matin
heures aprem
heures journée

Pour heures matin j'ai calculé la différence des horaires du matin :
heure matin : Format(VHeure([Heure Fin Matin])-VHeure([Heure Début Matin]);"Heure, abrégé")

Pour heures aprem, j'ai fais la même chose :
heure aprem : Format(VHeure([Heure Fin AM])-VHeure([Heure Début AM]);"Heure, abrégé")

Et pour heures journée :
heure journée : [heure matin]+[heure aprem]

Pour la colonne heures matin, il m'affiche bien 04:00
Pareil pour la colonne heures aprem : 03:00
Mais pour heures journée, il concatène au lieu d'additionner : 04:0003:00

Est-ce que tu saurais pourquoi ?

Merci

Pres62
0
Utilisateur anonyme
3 mai 2012 à 17:53
re:

Le compilateur concatène 2 strings

heure journée : [heure matin]+[heure aprem]

équivalent à :

heure = string1 & string 2

vérifie le type de tes variables ...

ce n'est certe pas facile de travailler avec des formats dates/heures ...

j'ai eu beaucoup plaisirs avec ce type de calcul :-)

Cdt

Lupin
0