Msgbox lorsque dans colonne A et D une cellule est vide

Résolu
bitbit -  
 bitbit -
Bonjour, chers espères Excel

La colonne A de mon projet est un champ obligatoire.

Avec ce Code
ActiveCell.SpécialCells(xlLastCell).Select
dercell = ActiveCell.Adress
Range("A3", dercell). Copy

Ma doléance
Les cellules de la Col A et D étant obligatoires, Aidez mois à déceler les cellules vides dans ces colonnes et lancer un message.

Au fait après la copie (Range("A3", dercell). Copy), je colle ces donnés sur une base de donnée.

M6 d'avance

13 réponses

  1. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonjour
    Essayez ceci
    Sub DetectCellulesVides()
        Application.ScreenUpdating = False
        DerCell = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Address
        DerLig = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
    
        With ActiveSheet.Range("A1:A" & DerLig)
            Set x = .Find("", LookIn:=xlValues)
            If Not x Is Nothing Then
                    Debx = x.Address
                Do
                    x.Select
                    CellVide = CellVide & ", " & Replace(x.Address, "$", "", 1)
                    Set x = .FindNext(x)
                Loop While Not x Is Nothing And x.Address <> Debx
            End If
        End With
        With ActiveSheet.Range("D1:D" & DerLig)
           Set x = .Find("", LookIn:=xlValues)
           If Not x Is Nothing Then
                   Debx = x.Address
               Do
                   x.Select
                   CellVide = CellVide & ", " & Replace(x.Address, "$", "", 1)
                   Set x = .FindNext(x)
               Loop While Not x Is Nothing And x.Address <> Debx
           End If
        End With
        CellVide = Right(CellVide, Len(CellVide) - 2)
        If CellVide <> "" Then MsgBox "Des cellules vides ont été trouvées aux adresses suivantes" & Chr(10) & CellVide
        
        Range("A3", DerCell).Copy
    End Sub
    

    Cdlt
    0
  2. bitbit
     
    Merci Renchi83
    J'ai essayé de comprendre ce code si je me trompe pas, il compte aussi les celles qui sont vide au delà de la zone des donnée. C'est à dire les cellule qui ont été une fois utilisé.

    Le code est formidable en tout cas, je vais l'essayer sur une nouvelle feuille et vous rendre compte après
    A+
    0
  3. bitbit
     
    La réponse de Frenchie83 Marche bien quand les cellules sont vraiment vide "vièrge". Ce problème est sérieux avec les cellules excel. Dès qu'elles ont été une fois utilisées, même quand on les vide, elles ne sont pas pour autant vide entant que tel?

    Que doit on faire?
    0
  4. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonjour
    Petite modif
    Sub DetectCellulesVides()
        Application.ScreenUpdating = False
        DerCell = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Address
        DerLigA = [A100000].End(xlUp).Row
    
        With ActiveSheet.Range("A1:A" & DerLigA)
            Set x = .Find("", LookIn:=xlValues)
            If Not x Is Nothing Then
                    Debx = x.Address
                Do
                    x.Select
                    CellVide = CellVide & ", " & Replace(x.Address, "$", "", 1)
                    Set x = .FindNext(x)
                Loop While Not x Is Nothing And x.Address <> Debx
            End If
        End With
        
        DerLigD = [D100000].End(xlUp).Row
        With ActiveSheet.Range("D1:D" & DerLigD)
           Set x = .Find("", LookIn:=xlValues)
           If Not x Is Nothing Then
                   Debx = x.Address
               Do
                   x.Select
                   CellVide = CellVide & ", " & Replace(x.Address, "$", "", 1)
                   Set x = .FindNext(x)
               Loop While Not x Is Nothing And x.Address <> Debx
           End If
        End With
        CellVide = Right(CellVide, Len(CellVide) - 2)
        If CellVide <> "" Then MsgBox "Des cellules vides ont été trouvées aux adresses suivantes" & Chr(10) & CellVide
        
        Range("A3", DerCell).Copy
    End Sub

    Cdlt
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. bitbit
     
    Merci Frenchie83
    Le problème est résolu pour la détection des cellules vide mais:
    La ligne du code suivante revoie une erreur lorsque aucune cellule n'est vide.
    Voulez vous bien m'ajouter la gestion de cet erreur?
    CellVide = Right(CellVide, Len(CellVide) - 2)

    En plus DerCell prend en compte toutes cellules utilisées pas nécessairement la dernière cellule contenant une donnée. Essayez de Voir ça aussi SVP
    Range("A3", DerCell).Copy

    Encore une fois M6
    0
  7. Frenchie83 Messages postés 2254 Statut Membre 339
     
    RE
    Pour la dernière question, j'ignore si les colonnes ont toutes la même longueur, dans le cas présent je me suis basé sur la longueur de la colonne A, généralement la plus représentative, mais ne connaissant pas votre tableau, difficile d'imaginer.

    Sub DetectCellulesVides()
        Application.ScreenUpdating = False
        DerCell = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Address
        DerLigA = [A100000].End(xlUp).Row
    
        With ActiveSheet.Range("A1:A" & DerLigA)
            Set x = .Find("", LookIn:=xlValues)
            If Not x Is Nothing Then
                    Debx = x.Address
                Do
                    x.Select
                    CellVide = CellVide & ", " & Replace(x.Address, "$", "", 1)
                    Set x = .FindNext(x)
                Loop While Not x Is Nothing And x.Address <> Debx
            End If
        End With
        
        DerLigD = [D100000].End(xlUp).Row
        With ActiveSheet.Range("D1:D" & DerLigD)
           Set x = .Find("", LookIn:=xlValues)
           If Not x Is Nothing Then
                   Debx = x.Address
               Do
                   x.Select
                   CellVide = CellVide & ", " & Replace(x.Address, "$", "", 1)
                   Set x = .FindNext(x)
               Loop While Not x Is Nothing And x.Address <> Debx
           End If
        End With
        If CellVide = "" Then GoTo Suite
        CellVide = Right(CellVide, Len(CellVide) - 2)
        If CellVide <> "" Then MsgBox "Des cellules vides ont été trouvées aux adresses suivantes" & Chr(10) & CellVide
        
    Suite:
        DerLigA = [A100000].End(xlUp).Row
        Range("A3", DerLigA).Copy
    End Sub

    Cdlt
    0
  8. bitbit
     
    Frenchie83

    Merci de revoir ceci

    1) L'exécution de :

    Range("A3", DerLigA).Copy
    a échoué

    2) lorsque la dernière cellule dans la colonne A ou D est vide, il ne les lit pas

    Bon appétit il est 11h 37 chez nous
    0
  9. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonsoir
    lorsque la dernière cellule dans la colonne A ou D est vide, il ne les lit pas., le problème, comme je vous l'ai déjà dit dans le post 6, c'est que je ne connais pas la structure de votre tableau.
    Combien y a t-il de colonnes?
    Les titres sont sur quelle ligne, la 1 ou la 2?
    Est-ce que toutes les colonnes ont la même longueur?

    En attendant vos réponses, je me base à la longueur de la colonne A, remplacez
    Range("A3", DerLigA).Copy 
    par
        DerCol = [IV3].End(xlToLeft).Column
        Range(Cells(3, 1), Cells(DerLigA, DerCol)).Copy
    Selon vos réponses, il faudra peut-être, y apporter une modification.
    Cdlt
    0
  10. bitbit
     
    A Frenchie83
    M6
    Votre dernière proposition marche à l'exception du fait que lorsque la dernière cellule de la colonne A ou D est vide, il ne le compte pas

    Les titre sont sur la ligne 2
    Les colonnes c'est de A a K soient 11 colonnes

    Bon week end a vous
    0
  11. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonsoir
    Remplacez les 2 dernières lignes précédentes par ceci

        DerLigA = [A100000].End(xlUp).Row
        DerCol = 1
        For l = 2 To 4
            If Cells(100000, l).End(xlUp).Row > Cells(100000, Col).End(xlUp).Row Then DerCol = l
        Next l
        Range(Cells(3, 1), Cells(DerLigA, DerCol)).Copy

    Je calcule la longueur des 4 colonnes et je prend comme référence celle qui est la plus longue, remplacez le 4 par une autre valeur si vous voulez analyser sur plus de 4 colonnes
    Cdlt
    0
  12. bitbit
     
    Bonjour Frenchie83

    Je pense avoir mal posé mon problème. Les 2 dernières lignes que vous demandez de remplacer marchent plutôt bien. par contre votre nvelle proposition plante sur
    If Cells(100000, l).End(xlUp).Row > Cells(100000, Col).End(xlUp).Row Then DerCol = l

    Je repose mon problème:
    Le code n'arrive pas à détecter les cellules vides sur la dernière ligne.

    Je n'ai jamais été coaché sur un forum comme vous le faites si bien M6
    0
  13. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonjour
    Etourderie de ma part
    If Cells(100000, l).End(xlUp).Row > Cells(100000, DerCol).End(xlUp).Row Then DerCol = l

    Le code n'arrive pas à détecter les cellules vides sur la dernière ligne. Je crois comprendre, je fais la modif et je vous renvoi tout ça:.
    Cdlt
    0
  14. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Re
    Voilà la modif, si j'ai bien compris
    Sub DetectCellulesVides()
        Application.ScreenUpdating = False
    
        DerLigA = [A100000].End(xlUp).Row
        DerCol = 1
        For l = 2 To 11
            If Cells(100000, l).End(xlUp).Row > Cells(100000, DerCol).End(xlUp).Row Then DerCol = l
        Next l
        NbLigMax = Cells(100000, DerCol).End(xlUp).Row
    
        With ActiveSheet.Range("A1:A" & NbLigMax)
            Set x = .Find("", LookIn:=xlValues)
            If Not x Is Nothing Then
                    Debx = x.Address
                Do
                    x.Select
                    CellVide = CellVide & ", " & Replace(x.Address, "$", "", 1)
                    Set x = .FindNext(x)
                Loop While Not x Is Nothing And x.Address <> Debx
            End If
        End With
        
        With ActiveSheet.Range("D1:D" & NbLigMax)
           Set x = .Find("", LookIn:=xlValues)
           If Not x Is Nothing Then
                   Debx = x.Address
               Do
                   x.Select
                   CellVide = CellVide & ", " & Replace(x.Address, "$", "", 1)
                   Set x = .FindNext(x)
               Loop While Not x Is Nothing And x.Address <> Debx
           End If
        End With
        If CellVide = "" Then GoTo Suite
        CellVide = Right(CellVide, Len(CellVide) - 2)
        If CellVide <> "" Then MsgBox "Des cellules vides ont été trouvées aux adresses suivantes" & Chr(10) & CellVide
        
    Suite:
        DerCol = [IV3].End(xlToLeft).Column
        Range(Cells(3, 1), Cells(NbLigMax, DerCol)).Copy
    End Sub
    

    Cdlt
    0
    1. bitbit
       
      Merci pour votre patience et votre disponibilité. La route a été très longue mais m'avez accompagné de bout en bout. Merci à toute la communauté
      0