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 :

detecter cellule vide for each


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    detecter cellule vide for each
    Bonjour,


    je souhaite identifier les manques dans certains onglets de données mais rencontre un soucis
    En effet le cell.value = "" ne fonctionne pas du tout cela me rend row 1 column 1 alors que celle ci est bien rempli

    je test avec isempty cela ne fonctionne pas non plus
    je voudrais pouvoir identifier les cells vide dans chacune des lignes et colonnes de mon onglet

    une idée svp car je tourne en rond

    *
    alors que si je teste msgbox(cell.value) alors ca me renvoi le contenu de la cellule correctement

    merci à vous

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each cell In Worksheets("Projects").Range("A2:M" & End_Project)
     
    If (cell.Value = "") Then
    MsgBox ("Row: " & Worksheets("Projects").Cells.row & " Column " & Worksheets("Projects").Cells.Column)
    End If

  2. #2
    Expert confirmé
    Bonjour,
    Citation Envoyé par Darkangel2014 Voir le message
    En effet le cell.value = "" ne fonctionne pas du tout
    Ça fonctionne très bien mais ton MsgBox n'affiche que ce que tu lui demandes d'afficher !

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each Cell In Worksheets("Projects").Range("A2:M" & End_Project)
      If Cell.Value = "" Then
        MsgBox "Row: " & Cell.Row & " Column " & Cell.Column
      End If
    Next Cell
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  3. #3
    Expert éminent sénior
    Pour info, une variable de type Range ne contient pas uniquement l'adresse d'une cellule, elle contient toutes les référence de cette cellule, y compris la feuille et le classeur auxquels elle appartient.

    Donc, ta variable cell contient (entre autre) la référence à Worksheets("Projects") et ne pourrait pas être désignée comme cellule d'une autre feuille (à moins de lui assigner la cellule d'une autre feuille).

    D'une manière générale, une cellule de type Objet contient tous les parents de l'objet désigné et ne peut pas être utilisée elle-même comme membre d'un autre objet.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Membre à l'essai
    effectivement bien vu merci à vous
    toutefois mon objectif n'est pas de m'afficher cela dans un msgbox comme vous pouvez l'imaginer

    mon objectif serait de pouvoir me reporter dans un array la valeur contenu dans la colonne A du row répéré
    je récupère donc l'id contenu en colonne A via
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    ID = Worksheets("Projects").Range("A:A")(cell.row, 1)


    et cela fonctionne:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    MsgBox "ID: " & ID & " Column " & cell.Column


    mais comment mettre dans cela un array?
    je tente cela mais ne sait pas si cela fonctionnera à la suite

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If (cell.Value = "") Then
    ID = Worksheets("Projects").Range("A:A")(cell.row, 1)
    Lacks_Project = Array(ID, cell.Column)
     
    End If
    Next cell

  5. #5
    Expert éminent sénior
    Citation Envoyé par Darkangel2014 Voir le message
    ID = Worksheets("Projects").Range("A:A")(cell.row, 1)
    Il serait plus propre d'écrire ID = Worksheets("Projects").Cells(cell.Row, 1).Value.

    A moins que cell désigne une cellule de la feuille Projects (ce qui signifierait que tu n'as pas lu ou pas compris ma réponse précédente).
    Dans ce cas, il suffit d'écrire ID = cell.Value.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  6. #6
    Membre à l'essai
    Bonjour,

    merci pour ce correctif.
    pour être honnête je n'avais pas vu votre message précédent dont je viens de prendre connaissance.
    merci à vous pour ces explications très bien détaillées


    je me retrouve donc avec :
    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
     
    Private Sub Detect_Lacks()
     
    Dim End_Project, ID, n, i As Integer
    Dim Rng, cell As Range
    Dim Lacks_Project() As Variant
     
     
    End_Project = Worksheets("Projects").Range("A" & Rows.Count).End(xlUp).row
    For Each cell In Worksheets("Projects").Range("A2:M" & End_Project)
     
    If (cell.Value = "") Then
    ID = Worksheets("Projects").cells(cell.row, 1).Value
    Lacks_Project() = Array(ID, cell.Column)
     
    MsgBox "ID: " & ID & " Column " & cell.Column
    End If
    Next cell


    comment désormais intégrer et pouvoir verifer ce que lack_projects à comme enregistrements?
    merci à vous

  7. #7
    Expert confirmé
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur