Userform "Erreur de compilation : incompatibilité de type

ptitemeuh Messages postés 83 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 8 juillet 2010 - 17 mai 2010 à 15:08
ptitemeuh Messages postés 83 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 8 juillet 2010 - 19 mai 2010 à 14:55
Bonjour à tous,

J'ai un petit soucis avec mon programme... J'ai créé une Userform et je voudrais qu'il recherche dans les contacts situés dans mon carnet d'adresses sous Outlook un mot ou phrase que j'inscris dans la TextBox1.

Voici mon programme:
Private Sub CommandButton1_Click()

Dim myContactFolder As MAPIFolder
Dim sFilder As String
Dim Rechercher As Object

Set Rechercher = TextBox1.Text
Set Rechercher = myContactFolder.Items.Find(sFilder)

If Not TypeName(Rechercher) = "Nothing" Then
    ListBox1.AddItem ("Trouvé")
    Else
        ListBox1.AddItem ("Le mot ou la phrase recherchée est introuvable")
End If
    


Lorsque je clique sur mon bouton rechercher, j'ai l'erreur de compilation : incompatibilité de type sur .Text de ma ligne Set Rechercher = TextBox1.Text Pourquoi ? Qu'est-ce qui bloque ? Quelqu'un peut m'aider svp?

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
17 mai 2010 à 16:32
Salut
Deux choses étonnantes :
    Dim sFilder As String
    Dim Rechercher As Object
    Set Rechercher = TextBox1.Text
    Set Rechercher =  myContactFolder.Items.Find(sFilder)
Si TextBox1 est la chaine à rechercher, tu ne la fournis pas à la fonction de recherche.
Tu lui donnes sFilder à chercher, mais il est toujours vide.
Set Rechercher = TextBox1.Text
sFilder = TextBox1.Text

Ensuite, que veut dire cette ligne :
    If Not TypeName(Rechercher) = "Nothing" Then
Si tu cherches à vérifier que l'objet Rechercher existe bien, il faut utiliser :
    If Not Rechercher Is Nothing Then
Ce qui est complètement différent.
TypeName identifie bien le type d'une variable (pas d'un objet), mais tu ne peux pas le comparer à du texte, uniquement à des types définis par le système, genre vbString ou vbObject dans ton cas.


Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
ptitemeuh Messages postés 83 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 8 juillet 2010
17 mai 2010 à 16:47
Salut,

Merci pour ton aide, déjà j'y vois un peu plus clair pour cette erreur. Je viens de modifier le code et fais un essai avec :
Private Sub CommandButton1_Click()

Dim sFilder As String
Dim Rechercher As Object

sFilder = TextBox1.Text
Set Rechercher = myContactFolder.Items.Find(sFilder)

If Not Rechercher Is Nothing Then
    ListBox1.AddItem ("Trouvé")
    Else
        ListBox1.AddItem ("Le mot ou la phrase recherchée est introuvable")
End If


Par contre, une seconde erreur apparait Erreur d'exécution '424' : Objet requis sur la ligne suivante :
Set Rechercher = myContactFolder.Items.Find(sFilder)


Ce que je ne comprends pas c'est que Rechercher est bien en objet
0
ptitemeuh Messages postés 83 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 8 juillet 2010
18 mai 2010 à 09:41
Salut,

Lors du débogage, je viens de m'apercevoir que lorsque je clique deux fois sur myContactFolder, il est définit comme vide.

J'ai essayé :

Dim myContactFolder As Outlook.ContactItem


ou encore:

Dim myContactFolder as MAPIFolder


Mais j'ai encore une erreur... Erreur d'exécution '91' : Variable objet ou bloc With non défini
Et lorsque je clique deux fois sur myContactFolder, il est définit comme Nothing.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 mai 2010 à 18:26
En regardant dans l'aide de la fonction Find, tu as un exemple tout fait avec les bons types de variables.

Même si ta commande Rechercher renvoyait quelque chose, elle renverrait un objet ContactItem

myContactFolder doit être du type Outlook.MAPIFolder
Rechercher doit être du type Outlook.ContactItem

Dans ce même exemple, tu verras que la syntaxe d'appel est un peu différente de cette que tu utilises.
Avant de venir ici, regarde dans l'aide, please.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ptitemeuh Messages postés 83 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 8 juillet 2010
19 mai 2010 à 14:55
Salut,

J'ai bien regardé l'aide, modifier mon programme pour me facilité la tâche.

A l'ouverture mon code met en place automatiquement une barre d'outils avec différents boutons. J'ai un de mes "boutons" qui me pose problème :
[list]
Pour l'instant, je n'écris pas le mot à chercher dans mon msoComboLabel, j'appuie juste sur entrée;
Dans mon code, j'ai demandé de chercher "toto" dans mes textbox. Mais le problème c'est qu'elle ne me détecte pas ce mot lorsqu'il yen a plusieurs.
/list

Voici mon code:

Sub Lancer_recherche()

Dim olApp As Outlook.Application
Dim objContact As Outlook.ContactItem
Dim objContacts As Outlook.MAPIFolder
Dim objNameSpace As Outlook.NameSpace

Set olApp = CreateObject("Outlook.Application")
Set objNameSpace = olApp.GetNamespace("MAPI")
Set objContacts = objNameSpace.GetDefaultFolder(olFolderContacts)
Set objContact = objContacts.Items.Find("[Notes]=""toto""")

If Not TypeName(objContact) = "Nothing" Then
    MsgBox "not nothing" & vbCrLf & objContact.FullName
    Else
        MsgBox "nothing"
End If
End Sub

Sub Lancer_tri()
    UserForm2.Show
End Sub

' Création barre d'outils
Sub Barre_outils()

Dim mesBarres As CommandBars
Dim mabarre As CommandBar
Dim MaBarreCopy As CommandBar
Dim MonBouton2 As CommandBarButton
Dim MonTexte1 As CommandBarComboBox


Set mesBarres = ActiveExplorer.CommandBars 'Collection des barres et menus de Outlook
For Each mabarre In mesBarres 'Recherche de la barre "Fournisseurs"
    If mabarre.NameLocal = "Fournisseurs" Then
        Set MaBarreCopy = mabarre
    End If
Next

If MaBarreCopy Is Nothing Then 'Si la barre n'a pas été trouvée alors...
'Création de la barre d'outils
    Set MaBarreCopy = mesBarres.Add("Fournisseurs")

    Set MonBouton2 = MaBarreCopy.Controls.Add
    
'Insertion sur la barre de menus du bouton de commande "Rechercher les fournisseurs contactés au cours d'une affaire"
        
        Set MonTexte1 = MaBarreCopy.Controls.Add(Type:=msoControlEdit)  'Saisie de la recherche
        MonTexte1.Style = msoComboLabel
        MonTexte1.Caption = "Recherche Fournisseurs"
        MonTexte1.TooltipText = "Recherche des fournisseurs contactés au cours d'une affaire"
        MonTexte1.Text = "Tapez un mot ou une phrase du nom de l'affaire"
        MonTexte1.OnAction = "Lancer_recherche"
        MonTexte1.Width = 365
        MonTexte1.BeginGroup = True

    Set MonBouton2 = MaBarreCopy.Controls(1) 'Accès au deuxième bouton
        MonBouton2.Caption = "Tri Fournisseurs"          'Texte du bouton
        MonBouton2.Style = msoButtonIconAndCaption                'Bouton avec image et texte
        MonBouton2.FaceId = 591                                   'Image du bouton
        MonBouton2.TooltipText = "Trier les fournisseurs par nombre de consultations" 'Etiquette
        MonBouton2.OnAction = "Lancer_tri"

        MaBarreCopy.Protection = msoBarNoCustomize + msoBarNoChangeDock 'Empêche l'utilisateur d'ajouter manuellement un bouton à la barre de menus et n'autorisera pas de positionner la barre de menus, verticalement, à gauche ou à droite de la feuille
        MaBarreCopy.Position = msoBarTop
        MaBarreCopy.Visible = True

End If

End Sub


0
Rejoignez-nous