Msgbox lorsque dans colonne A et D une cellule est vide

Résolu/Fermé
bitbit - Modifié par bitbit le 22/07/2015 à 13:07
 bitbit - 27 juil. 2015 à 13:04
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


A voir également:

13 réponses

Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
23 juil. 2015 à 06:36
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
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
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
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
24 juil. 2015 à 04:53
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
24 juil. 2015 à 11:13
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
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
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
24 juil. 2015 à 18:20
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
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
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
24 juil. 2015 à 22:59
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
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
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
27 juil. 2015 à 10:39
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
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
27 juil. 2015 à 10:48
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
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