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 :

Vlookup pour une colonne


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 23
    Par défaut Vlookup pour une colonne
    Bonjour!
    J'ai déjà posé cette question-ci plus tôt, mais sans réponse. Je reformule donc autrement si quelqu'un peut m'aider:
    J'ai un problème avec une formule Vlookup que j'aimerais étendre à toute une colonne (colonne x de N4 à N indéfini). Mais j'ai déjà un problème pour définir cet ensemble de cellule.
    Je ne suis également pas sûre d'utiliser la bonne fonction: Application.WorksheetFunction

    Merci d'avance pour votre aide!

    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
    Sub macro1()
     
    Dim LastLig As Long
    Dim tableliens As Workbook
    Dim x As Variant
     
    With Worksheets(2)
    LastLig = .Cells(Rows.Count, 1).End(xlUp).Row
    x = Range(Cells(14, 4), Cells(14, LastLig)).Value
    Set tableliens = Workbooks.Open("K:\XXXX.xls")
     
        With Application.WorksheetFunction
        x = Application.WorksheetFunction.VLookup(Range("M4").Value,tableliens.Range("C2:D142"), 2, False)
        tableliens.Close SaveChange = False
        End With
     End With
    End Sub

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Par défaut
    Bonjour,

    Peux tu m'en dire plus sur Vlookup que je ne trouve pas dans mon aide en ligne.

    A+
    PPz

  3. #3
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 23
    Par défaut
    He bien la fonction VLookup recherche une valeur:

    VLookup( value, table_array, index_number, not_exact_match )

    - value= valeur a rechercher dans la première colonne de "table_array",
    - table_array= colonnes dans lesquelles on recherche la valeur,
    - index_number= numéro de la colonne de "table_array" dans laquelle on a trouvé la valeur,
    - not_exact_match= FALSE pour trouver la valeur exacte, TRUE pour trouver une approximation, auquel cas il cherchera la première valeur plus petite que celle recherchée.

    Ex: VLookup( 3, A1:B35, 2, FALSE) recherche d'abord la valeur 3 dans la première colonne de A1:B35 (donc dans la colonne A) et te donne la valeur de la colonne B associée à ce 3.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 25
    Par défaut
    Bonjour,

    Une boucle est-elle envisageable ?
    Du genre :
    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
     
    Sub macro1()
     
    Dim LastLig As Long
    Dim tableliens As Workbook
    Dim x_full As Variant, x as variant, res as variant
     
    With Worksheets(2)
    LastLig = .Cells(Rows.Count, 1).End(xlUp).Row
    x_full  = Range(Cells(14, 4), Cells(14, LastLig)).Value
    Set tableliens = Workbooks.Open("K:\XXXX.xls")
     
    for each x in x_full
    res = Application.WorksheetFunction.VLookup(x,tableliens.Range("C2142"), 2, False)
    next x
     
    End With
     
    tableliens.Close SaveChange = False
     
    End Sub
    A toi de voir ensuite ce que tu comptes faire du résultat...

  5. #5
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 23
    Par défaut
    J'ai essayé, mais j'ai un problème dans la définition de x_full. Il me dit: application defined or object defined error.

  6. #6
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Bonjour Isabelle86,

    puis-je te demander de formuler encore autrement ta demande? Que cherches tu à faire, saurais tu l'expliquer sans référence de programmation ?
    Quel est le but car ton X, il ne sert à rien....

    Ceci a-t'il vraiment du sens ?
    J'ai un problème avec une formule Vlookup que j'aimerais étendre à toute une colonne (colonne x de N4 à N indéfini)

  7. #7
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 23
    Par défaut
    J'ai un fichier Excel qui comprend dans la feuille 3 une formule:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SUMIF('Worksheets(2)'!$N$4:$N$39018;'Worksheets(3)'!B$1;'Worksheets(2)'!$V$4:$V$39018)/(B$68+B$11)
    Cette formule appelle donc la colonne N de la feuille 2 qui elle-même est une formule:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =VLOOKUP(M4;'K:\XXXXX.xls'!$C$2:$D$142;2;FALSE)
    Cette colonne N a un nombre de ligne variable de N4 à N indéfini.

    Je voudrais donc faire une macro qui automatise ces deux formules en même temps. Je n'ai pas de problème pour la fonction de la feuille 3, mais c'est la fonction Vlookup de la feuille 2 qui me pose problème.

    Voici mon programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim LastCol As Integer
    Dim LastLig As Long
     
    With Worksheets(2)
        LastLig = .Cells(Rows.Count, 1).End(xlUp).Row
        ?????
    End With
     
    With Worksheets(3)
        LastCol = .Cells(1, Columns.Count).End(xlToLeft).Column
        .Range(.Cells(81, 2), .Cells(81, LastCol)).FormulaR1C1 = "=SUMIF('Worksheets(2)'!R4C14:R39018C14,'Worksheets(3)'!R1C,'Worksheets(2)'!R4C22:R39018C22)/(R68C+R11C)"
    End With
    Est-ce plus clair?

  8. #8
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Oui, là j'ai compris, enfin je crois :

    Tu as juste besoin de changer la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       .Range(.Cells(81, 2), .Cells(81, LastCol)).FormulaR1C1 = "=SUMIF('Worksheets(2)'!R4C14:R39018C14,'Worksheets(3)'!R1C,'Worksheets(2)'!R4C22:R39018C22)/(R68C+R11C)"
    de la même manière que tu initialises LastLig, il faut remplacer R39018 par R suivi du numéro de la dernière ligne de la colonne N.

    On pourrait mettre la formule dans la formule, mais vu tes formules sur formules déjà en place, je ne sais pas ce que donnera le recalcul automatique dès que tu changera le nombre de cellulle utilisées dans la colonne N.

    Donc, avec la formule dans la formule, cela donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        .Range(.Cells(81, 2), .Cells(81, LastCol)).FormulaR1C1 = "=SUMIF('Worksheets(2)'!R4C14:R" & Worksheets(2).Range("N65535").End(xlUp).Row & "C14,'Worksheets(3)'!R1C,'Worksheets(2)'!R4C22:R" & Worksheets(2).Range("N65535").End(xlUp).Row & "C22)/(R68C+R11C)"
    Si ton application le permet, tu peux le faire en 2 instructions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim ref as long
    ref = Worksheets(2).Range("N65535").End(xlUp).Row
        .Range(.Cells(81, 2), .Cells(81, LastCol)).FormulaR1C1 = "=SUMIF('Worksheets(2)'!R4C14:R" & ref & "C14,'Worksheets(3)'!R1C,'Worksheets(2)'!R4C22:R" & ref & "C22)/(R68C+R11C)"

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

Discussions similaires

  1. [EJB3 Entity] Valeur par défaut pour une colonne
    Par moha1984 dans le forum Java EE
    Réponses: 1
    Dernier message: 18/05/2009, 18h42
  2. Majuscule auto pour une colonne
    Par devdev dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 19/03/2009, 15h23
  3. Police différente pour une colonne d'une ListView
    Par Médinoc dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/02/2009, 15h28
  4. Largeur fixe pour une colonne de GridView
    Par slokix dans le forum ASP.NET
    Réponses: 11
    Dernier message: 26/09/2007, 09h01
  5. Union de 2 tables pour une colonne
    Par charleshbo dans le forum Langage SQL
    Réponses: 4
    Dernier message: 18/04/2006, 17h23

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