IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Erreur de type dans methode find


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 48
    Par défaut Erreur de type dans methode find
    Bonjour,

    Je suis en train de programmer en VBA, j'ai un problème avec la methode Find, disons que mon problème serait + du a une erreur de type mais j'arrive pas a le résoudre

    Voila mon code commenté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Cellule As Range, Recherche As Range, Derniere_cellule As Range, nombre As Integer
    
    Set Recherche = ThisWorkbook.Worksheets("Feuil1").Range("A3:A60000") 'selection des cellules A3 a A60000
    Set Derniere_cellule_non_vide = Recherche.Range("A3").End(xlDown) 'Recherche de la derniere cellule non vide dans la colonne A en debutant a la ligne 3
    Set Cellule = Recherche.Find(nombre, Recherche.Range("A3").End(xlDown), xlValues, xlWhole, xlByColumns, xlPrevious) 'Recherche du "nombre" en commencant par la derniere cellule non vide et en remontant vers le haut
    Je sais que l'erreur provient de Recherche.Range("A3").End(xlDown) dans la methode Find et plus exactement du 2eme élément AFTER (As Range), la méthode End renvoi également un Range donc je ne vois pas pourquoi ca bug

    Merci pour votre aide

  2. #2
    Membre chevronné
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Par défaut
    Salut,

    Je ne vois pas d'erreur dans le code.
    Enfin mis a part, la variable 'Derniere_cellule_non_vide' non declaree (ou mal declaree).

    Une piece jointe peut etre...

    ++
    Minick

  3. #3
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 126
    Par défaut
    QSalut
    Moi je regarderai du coté de nombre, voir ce que tu mets dedans et le comparerais au contenue des cellules, a mon avis ton problème doit ce situer ici.

    Perso je comprend pas trop ton code, pourquoi faire Recherche.range("A3")..
    autant directement faire range("A").... ou si tu n'es pas sur la même feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sheets("Feuil1").range("A3").end(xldown)
    Autre chose "A60000", faut faire très attention avec ça, si tu es en excel2007 c'est OK par contre sur une version précédente ça va bugger, le nombre de ligne est exprimer par un Integer sous version < 2007 soit 32 767, en version 2007 c'est un long donc 2M et quelques.
    Pour etre comptible interversion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Recherche = Worksheets("Feuil1").Range("A3", Worksheets("Feuil1").Cells(Rows.Count, "A").End(xlUp))
    Pour ce qui est de la suite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Cellule = Recherche.Find(nombre, Range("A3").End(xlDown), xlValues, xlWhole, xlByColumns, xlPrevious)
    me semble preferable.

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  4. #4
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 48
    Par défaut
    Merci, c'est impec, l'erreur provenait de la 1ere ligne (Set recherche = ...), je ne savais pas pour le coup du passage par Integer (je travaille avec la version 2003).


    Si maintenant je rajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim resultat As Boolean
    nombre = 50 (ce nombre n'existe dans aucune des cellules de la colonne A)
     
    Resulat = IIf(IsEmpty(CellFound.Address), True, False)
    ou
    Resulat = IIf(IsNull(CellFound), True, False)
    MsgBox Resultat]
    Je n'arrive jamais a obtenir True, quel test dois-je effectuer ?

  5. #5
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 126
    Par défaut
    Re
    Je dirais ni l'une ni l'autre, tu devrais regarder l'aide de find (cliques sur Find et tapes sur F1), il y a un exemple, en gros ça donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Set Cellule = Recherche.Find(nombre, Range("A3").End(xlDown), xlValues, xlWhole, xlByColumns, xlPrevious)
    If not Cellule = Nothing Then
      'Nombre a été trouvé et la cellule est pointé par Cellule
    Else
      'Pas trouvé
    End If
    Voili
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  6. #6
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 48
    Par défaut
    C'est parfait, je connaissais pas le Nothing... J'ai juste eu a remplacer le '=' par 'Is'

    Merci pour ton aide

  7. #7
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 48
    Par défaut
    Voila ce que j'ai ecrit, maintenant l'erreur (mismatch) est sur la ligne Set Cellule...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Sub Rec()
     
    Dim Cellule As Range, Recherche As Range, nombre As Integer
    nombre = 22
     
     Set Recherche = Worksheets("Feuil1").Range("A3", Worksheets("Feuil1").Cells(Rows.count, "A").End(xlUp))
     dl = Range("A3").End(xlDown).Row + 1
     Set Cellule = Recherche.Find(nombre, Range("A" & dl), xlValues, xlWhole, xlByColumns, xlPrevious)
     
    End Sub

  8. #8
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    je ne comprends pas cette erreur mais corrige ton code et déclares la variable "dl"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Sub Rec()
     
    Dim Cellule As Range, Recherche As Range, nombre As Integer, dl as integer
    nombre = 22
     with Worksheets("Feuil1")
     Set Recherche = .Range("A3", .Cells(Rows.count, "A").End(xlUp))
     dl = .Range("A3").End(xlDown).Row + 1
     Set Cellule = Recherche.Find(nombre, .Range("A" & dl), xlValues, xlWhole, xlByColumns, xlPrevious)
    end with
     
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  9. #9
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 126
    Par défaut
    Salut
    As tu tout simplement essayé de commencer par la 1er cellule de la sélection? A3, ainsi le cellule précédente a A3 dans Recherche c'est la dernière cellule de Recherche, je pense que Find et fait pour être utilisé comme ça.
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  10. #10
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 48
    Par défaut
    Je voulais envoye le fichier XLS mais c'etait limite a 128ko, en gros voila ce que ca donne :

    A3 120 07:55
    .
    .
    A30000 55 12:57
    A30001 22 12:58
    A30002 22 12:59


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Public Sub Rec()
     
    Dim Cellule As Range, Recherche As Range, nombre As Integer, dl As Integer
     
    nombre = 22
     
    Set Recherche = Worksheets("Feuil1").Range("A3", Worksheets("Feuil1").Cells(Rows.Count, "A").End(xlUp))
    dl = Worksheets("Feuil1").Range("A3").End(xlDown).Row + 1
    MsgBox dl 'affiche 30003
    Set Cellule = Recherche.Find(nombre, Worksheets("Feuil1").Range("A" & dl), xlValues, xlWhole, xlByColumns, xlPrevious) 'bug mismatch
     
    Set Cellule = Recherche.Find(nombre, Worksheets("Feuil1").Range("A3").End(xlDown), xlValues, xlWhole, xlByColumns, xlPrevious)
    MsgBox Cellule.Address 'affiche $A$30001 donc ne detecte pas le nombre 22 dans la cellule A30002
     
    Set Cellule = Recherche.Find(nombre, Worksheets("Feuil1").Range("A30002"), xlValues, xlWhole, xlByColumns, xlPrevious)
    MsgBox Cellule.Address 'affiche $A$30001 donc ne detecte pas le nombre 22 dans la cellule A30002
     
    Set Cellule = Recherche.Find(nombre, Worksheets("Feuil1").Range("A30003"), xlValues, xlWhole, xlByColumns, xlPrevious) 'bug mismatch
     
    Set Cellule = Recherche.Find(nombre, Worksheets("Feuil1").Range("A3"), xlValues, xlWhole, xlByColumns, xlPrevious)
    MsgBox Cellule.Address 'affiche $A$30002 donc MAGIQUE
     
    End Sub
    Sur d 'avoir la baguette en moins Qwazerty ?
    Merci a vous 2 pour votre aide!

  11. #11
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Quelques corrections
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Sub Rec()
     
    Dim Cellule As Range, Recherche As Range, nombre As Integer, dl As Integer
     
    nombre = 22
    With Worksheets("Feuil1")
    dl = .Range("A3").End(xlDown).Row + 1
    Set Recherche = .Range("A3:A" & dl - 1)
    MsgBox dl 'affiche 30003
    Set Cellule = Recherche.Find(nombre, .Range("A3"), xlValues, xlWhole, xlByColumns, xlPrevious)
    MsgBox Cellule.Address 'affiche $A$30002 donc MAGIQUE
    End With
     
    End Sub
    alors si c'est magique, est-ce résolu ?
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur de type dans ma fonction
    Par adriennoob dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 19/04/2010, 11h11
  2. Réponses: 1
    Dernier message: 19/11/2008, 17h47
  3. erreur dans un Find
    Par zandru dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/08/2008, 10h54
  4. Réponses: 3
    Dernier message: 22/05/2006, 19h23
  5. [LG] Erreur de type incompatible dans assignment
    Par Tuxico dans le forum Langage
    Réponses: 4
    Dernier message: 03/12/2005, 21h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo