Msgbox lorsque dans colonne A et D une cellule est vide

Résolu
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. 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
    1. 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
      1. 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
        1. 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
          1. 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
            1. 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
              1. 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
                1. 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
                  1. 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
                    1. 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
                      1. 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
                        1. 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
                          1. 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. 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