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

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

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Février 2016
    Messages : 34
    Points : 16
    Points
    16
    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 sénior
    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
    Points : 18 674
    Points
    18 674
    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 confirmé
    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
    Points : 505
    Points
    505
    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 à l'essai
    Femme Profil pro
    Architecte réseau
    Inscrit en
    Février 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Février 2016
    Messages : 34
    Points : 16
    Points
    16
    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 confirmé
    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
    Points : 505
    Points
    505
    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 à l'essai
    Femme Profil pro
    Architecte réseau
    Inscrit en
    Février 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Février 2016
    Messages : 34
    Points : 16
    Points
    16
    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 confirmé
    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
    Points : 505
    Points
    505
    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.

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

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Février 2016
    Messages : 34
    Points : 16
    Points
    16
    Par défaut
    Bonjour,
    Merci pour ton aide. Alors je comprend bien la formule par contre cela ne fonctionne toujours pas. La macro se traduit par:

    =SIERREUR(RECHERCHEV(C2;'S:\Cotisations\VERIF Signature SEPA\[MSG.ASS.Q.FLUX_ASSURE_CONTRAT.xlsx]MSG.ASS.Q.FLUX_ASSURE_CONTRAT'!$J$1:$1:$1;115;FAUX);"")

    Donc il doit avoir une coquille dans formule?
    Merci

  9. #9
    Membre confirmé
    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
    Points : 505
    Points
    505
    Par défaut
    Désolé, encore une erreur de ma part, j'ai oublié de remettre la partie correspondant à la deuxième colonne. Correctif :

    "=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 & "C124,115,FALSE),"""")"

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

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Février 2016
    Messages : 34
    Points : 16
    Points
    16
    Par défaut
    Bonjour

    Je suis désolée mais cela ne fonctionne toujours pas cela ne prend pas en compte la dernière ligne
    Voici donc mon fichier. la macro indique la formule en colonne J

    Merci infiniment
    Fichiers attachés Fichiers attachés

  11. #11
    Membre confirmé
    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
    Points : 505
    Points
    505
    Par défaut
    La macro ne fonctionne pas car il n'y a aucune valeur colonne DT (colonne 124)
    Pour corriger le problème, il faut remplacer le numéro de colonne par celui qui permet d'avoir la colonne dans laquelle la dernière ligne est non vide et dont la colonne est à prendre en compte.
    Par exemple, si c'est dans la colonne A (1) qu'il y a la dernière cellule non vide (numéro de ligne le plus élevé) et qu'elle est à considérer, alors dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    & cells(rows.count, 124).end(xlup).row
    il faut remplacer 124 par 1.
    Mais c'est à toi de décider quelle colonne prendre selon tes besoins. Comme tu m'avais signalé la plage JT, j'avais pris en compte la dernière colonne. Essaye de remplacer par différents numéro de colonnes (non vides) pour voir la différence (évidemment, si tous les colonnes de la dernière ligne sont remplies, il n'y aura aucune différence).

    Est-ce assez clair?

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

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Février 2016
    Messages : 34
    Points : 16
    Points
    16
    Par défaut
    Ok j'ai bien compris d'où vient mon prob avec votre explication.
    Là le End(xlUp).Row s'applique sur le fichier d'origine (testmacro 1801) car c'est bien la ligne 12 qui est la première ligne vide. Or ce que je veux ce qu'il détecte la dernière ligne pour déterminer la plage dans laquelle il doit faire la recherche c'est à dire J1TXXX (XXX pour la dernière ligne) du fichier MSG.ASS.Q.FLUX_ASSURE_CONTRAT.
    Je ne sais pas si je suis très claire

  13. #13
    Membre confirmé
    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
    Points : 505
    Points
    505
    Par défaut
    Oui c'est assez clair pour moi. Cependant, je ne peux pas faire grand chose de plus. C'est à toi de déterminer dans quelle colonne, parmi celles qui sont à prendre en compte, celle qui contient la dernière ligne non vide (et ensuite remplacer le numéro de colonne par le bon dans le code que je t'ai donné).

    Autre approche qui pourrait peut-être te convenir, dans le cas où la totalité de ta feuille Excel est à prendre en compte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Dim derLign As Long, Col As Long
     
        derLign = 1
     
        For Col = 1 To Columns.Count
            If derLign < Cells(Rows.Count, Col).End(xlUp).Row Then
                derLign = Cells(Rows.Count, Col).End(xlUp).Row
            End If
        Next Col
     
        ActiveCell.FormulaR1C1 = _
            "=IFERROR(VLOOKUP(RC[-7],[MSG.ASS.Q.FLUX_ASSURE_CONTRAT.xlsx]MSG.ASS.Q.FLUX_ASSURE_CONTRAT!R1C10:R" & Cells(Rows.Count, derLign).End(xlUp).Row & "C124,115,FALSE),"""")"
    Autre approche dans le cas où tu te limites à la page JT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Dim derLign As Long, Col As Long
     
        derLign = 1
     
        For Col = 10 To 124
            If derLign < Cells(Rows.Count, Col).End(xlUp).Row Then
                derLign = Cells(Rows.Count, Col).End(xlUp).Row
            End If
        Next Col
     
        ActiveCell.FormulaR1C1 = _
            "=IFERROR(VLOOKUP(RC[-7],[MSG.ASS.Q.FLUX_ASSURE_CONTRAT.xlsx]MSG.ASS.Q.FLUX_ASSURE_CONTRAT!R1C10:R" & Cells(Rows.Count, derLign).End(xlUp).Row & "C124,115,FALSE),"""")"
    Après, cela devient compliqué de t'aider...

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