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 :

Macro excel recherche V et ligne variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Architecte réseau
    Inscrit en
    Février 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Février 2016
    Messages : 34
    Par défaut Macro excel recherche V et ligne variable
    Bonjour,

    Voila j'ai écris le code suivant qui fonctionne bien si je connais le nombre de ligne exact de mon fichier. Néanmoins, comment faire pour dire à ma macro que le nombre de ligne est variable. Est ce que End(xlUp).Row peut convenir dans ce cas?
    Merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     Application.Dialogs.Item(xlDialogOpen).Show
               Range("A1:AH" & Range("A65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Select
     
     Windows("Signature SEPA macro.xlsm").Activate
     Sheets("Feuil1").Select
     Range("J3").Select
        ActiveCell.FormulaR1C1 = _
            "=IFERROR(VLOOKUP(RC[-7],[MSG.ASS.Q.FLUX_ASSURE_CONTRAT.xlsx]MSG.ASS.Q.FLUX_ASSURE_CONTRAT!R1C10:R153060C124,115,FALSE),"""")"

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !

    Citation Envoyé par oz2007 Voir le message
    Est ce que End(xlUp).Row peut convenir dans ce cas?
    Oui bien sûr, selon l'adéquation avec la conception de la feuille de calculs …     Voir aussi la propriété   CurrentRegion   …

    ___________________________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  3. #3
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Oui, .end(xlup).row peut convenir.

    comment .end(xlup).row fonctionne :
    - .end(xlup) remonte jusqu'à trouver la première cellule non vide
    - .row indique la ligne à laquelle on se trouve.

    Dans ton code tu utilises Range("A65536") s'il se peut que tu aies plus de 65536 lignes, alors je te conseille de remplacer cette partie par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A" & rows.count)
    Le "rows.count" a pour effet de compter le nombre de lignes dans la feuille (lignes vides ou non vides). Au final tu devrais avoir quelque chose dans ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Application.Dialogs.Item(xlDialogOpen).Show
               Range("A1:AH" & Range("A" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Select
     
     Windows("Signature SEPA macro.xlsm").Activate
     Sheets("Feuil1").Select
     Range("J3").Select
        ActiveCell.FormulaR1C1 = _
            "=IFERROR(VLOOKUP(RC[-7],[MSG.ASS.Q.FLUX_ASSURE_CONTRAT.xlsx]MSG.ASS.Q.FLUX_ASSURE_CONTRAT!R1C10:R153060C124,115,FALSE),"""")"

  4. #4
    Membre averti
    Femme Profil pro
    Architecte réseau
    Inscrit en
    Février 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Février 2016
    Messages : 34
    Par défaut
    En faite ce que je n'arrive pas à faire c'est d'intégrer le .end(xlup) dans cette formule là? Où dois-je le mettre?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Range("J3").Select
        ActiveCell.FormulaR1C1 = _
            "=IFERROR(VLOOKUP(RC[-7],[MSG.ASS.Q.FLUX_ASSURE_CONTRAT.xlsx]MSG.ASS.Q.FLUX_ASSURE_CONTRAT!R1C10:R153060C124,115,FALSE),"""")"

  5. #5
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Et bien cela dépend de la plage dans laquelle tu effectues ton VLookUp.
    A titre d'exemple (à toi d'adapter selon la colonne que tu souhaites) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     "=IFERROR(VLOOKUP(RC[-7],[MSG.ASS.Q.FLUX_ASSURE_CONTRAT.xlsx]MSG.ASS.Q.FLUX_ASSURE_CONTRAT!R1C10:R" & range("R" & rows.count).end(xlup).row & "C124,115,FALSE),"""")"

  6. #6
    Membre averti
    Femme Profil pro
    Architecte réseau
    Inscrit en
    Février 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Février 2016
    Messages : 34
    Par défaut
    Alors la macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     "=IFERROR(VLOOKUP(RC[-7],[MSG.ASS.Q.FLUX_ASSURE_CONTRAT.xlsx]MSG.ASS.Q.FLUX_ASSURE_CONTRAT!R1C10:R" & Range("R" & Rows.Count).End(xlUp).Row & "C124,115,FALSE),"""")"
    se traduit par la formule suivante: =SIERREUR(RECHERCHEV(C2;'S:\Cotisations\VERIF Signature SEPA\[MSG.ASS.Q.FLUX_ASSURE_CONTRAT.xlsx]MSG.ASS.Q.FLUX_ASSURE_CONTRAT'!$J$1:$DT$1;115;FAUX);"")

    Il n'a donc pas pris en compte la plage variable (le End(xlUp).Row doit s'appliquer sur la plage JT

    Merci

  7. #7
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Pardon, erreur de ma part, j'ai supprimé un peu trop de trucs dans ta formule
    cela devrait être mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "=IFERROR(VLOOKUP(RC[-7],[MSG.ASS.Q.FLUX_ASSURE_CONTRAT.xlsx]MSG.ASS.Q.FLUX_ASSURE_CONTRAT!R1C10:R" &  cells(rows.count, 124).end(xlup).row & ",115,FALSE),"""")"
    Pour faire simple, si tu n'as pas compris :
    R1C10 correspond à Row 1 Column 10 (soit ligne 1 colonne 10, donc à la cellule J1)
    R153060C124 correspondait à Row 153060 Column 124 (soit la cellule DT153060)
    Il faut donc modifier la born supérieure des lignes de ta plage, d'après tes dires, donc il faut remplacer 153060. Pourquoi utiliser cells(rows.count,124)? Pour pouvoir obtenir la dernière ligne non vide de la colonne 124 (les lignes et colonnes sont inversées par rapport à range)
    Normalement, cela devrait être un peu mieux.

Discussions similaires

  1. macro excel pour supprimer des lignes comportant un caractere spécial
    Par fredo49 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/04/2011, 16h32
  2. macro excel 4 : comment afficher une variable ou où trouver un tuto
    Par une_tite_question dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 13/07/2010, 12h18
  3. Réponses: 7
    Dernier message: 10/09/2009, 10h37
  4. macro Excel qui compte les lignes
    Par FreddyNB dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/07/2008, 17h15
  5. macro Excel qui compte les lignes
    Par FreddyNB dans le forum VB.NET
    Réponses: 2
    Dernier message: 08/07/2008, 17h11

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