Incompatibilité de type vba

Résolu
Pres62 Messages postés 28 Statut Membre -  
 Utilisateur anonyme -
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

  1. Utilisateur anonyme
     
    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
  2. Pres62 Messages postés 28 Statut Membre
     
    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
  3. Utilisateur anonyme
     
    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