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 :

Qualificateur incorrect sur un offset apres une methode find [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Femme Profil pro
    controleur de gestion
    Inscrit en
    Novembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : controleur de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 53
    Points : 60
    Points
    60
    Par défaut Qualificateur incorrect sur un offset apres une methode find
    bonjour a tous, :

    Je viens a vous pour une histoire de syntaxe.

    Je souhaite obtenir la valeur de la cellule a cote d'une autre( elle trouve par la method find)

    J'ai essaye un offset mais VBA n'apprecie pas et affiche:

    Erreur de compilation, qualificateur incorrect
    Pouvez-vous me donner une piste?



    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
    Private Sub ComboBox1_Change() 'Define action whem you select a Dealer Code
    
    '1/ Define elements:
        Dim Trouve As Range, PlageDeRecherche As Range
        Dim Valeur_Cherchee As String, AdresseTrouvee As String
        Dim Dealer_code As String
    
    '2/ assigning values to variables:
    
        'a/ Reserch Dealer code...
            Valeur_Cherchee = ComboBox1.Value
        
        'b/ ...In second columns in sheet called "2014 &projection"
            Set PlageDeRecherche = Sheets("2014 &projection").Columns(2)
    
    
    '3/Find method with exact value,(LookAt:=xlWhole)
        Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
    
    '4/Processing the possible error : If nothing is found:
        If Trouve Is Nothing Then
            'a/ value isnot found:
            AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
        Else
            'b/value is found
            AdresseTrouvee = Trouve.Address
        End If
        
    '5/select the Dealer name
    Dealer_code = Range(AdresseTrouvee).Offset(0, -1).Value
    
    MsgBox Dealer_code
    
    '6/ reset variable
        Set PlageDeRecherche = Nothing
        Set Trouve = Nothing
    End Sub

  2. #2
    Invité
    Invité(e)

  3. #3
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Si la méthode ne trouve pas,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
    ne retourne pas une adresse valide. Donc,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dealer_code = Range(AdresseTrouvee).Offset(0, -1).Value
    plante.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  4. #4
    Membre du Club
    Femme Profil pro
    controleur de gestion
    Inscrit en
    Novembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : controleur de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 53
    Points : 60
    Points
    60
    Par défaut
    Desole, mais il me semble pas que ce osit la bonne direction.

    rdurupt, je ne comprend pas le post ni la reponse apportee

    En effet, la method Find toute seule fonctionne, et un gestion d'erreur est inclut.


    Mon probleme est d'ecrire la bonne syntaxe pour avoir la cellule a cote de celle trouve.

    j'ai plus l'impression que VBA n'apprecie pas car "AdresseTrouvee" est definit comme string et que la ligne ci-dessou est mal ecrite

    Je passe d'un .address a un. value, c'est pas une erreur?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    '5/select the Dealer name
    Dealer_code = Range(AdresseTrouvee).Offset(0, -1).Value

  5. #5
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    ce n'est pas une erreur.
    Mais ne pas lire la réponse de daniel-c en est sûrement une.
    Et ta colonne ne doit pas être A non plus, colonne(0) n'existe pas.

    eric

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Il est vraisemblablement au je n'ai pas bien compris la question!
    Ceci dit je suis pas sur que la cellule range( " 0n'est pas présent dans " & PlageDeRecherche.Address)existe!

  7. #7
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    L'erreur vient tout simplement du fait qu'après ton bloc If Then Else End If, tu as cette ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dealer_code = Range(AdresseTrouvee).Offset(, -1).Value
    et comme la valeur peut prendre --> Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address <-- ce qui n'est vraiment pas une adresse valide donc plantage.
    Il te faut intégrer cette ligne de code dans ton bloc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    '4/Processing the possible error : If nothing is found:
        If Trouve Is Nothing Then
            'a/ value isnot found:
            AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
        Else
            'b/value is found
            '5/select the Dealer name
            Dealer_code = Range(Trouve.Address).Offset(, -1).Value
     
        End If
     
     
        MsgBox IIf(Dealer_code = "", "Valeur pas trouvée !", Dealer_code)
    Hervé.

  8. #8
    Membre du Club
    Femme Profil pro
    controleur de gestion
    Inscrit en
    Novembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : controleur de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 53
    Points : 60
    Points
    60
    Par défaut
    Je m'excuse eric mais la reponse de Daniel etait un peu trop laconique pour que je comprenne du premier coup... j'apprends vite mais faut m'expliquer longtemps

    Bref, j'ai compris et hier soir j'ai modifie mon code avant d'avoir acces a vos reponses ce matin.

    Ton code est parfait Theze, je ne connaissais pas msgbox iif

    Il me reste plus qu'a comprendre pourquoi je ne trouve pas les valeurs attendus

  9. #9
    Membre du Club
    Femme Profil pro
    controleur de gestion
    Inscrit en
    Novembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : controleur de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 53
    Points : 60
    Points
    60
    Par défaut Trouve!
    pour mon dernier probleme il suffisait de supprimer la ligne qui met a zero la plage de recherche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set PlageDeRecherche = Nothing
    Merci a tous pour vos reponses

    Pour les courageux de passage voici le code complet


    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
    Private Sub ComboBox1_Change() 'Define action whem you select a Dealer Code
     
    '1/ Define elements:
        Dim Trouve As Range, PlageDeRecherche As Range
        Dim Valeur_Cherchee As String, AdresseTrouvee As String
        Dim Dealer_name As String
     
    '2/ assigning values to variables:
     
        'a/ Reserch Dealer code...
            Valeur_Cherchee = ComboBox1.Value
     
        'b/ ...In second columns in sheet called "2014 &projection"
            Set PlageDeRecherche = Sheets("2014 &projection").Columns(2)
     
     
    '3/Find method with exact value,(LookAt:=xlWhole)
        Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
     
    '4/Processing the possible error : If nothing is found:
        If Trouve Is Nothing Then
            'a/ value isnot found:
            AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
        Else
            'b/value is found
            '5/select the Dealer name
            Dealer_name = Range(Trouve.Address).Offset(, -1).Value
     
        End If
     
        MsgBox IIf(Dealer_name = "", "Valeur pas trouvée !", Dealer_name)
     
    '6/ reset variable
           Set Trouve = Nothing
    End Sub

  10. #10
    Invité
    Invité(e)
    Par défaut
    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
    Function SerchXls(Myrange As Range, MyCellule As Range, strRecherche, EntierCell As Boolean, EnBoucle As Boolean) As Long '
    On Error Resume Next
    SerchXls = 0
    If EntierCell = False Then Entier = xlPart Else Entier = xlWhole
       SerchXls = Myrange.Cells.Find(What:=strRecherche, After:=MyCellule, LookIn:=xlFormulas, LookAt _
            :=Entier, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=EntierCell).Row
      If SerchXls <= MyCellule.Row And EnBoucle = False Then SerchXls = 0
    End Function
    Sub Macro1()
    '...code avant
    l = SerchXls(Sheets("2014 &projection").Columns("B:B"), Range("B1"), Valeur_Cherchee, True, False)
    If l = 0 Then MsgBox " Pas trouvé": Exit Sub
    Dealer_code = Cells(l, 2).Offset(0, -1).Value
     
    End Sub

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

Discussions similaires

  1. Réponses: 65
    Dernier message: 19/11/2010, 13h40
  2. [MySQL] rester sur page courante apres une insertion..
    Par xavioche77 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/06/2010, 22h37
  3. Réponses: 6
    Dernier message: 26/05/2010, 22h17
  4. Réponses: 0
    Dernier message: 28/07/2009, 14h39
  5. Renseignement sur la syntaxe d'une methode
    Par Dev_info dans le forum Langage
    Réponses: 6
    Dernier message: 25/04/2007, 15h43

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