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 :

La dernière cellule non vide en-dessus d'une sélection


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2020
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2020
    Messages : 107
    Par défaut La dernière cellule non vide en-dessus d'une sélection
    Bonjour,

    Ma question est simple, mais je ne trouve pas de réponse. Je me permets donc de faire appel aux lumières des utilisateurs experts d'Excel.
    Je ne joins pas de fichier, je ne pense pas que cela sera nécessaire.

    Quel code VBA utiliser pour que, en faisant une sélection dans une feuille Excel, la macro affiche la valeur de la première cellule non vide au-dessus de la sélection?
    J'ajoute deux précisions: la sélection peut concerner une cellule ou plusieurs cellules; mais dans ce cas, il s'agit toujours d'une plage de cellules verticales, donc portant sur une seule colonne. Deuxième précision: il y a beaucoup de cellules vides, mais il y a toujours une cellule avec une valeur au-dessus de la sélection. Le cas de figure où il n'y aurait pas de cellule non vide n'est donc pas possible. J'ajoute enfin qu'il s'agit de valeurs sous forme de lettres (et non d'un résultat avec des chiffres ou la valeur 0).

    Exemple: je sélectionne la plage F50-F52. Imaginons qu'il y ait des valeurs, dans cette colonne, dans les cellules F12, F20 et F30, Excel devrait donc coller la valeur présente en F30 dans la cellule F50, dans la cellule F51 et dans la cellule F52.

    Je reste à disposition si quelque chose n'est pas clair...

    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Bonjour

    bonne question... j'ai l'impression qu'il devrait y avoir plus simple mais voilà déjà ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function PremiereCelluleNonVideAuDessousDe(MaRange As Range) As Range
    Dim I As Long
    With MaRange.Columns(1) ' des fois que
        I = .Cells(.Cells.Count).Row  ' dernière ligne 
        Set PremiereCelluleNonVideAuDessousDe = .EntireColumn.Cells(I).End(xlDown)
    End With
    End Function
    La difficulté pour moi à cette heure avancée de la semaine étant de trouver la fin de la plage, j'ai l'impression que je complique

    Deux remarques :
    1. ça ne marchera pas avec une plage à sélections multiples
    2. S'il n'y a rien en dessous ça ne plante pas mais ça atterrit en bas de feuille sur une cellule vide, à voir si tu veux tester dans la fonction ou lors de l'appel

  3. #3
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Salut, voici ma suggestion:

    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
    Sub CopierValeurCelluleNonVide()
        Dim rng As Range
        Dim cell As Range
        Dim firstNonEmptyCell As Range
        Dim i As Long
     
        ' Définir la plage ou cellule sélectionnée
        Set rng = Selection
     
        ' Parcourir les cellules au-dessus de la sélection
        For i = rng.Cells(1, 1).Row - 1 To 1 Step -1
            Set cell = rng.Cells(1, 1).EntireColumn.Cells(i)
            If Not IsEmpty(cell) Then
                ' Si la cellule n'est pas vide, c'est la première cellule non vide
                Set firstNonEmptyCell = cell
                Exit For
            End If
        Next i
     
        ' Si une cellule non vide a été trouvée, on copie sa valeur dans la sélection
        If Not firstNonEmptyCell Is Nothing Then
            rng.Value = firstNonEmptyCell.Value
        End If
    End Sub

  4. #4
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2020
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2020
    Messages : 107
    Par défaut
    Merci pour votre aide!

    La solution de Tête de chat n'est pas concluante, mais celle de Franc fonctionne parfaitement bien!
    Si j'ose encore une question, plutôt cosmétique celle-là. Où dois-je ajouter des contrôles sur la mise en forme de la cellule (choix de la police, de la couleur de fond, etc), pour que cette mise en forme s'applique à toutes les cellules sélectionnées?

    Je pense que cela passe par quelque chose du style,

    With Selection
    .Interior.Color = RGB(255, 255, 0)
    .Font.Color = RGB(230, 225, 0)
    .Font.Name = "Calibri"
    .Font.Size = 11
    .Value = "v"
    .HorizontalAlignment = xlCenter
    End With

    mais où le glisser dans la macro?

    Merci encore pour vos contributions!

  5. #5
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2020
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2020
    Messages : 107
    Par défaut
    Je me réponds à moi-même...
    J'ai simplement glissé les instructions sur le paramétrage des cellules après l'instruction

    If Not firstNonEmptyCell Is Nothing Then
    rng.Value = firstNonEmptyCell.Value

    With Selection
    .Interior.Color = RGB(255, 255, 0)
    .Font.Color = RGB(230, 225, 0)
    .Font.Name = "Calibri"
    .Font.Size = 11
    .HorizontalAlignment = xlCenter
    End With

    End If

    Cela marche parfaitement bien! Merci beaucoup Franc, je n'aurais jamais trouvé ça tout seul...

  6. #6
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    A ta place je le ferais en dehors de la boucle, sinon ce code s'exécute à chaque itération, ce qui est inutile.

  7. #7
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2020
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2020
    Messages : 107
    Par défaut
    Super, merci 🙏

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

Discussions similaires

  1. [XL-2010] Compter toutes le nombre de cellules non vides à partir d'une certaine ligne
    Par horusbk dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 24/10/2019, 16h26
  2. Réponses: 7
    Dernier message: 10/03/2019, 09h38
  3. [XL-2010] Copier le contenu d'une cellule non vide à partir d'une plage
    Par Chris561 dans le forum Excel
    Réponses: 1
    Dernier message: 03/02/2019, 13h38
  4. [XL-2010] Cellule non vide à cause d'une formule
    Par cag's dans le forum Excel
    Réponses: 11
    Dernier message: 20/08/2015, 21h56
  5. [XL-2007] Valeur de la premiere case non vide au dessus d'une case x
    Par Sephiroth7777 dans le forum Excel
    Réponses: 1
    Dernier message: 10/07/2009, 00h24

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