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 :

Pourquoi ai-je une erreur lors d'une recherche si la valeur n'existe pas ?


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Points : 7
    Points
    7
    Par défaut Pourquoi ai-je une erreur lors d'une recherche si la valeur n'existe pas ?
    Bonjour,

    Voilà en cherchant sur votre site j'ai trouvé ceci :

    Pourquoi ai-je une erreur lors d'une recherche si la valeur n'existe pas ?

    Malheureusement même en recopiant bêtement le code dans une macro excel cela ne marche pas : Erreur d'exécution '13', Incompatibilité de type.

    Dommage car je cherche à effectuer une recherche en fonction d'une valeur qui peut ne pas être trouvée.

    Quelqu'un a une solution ?

    EDIT : Voici mon code
    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
     
    Windows("CustomerLabel.XLS").Activate
        Cells(col1, Col2).Select
        tampon = ActiveCell.Value
        Windows("VGFrance.XLS").Activate
     
        Dim objCell As Range, PremAdresse As String, PlageResult As Range
        With Range("C2:C2000")
            Set objCell = .Find(What:=tampon, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext)
            If Not objCell Is Nothing Then
     
           tampon2 = Selection.Find(What:=tampon, After:=ActiveCell, LookIn:=xlFormulas, _
            LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Activate
     
            End If
        End With
    Merci

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut blackndoor et le forum
    Malheureusement même en recopiant bêtement le code dans une macro excel cela ne marche pas : Erreur d'exécution '13', Incompatibilité de type.
    Quelle ligne de code est en erreur, comment sont déclarées tes variables. On ne fait pas (souvent) des miracles! Du moins, sans informations précises.
    A+

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Salut Gorfael,

    Le code s'arrête à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set objCell = .Find(What:=tampon, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext)
    Avec une erreur 13. Voici le code complèt de ma macro :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    col1 = 2
    Col2 = 4
    col6 = 1
    col3 = 1
    col4 = 1
    tampon = 1
    tampon2 = 1
     
     
        Windows("CustomerLabel.XLS").Activate
        Cells(col1, Col2).Select
        tampon = ActiveCell.Value
        Windows("VGFrance.XLS").Activate
     
        Dim objCell As Range, PremAdresse As String, PlageResult As Range
        With Range("C2:C2000")
            Set objCell = .Find(What:=tampon, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext)
            If Not objCell Is Nothing Then
     
           tampon2 = Selection.Find(What:=tampon, After:=ActiveCell, LookIn:=xlFormulas, _
            LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Activate
     
            End If
        End With
     
       If tampon2 Then
     
        col3 = ActiveCell.Row
        col4 = ActiveCell.Column
        Range("D" & col3 & ":H" & col3).Select
        Application.CutCopyMode = False
        Selection.Copy
        Windows("CustomerLabel.XLS").Activate
        col6 = Col2 + 5
        Range("I" & col1).Select
      '  Range("I1918").Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        End If

  4. #4
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Bonjour blackndoor, Gorfael, le forum,

    Premiere chose :Les select et activate sont la plupart du temps inutiles et ils alourdissent et ralentissent le code. Beaucoup d'exemples a ce sujet dans le forum.

    L'utilisation d'ActiveCell est bien souvent probmèmatique, pour l'utiliser il faut maitriser ce qui est selectionné et c'est pas toujours facile.

    Je modifierai le code ainsi (pas testé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    tampon =  Windows("CustomerLabel.XLS").Cells(col1, Col2)
     
     Dim objCell As Range, PremAdresse As String, PlageResult As Range
     With Windows("VGFrance.XLS").Range("C2:C2000")
      Set objCell = .Find(What:=tampon,  LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext)
    Tu peux aussi instancié pour pouvoir utiliser l'une ou l'autre de tes fenetres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim W1 as workbook, W2 as workbook
    Set W1 = workbooks("CustomerLabel.XLS")
    et ensuite tu peux l'utiliser partout ou c'est nécessaire :


    En esperant que ces quelques pistes puissent te servir.

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Salut

    Je viens de mettre en place les modifes et le code bloc ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tampon = Windows("CustomerLabel_130309.XLS").Cells(col1, Col2).Value
    Avec une erreur 438, propriété ou méthode non gérée par cet objet.

  6. #6
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Autant pour moi, il faut utiliser workbooks

    Un exemple de code tiré d'une macro perso :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Workbooks("Nomdufichier.xls").Worksheets("nomdusheet").Range(Cells(1, 10).Address)

Discussions similaires

  1. Jouer un son suite à une erreur lors d'une saisie
    Par marcel marie dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 10/03/2010, 11h01
  2. Une alert lors d'une erreur
    Par biba2386 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 28/05/2008, 16h53
  3. Réponses: 3
    Dernier message: 05/01/2006, 15h14
  4. Réponses: 28
    Dernier message: 28/07/2005, 14h12
  5. Réponses: 2
    Dernier message: 21/06/2004, 15h55

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