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 :

Équivalent recherche celulle vide > ctrl+D [XL-2016]


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
    Contrôle de gestion
    Inscrit en
    Mai 2022
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Contrôle de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2022
    Messages : 24
    Par défaut Équivalent recherche celulle vide > ctrl+D
    Bonjour,

    Je cherche un code qui me permet de remplir mes cellules vides comme si je faisais un ctrl+D. Si je fait un enregistrement de macro ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Cells.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
            , SearchFormat:=False).Activate
        Selection.FillRight
    Seulement je ne sais pas gérer les boucles (loop).
    Après recherches j'ai pu trouver des bouts de codes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        Sheets("Report").Select
     
        'Renvoi le numéro de la dernière ligne avec du contenu (part du bas de la feuille, dernière ligne (1 048 576) et remonte jusqu'à la première cellule avec du contenu.
    lastRow = Cells(Rows.Count, 2).End(xlUp).Row
     
    'Boucle de la ligne 2 à la dernière ligne remplie de la colonne B
    For i = 2 To lastRow
     
    'Si La cellule Ai est vide, Ci conserve la valeur précedente, si elle est pleine on récupère la valeur de Ai
        If Cells(i, 1).Value = "" Then
        Cells(i, 3).Value = Cells(i - 1, 3).Value
        Else:  Cells(i, 3).Value = Cells(i, 1).Value
        End If
    Next i
    Mais je n'ai pas trouver comment l'adapté exactement parce que là, il me semble qu'il duplique la ligne vers le bas.
    Voilà le type de données que j'ai :
    Nom : Capture.JPG
Affichages : 90
Taille : 168,5 Ko
    Je veux que tout ce qui est vide prenne la valeur non vide la plus à gauche. Ca jusqu'en bas du tableau.
    Bémol sur le fait que le tableau peux aller de la colonne AF à AI en fonction du nombre de jour dans le mois, si ça change quelque chose au code ou pas..

    Par avance merci pour votre aide

  2. #2
    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, comme ceci:

    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
    Sub RemplirCellulesVides()
        Dim PlageTotale As Range
        Dim PlageVides As Range
        Dim Cellule As Range
     
        Set PlageTotale = Range("A1:J10") ' Remplacez "A1:J10" par la plage souhaitée
     
        ' Sélectionner uniquement les cellules vides de cette plage
        On Error Resume Next
        Set PlageVides = PlageTotale.SpecialCells(xlCellTypeBlanks)
        On Error GoTo 0
     
        ' Vérifier si la plage contient des cellules vides
        If Not PlageVides Is Nothing Then
            For Each Cellule In PlageVides
                ' Remplir la cellule vide avec la valeur de la cellule à gauche
                Cellule.Value = Cellule.Offset(0, -1).Value
            Next Cellule
        Else
            MsgBox "Aucune cellule vide dans la plage spécifiée.", vbInformation
        End If
    End Sub

  3. #3
    Invité
    Invité(e)
    Par défaut
    Un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim lastRow, cVide
    Application.ScreenUpdating = False
    With Sheets("Report")
      lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
      On Error GoTo Fin
      For Each cVide In .Range("B2:AH" & lastRow).SpecialCells(xlCellTypeBlanks)
         cVide.Value = .Cells(cVide.Row, 1).Value
      Next
    Fin:
    End With
    Application.ScreenUpdating = True

  4. #4
    Membre averti
    Femme Profil pro
    Contrôle de gestion
    Inscrit en
    Mai 2022
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Contrôle de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2022
    Messages : 24
    Par défaut
    rMist2024 du coup ça écrit ce que j'ai en colonne A de la ligne sur laquelle ça écrit, et non la première cellule remplie à gauche (ça aurait donc du écrire S1) :
    Nom : Capture.JPG
Affichages : 55
Taille : 18,2 Ko

    Franc c'est parfait !!
    Est-il possible de définir plutôt le tableau que de faire par plage ? Aujourd'hui j'ai 75 lignes mais demain ça pourrait évoluer. Il faudrait que ça prenne de la colonne E jusqu'en bout de tableau (à droite) et jusqu'en bas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        ' Définition de la plage
        Set PlageTotale = Range("E2:AI75")

  5. #5
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 205
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    oui, remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set PlageTotale = Range("E2:AI75")
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set PlageTotale = Listobjects("MonTableau").databodyrange

  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
    Si tu travailles avec un tableau structuré, la solution de tototiti2008 est la bonne, si ce n'est pas le cas, voici une autre solution:

    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
    Sub RemplirCellulesVides()
        Dim DerniereLigne As Long
        Dim DerniereColonne As Long
        Dim PlageTotale As Range
        Dim PlageVides As Range
        Dim Cellule As Range
     
        ' Identifier la dernière ligne et dernière colonne à partir de E2
        DerniereLigne = Cells(Rows.Count, "E").End(xlUp).Row
        DerniereColonne = Cells(2, Columns.Count).End(xlToLeft).Column
     
        ' Définir la plage dynamique de E2 à la dernière cellule en bas à droite
        Set PlageTotale = Range("E2", Cells(DerniereLigne, DerniereColonne))
     
        ' Sélectionner uniquement les cellules vides de cette plage
        On Error Resume Next
        Set PlageVides = PlageTotale.SpecialCells(xlCellTypeBlanks)
        On Error GoTo 0
     
        ' Vérifier si la plage contient des cellules vides
        If Not PlageVides Is Nothing Then
            For Each Cellule In PlageVides
                ' Remplir la cellule vide avec la valeur de la cellule à gauche
                Cellule.Value = Cellule.Offset(0, -1).Value
            Next Cellule
        Else
            MsgBox "Aucune cellule vide dans la plage dynamique.", vbInformation
        End If
    End Sub

  7. #7
    Membre averti
    Femme Profil pro
    Contrôle de gestion
    Inscrit en
    Mai 2022
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Contrôle de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2022
    Messages : 24
    Par défaut
    C'est parfait, merci à tous !!

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

Discussions similaires

  1. Recherche emplacement vide + input box
    Par beast666 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/04/2009, 13h55
  2. Recherche champ vides
    Par stephen76 dans le forum VBA Access
    Réponses: 3
    Dernier message: 13/11/2008, 09h14
  3. Enlever celulle vide combobox a 2 colonne
    Par ptitepo dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 05/06/2008, 16h12
  4. [MySQL] Recherche enregistrement vide
    Par lodan dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/09/2006, 15h47
  5. remplacer une celulle vide
    Par mavean dans le forum Access
    Réponses: 4
    Dernier message: 07/04/2006, 15h49

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