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 :

RechercheV avec paramètre variable [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 12
    Points : 8
    Points
    8
    Par défaut RechercheV avec paramètre variable
    Bonjour, dans le cadre d'un stage je suis amené à créer un programme VBA, voici où ça bloque :

    Dans un fichier "tampon", je dois comparer un grand nombre venant de documents différents.
    J'utilise donc une rechercheV, le premier paramètre dépends d'une variable i et le dernier d'une variable j...au final ça ne fonctionne pas.

    Voici ce que je rentre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim i, j as Integer
    Dim X, Y As Double
     
    X = VLOOKUP(cells(i,2),'[" + CStr(SuiviGF) + "]Pool DATA'!R8C4:R2000C140,91 + j,False)"
     
    Y = VLOOKUP(cells(i,2),'[" + CStr(RapprochementFIM) + "]REPORT'! R17C3:R2000C140,j+1,False)"
     
    Windows("Poids.xls").Activate
    Sheets("Poids").Select
    Cells(i, j + 2).Select
    ActiveCell.FormulaR1C1 = _
                  "=IF(ABS(X - Y) < 0.0001, ""OK"", ""ECART"")"
    Je ne vois pas où est l'erreur.
    Au passage, à quoi sert "Option Explicit" et quelle est la différence entre long et integer ?

    Merci d'avance pour votre aide.

  2. #2
    Membre averti Avatar de delphine35
    Femme Profil pro
    Analyste BO
    Inscrit en
    Novembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste BO

    Informations forums :
    Inscription : Novembre 2009
    Messages : 265
    Points : 377
    Points
    377
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    X = VLOOKUP(cells(i,2),'[" + CStr(SuiviGF) + "]Pool DATA'!R8C4:R2000C140,91 + j,False)"
     
    Y = VLOOKUP(cells(i,2),'[" + CStr(RapprochementFIM) + "]REPORT'! R17C3:R2000C140,j+1,False)"
    Tu n'aurais pas un problème de ' ou de " (nombre impair de " ) ??

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Bonjour

    pour commencer tu ne peux pas utiliser VLookup dirrectement comme ça ensuite attention à l'utilisation des ' et ", pour finir pour concatener des chaine de caractère utilise plutot & que +

    je pense que ta première ligne devrait plutot ressembler à ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    X = Application.WorksheetFunction.VLookup(Cells(i, 2), "[" & CStr(SuiviGF) & "]Pool DATA'!R8C4:R2000C140," & 91 + j & ",False)")
    Il n'y a que la partie entre ( ) qui dépend de ce que tu attend.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Merci pour votre aide, zyhack j'ai appliqué ton code, .VLookup devient surligné en bleu et je reçois le message d'erreur suivant :

    Erreur de compilation :
    Argument non facultatif

    Que dois-je faire ?
    En fait je ne connais pas la structure de la fonction rechercheV, j'ai copié-collé une fonction rechercheV (qui fonctionnait dans une case : ActiveCell.FormulaR1C1...).

    Merci pour vos conseils !

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    dans l'aide excel tu peux trouver comment utiliser RECHERCHEV avec le détail des paramètre

    RECHERCHEV(valeur_cherchée;table_matrice;no_index_col;valeur_proche)



    pour VB c'est presque pareil, le tout est de définir pour VLookup

    valeur_cherchée : Cells(i, 2)
    table_matrice : Workbooks(CStr(SuiviGF)).Worksheets("Pool DATA").Range("D8:EJ2000")
    no_index_col : 91 + j
    valeur_proche : False

    le tout séparé par des virgules

    ce qui devrait donné quelque chose dans le genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    X = Application.WorksheetFunction.VLookup(Cells(i, 2), Workbooks(CStr(SuiviGF)).Worksheets("Pool DATA").Range("D8:EJ2000"), 91 + j, False)
    sauf que dans ton premier code tu utilises les variable i et j mais ou sont elles écritent ???

    ou est écrit la variable SuiviGF ? il s'agit bien du nom du classeur dans cette variable ??

    "Pool DATA" est bien le nom de la feuille ??

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Ca marche bien, j'ai un peu changé le code, le problème est que pour Y, à un moment, la rechercheV ne fonctionne pas (c'est pas écrit mais après avoir vérifier dans le classeur sondé, ça renvoit NA), et je n'arrive pas à mettre un If ISNA, voici mon bout de 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
    18
    19
    20
     
    If WorksheetFunction.IsNA(WorksheetFunction.VLookup(Cells(i, 2), Workbooks(CStr(SuiviGF)).Worksheets("Pool DATA").Range("D8:EJ2000"), 91 + j, False)) = True Then
    X = 1000 'Valeur abhérante 
    Else: X = WorksheetFunction.VLookup(Cells(i, 2), Workbooks(CStr(SuiviGF)).Worksheets("Pool DATA").Range("D8:EJ2000"), 91 + j, False)
    End If
     
     
    If WorksheetFunction.IsNA(WorksheetFunction.VLookup(Cells(i, 2), Workbooks(CStr(RapprochementFIM)).Worksheets("REPORT").Range("C17:EJ2000"), j + 1, False)) = True Then
    Y = 100 'Valeur abhérante 
    Else: Y = WorksheetFunction.VLookup(Cells(i, 2), Workbooks(CStr(RapprochementFIM)).Worksheets("REPORT").Range("C17:EJ2000"), j + 1, False)
     
    End If
     
     
    If (Abs(X - Y) < 0.0001) Then
     
    Cells(i, j + 2) = "OK"
    Else: Cells(i, j + 2) = Abs(X - Y)
     
    End If
    En soit, c'est pas écrit NA sur mon fichier Excel, mais ça bloque ma boucle, et je n'arrive pas à y remédier.
    Si vous avez une piste, n'hésitez pas.
    Merci.

  7. #7
    Membre averti Avatar de delphine35
    Femme Profil pro
    Analyste BO
    Inscrit en
    Novembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste BO

    Informations forums :
    Inscription : Novembre 2009
    Messages : 265
    Points : 377
    Points
    377
    Par défaut
    Pourquoi ne pas faire un "FIND" ?? C'est ce qui ressemble le plus au RechercheV ....

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    J'ai creusé sur la fonction Find mais je n'arrive pas à l'utiliser, y a toujours quelquechose qui bloque.
    Comment t'en servirais tu dans le cas présent ?
    Je pensais à un If find.... then X = WorksheetFunction.VLookup(Cells(i, 2), ...
    Mais j'ai du mal à utiliser ce fameux find.

  9. #9
    Membre averti Avatar de delphine35
    Femme Profil pro
    Analyste BO
    Inscrit en
    Novembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste BO

    Informations forums :
    Inscription : Novembre 2009
    Messages : 265
    Points : 377
    Points
    377
    Par défaut
    Ca soit etre quelque chose comme ca :

    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
    With Workbooks(CStr(RapprochementFIM)).Worksheets("REPORT").Range("C17:EJ2000")
     
        Set c = .Find(ActiveSheet.Cells(i, 2), LookIn:=xlValues)
        If  c Is Nothing Then
            Y = 100
        Else
            Y = c.Offset(0, j + 1).Value    
        End If
     
    End With
     
    If (Abs(X - Y) < 0.0001) Then
        ActiveSheet.Cells(i, j + 2) = "OK"
    Else
        Cells(i, j + 2) = Abs(X - Y)
    End If
    J'ai modifier 2 ou 3 choses ... voir code ci-dessus

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup, ça marche très bien, je ne comprends pas bien cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Y = c.Offset(0, j + 1).Value
    Ca va beaucoup nous aider !

  11. #11
    Membre averti Avatar de delphine35
    Femme Profil pro
    Analyste BO
    Inscrit en
    Novembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste BO

    Informations forums :
    Inscription : Novembre 2009
    Messages : 265
    Points : 377
    Points
    377
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Y = c.Offset(0, j + 1).Value
    1- offset permet de faire un "decalage" a partir du cellule (ici c) d'un nombre de ligne et d'un nombre de colonne

    Range.Offset(nbre_ligne, nbre_colonne)

    donc ici tu va a la cellule qui est à 0 ligne et j+1 colonne de c
    Ex :

    Si c => "A1"
    et j = 2
    alors c.offset(0, j+1) => "D1"

    2- Value : permet de recuperer la valeur de la cellule

    Essayer la touche "F1"

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

Discussions similaires

  1. [2.x] Include template avec paramètres variable pas tjs disponible
    Par jfsenechal dans le forum Symfony
    Réponses: 1
    Dernier message: 15/09/2011, 12h02
  2. Réponses: 0
    Dernier message: 10/12/2010, 17h10
  3. appel fichier batchs avec paramètres variables
    Par staticx dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 21/08/2007, 08h04
  4. Requête avec paramètres variables
    Par dahu17 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/05/2007, 10h38
  5. Réponses: 4
    Dernier message: 09/02/2006, 16h22

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