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 :

recuperer la dernière cellule non vide d'une ligne


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut recuperer la dernière cellule non vide d'une ligne
    Bonjour,

    Comment récupérer la dernière cellule vide d'une ligne dans un tableau Excel.
    Attention je ne souhaite pas recupérer la dernière cellule vide d'une colonne mais bien celle d'une ligne.
    Exemple: je suis en A4 et la dernière ligne vide se trouve en D4 :
    comment recuperer cette ligne en vba ?
    Merci de votre aide

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    si la plage de données est continue/contigüe avec A1 non vide, un simple CurrentRegion basé sur cette cellule suffit.

    dans le cas contraire, UsedRange est pas mal dans son genre

    Au pis aller, un Find qui cherche "*" avec les paramètres astucieusement renseignés te donnera l'ultime cellule

    Mais évite au possible, sauf souhait délibéré en connaissance de cause, d'utiliser la méthode SpecialCells, muni de son paramètre 11
    Car tu pourrais bien, si tu est amené à réaliser des opérations de suppression de valeurs et/ou de cellules, ne plus obtenir la dernière ligne "contractuelle", mais plutôt une ligne "qui l'a été et l'es peut-être encore ?" (enregistrer le fichier ramène Excel à la raison, je te rassure !)

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Bonjour Joe,
    Merci pour ces pistes,
    J'ai encore une question à te poser
    je n'arrive pas à créer et copier une formule contenant des variables.

    je m'explique encore une fois
    sur mon tableau , sur B1 : je souhaiterais insérer la Formule ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Formule = .Cells(lastligne, 2) - .Cells((lastligne - 1), 2)
    où lastligne correspond à la derniere ligne non vide de la colonne B
    et j'aimerais copier cette formule de la cellule B1 à la dernier colonne non vide soit la colonne F1


    Voici le code VBA

    C'est au niveau de la ligne 32 que se pose le problème.
    La formule me donne bien la soustraction de la dernier cellule non vide la colonne B sur l' avant dernier cellule non vide de la colonne B
    Mais le soucis c'est que lorsque je copie cette formule dans les cellules allant de C1 à F1, la copie se fait en valeur et non pas avec le formule. Donc le résultat est faux
    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
    38
    39
    40
    41
    42
    43
     
    Sub Calcul()
     
    'Déclaration de variable
    Dim Dercol As Integer
    Dim lastligne As String
     
    Dim MyPlageCalcul As Range
    Dim MyPlageCopy As Range
     
    Dim Wb As Workbook
    Dim Formule As String
     
     
    Set Wb = Workbooks("classeurA.xlsm")
     
    'recuperer le n° de colonne de la derniere colonne non vide de la feuille  à partir de la gauche
    Dercol = Wb.Worksheets("feuil1.").Cells(3, Columns.Count).End(xlToLeft).Column
     
     
    'recuperer le numero de la derniere ligne non vide de la feuille " à partir de la cellule B3
    lastligne = Wb.Worksheets("feuil1.").Range("B3").End(xlDown).Row
     
     
    'Selection de la derniere ligne non vide de la colonne
    'jusqu'a la dernier ligne non vide de la dernier colonne
    Set MyPlageCopy = Wb.Worksheets("feuil1.").Range(Cells(1, 2), Cells(1, Dercol))
     
     
    With Wb.Worksheets("feuil1.")
     
    Formule = .Cells(lastligne, 2) - .Cells((lastligne - 1), 2)
     
     
    Range("B1").FormulaR1C1 = Formule
     
    Set MyPlageCalcul = Range("B1")
     
     Range("B1").Copy Destination:=MyPlageCopy
     
    End With
     
    End Sub

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Marc-L

    en voyant ta réponse, j'étais sceptique et suis donc allé relire beaucoup plus attentivement l'énoncé du problème.
    j'ai mal interprété la demande, puisque je ne me suis pas focalisé sur le fait qu'on était déjà sur une unique ligne bien définie !

    Ta solution est probablement celle que j'utiliserait personnellement pour cet exposé précis



    EDIT : arf ! t'as supprimé ton message

    permet moi néanmoins de te citer

    A partir de la dernière colonne de la ligne - Cells(4, Columns.Count) - via la propriété End et son paramètre xlToLeft
    comme indiqué dans l'aide VBA interne …
    faire un .End(xlToLeft) en partant de la droite de la feuille était pourtant opportun ... peut-être qu'en se plaçant sur le UsedRange va faire gagner quelques millisecondes, c'est du chippotage

  5. #5
    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

    Oui je l'ai supprimé car en relisant la présentation initiale mal fagotée
    (car confusion entre ligne et colonne sans compter l'écart entre l'explication et le titre de la discussion !)
    je pense alors répondre certainement à côté !     Qui plus est il faudrait peut-être prévoir un Offset :
    dans l'attente d'une explication digne de ce nom, c'est à dire claire & exhaustive …

Discussions similaires

  1. [XL-2010] Dernière cellule non vide d'une ligne
    Par cecile1234 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 20/06/2016, 18h23
  2. [XL-2010] Dernière cellule non vide d'une ligne et simplification code
    Par Ditch3122 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/07/2012, 21h48
  3. Dernière cellule non vide d'une ligne
    Par rapheb dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 30/11/2011, 07h45
  4. renvoi dernière cellule non vide d'une colonne
    Par emilie31 dans le forum Excel
    Réponses: 5
    Dernier message: 29/09/2008, 16h26
  5. Dernière cellule non vide d'une colonne
    Par RéviAT dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/02/2008, 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