Macro vérification de colonne non vide et suppression de certaines lignes

Sandrine123

XLDnaute Nouveau
Bonjour,

Je sollicite votre aide pour une macro Excel.

Mon fichier Excel est composé de 39 colonnes, toutes numérotées dans la première ligne.

Je souhaiterais avoir une macro qui vérifie mon fichier de cettte façon :

Les colonnes suivantes ne doivent pas être vides :
Colonne 1-3-6-7-8-9-10-11-12-13-14-15-16-17-18-21-22-23-24-25-26-27-31-35-36.

La colonne 5 ne doit contenir que des données de type "chiffre".

Si une valeur dans la colonne 5 est renseignée, les colonnes 24 et 31 correspondant à cette ligne doivent être vide.

Si dans la colonne 31 il est écrit "RST", la ligne entière doit être supprimée. De même colonne 21, si il est écrit "BBh" il faut supprimer la ligne entière.

J'aimerais que les éventuelles erreurs (j'en ai mise exprès dans mon fichier test :p ) soit afficher par le biais d'une fenetre qui récapitule tous les soucis avec les coordonées (par exemple cellule vide colonne 1 et ligne 6).

Est-ce possible de créer une telle macro ? Ou je demande l'impossible ?

Merci d'avance.

Bonne journée à tous
 

Pièces jointes

  • FICHIER1.xls
    26.5 KB · Affichages: 55
  • FICHIER1.xls
    26.5 KB · Affichages: 54
  • FICHIER1.xls
    26.5 KB · Affichages: 51
Dernière édition:

job75

XLDnaute Barbatruc
Re : Macro vérification de colonne non vide et suppression de certaines lignes

Bonjour Sandrine123,

C'est surtout qu'on se prend la tête à essayer de comprendre votre post.

Mais votre fichier devrait suffire pour tester une solution.

Je prépare la macro.

A+
 
Dernière édition:

MJ13

XLDnaute Barbatruc
Re : Macro vérification de colonne non vide et suppression de certaines lignes

Bonjour à tous

Comme pour une fois, on avait un fichier :eek:, j'ai fait pour:

Les colonnes suivantes ne doivent pas être vides :
Colonne 1-3-6-7-8-9-10-11-12-13-14-15-16-17-18-21-22-23-24-25-26-27-31-35-36.

Code:
'1,3,6,7,8,9,10,11,12,13,14,15,16,17,18,21,22,23,24,25,26,27,31,35,36
Sub Test_Colonnes_Vide()
listearray = Array(1, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 21, 22, 23, 24, 25, 26, 27, 31, 35, 36)
'Ncol = Cells(1, Columns.Count).End(xlToLeft).Column
For i = 0 To 24 'Ncol
Ncount = WorksheetFunction.CountA(Columns(listearray(i)))
If Ncount <= 2 Then MsgBox ("Problème sur la colonne" & listearray(i))
Next
End Sub

En plus, je l'ai fait sans aide ;). Pour le reste, je le laisse à la communauté :).
 

job75

XLDnaute Barbatruc
Re : Macro vérification de colonne non vide et suppression de certaines lignes

Bonsoir Sandrine, Michel,

Eh bien ça fait une belle macro :eek:

Code:
Sub Vérification()
Dim a, b, ua As Byte, ub As Byte, i&, fin&, c As Range
Dim mes1$, j As Byte, mes2$, mes3$, mes$
a = Array(1, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 21, 22, 23, 24, 25, 26, 27, 31, 35, 36)
b = Array(24, 31)
ua = UBound(a): ub = UBound(b)
i = 3 'ligne du début, à adapter
fin = Cells.Find("*", , xlFormulas, , xlByRows, xlPrevious).Row
1 For i = i To fin
  Set c = Cells(i, 21)
  If LCase(c) = "bbh" Then _
    If MsgBox(c.Address(0, 0) & " contient BBH, supprimer la ligne ?", 4) = 6 _
      Then Rows(i).Delete: fin = fin - 1: GoTo 1
  Set c = Cells(i, 31)
  If LCase(c) = "rst" Then _
    If MsgBox(c.Address(0, 0) & " contient RST, supprimer la ligne ?", 4) = 6 _
      Then Rows(i).Delete: fin = fin - 1: GoTo 1
  Set c = Cells(i, 5)
  If Not IsNumeric(c) Or InStr(c, Mid(1.1, 2, 1)) Then _
    mes1 = mes1 & vbLf & "- " & c.Address(0, 0)
  For j = 0 To ua
    If Cells(i, a(j)) = "" And (c = "" Or IsError(Application.Match(a(j), b, 0))) _
      Then mes2 = mes2 & vbLf & "- " & Cells(i, a(j)).Address(0, 0)
  Next
  If c <> "" Then
    For j = 0 To ub
      If Cells(i, b(j)) <> "" Then _
        mes3 = mes3 & vbLf & "- " & Cells(i, b(j)).Address(0, 0)
    Next
  End If
Next
'---message---
mes = IIf(mes1 = "", "", vbLf & "Ne doit contenir que des chiffres :" & mes1) _
    & IIf(mes2 = "", "", vbLf & "Ne doit pas être vide :" & mes2) _
    & IIf(mes3 = "", "", vbLf & "Doit être vide :" & mes3)
MsgBox IIf(mes = "", "Aucune erreur", Mid(mes, 2)), , "Erreurs"
End Sub
Testez sur le fichier joint et vérifiez avec soin que ça convient.

Nota : une MsgBox ne peut contenir que 1023 caractères.

S'il y a beaucoup d'erreurs il faudra éditer dans une feuille de calcul.

Edit : Mid(1.1, 2, 1) détermine le séparateur décimal utilisé par l'ordinateur.

A+
 

Pièces jointes

  • FICHIER(1).xls
    58.5 KB · Affichages: 41
  • FICHIER(1).xls
    58.5 KB · Affichages: 42
  • FICHIER(1).xls
    58.5 KB · Affichages: 40
Dernière édition:

job75

XLDnaute Barbatruc
Re : Macro vérification de colonne non vide et suppression de certaines lignes

Re,

Si l'on veut restituer les erreurs dans une feuille de calcul, écrire en fin de macro :

Code:
With Sheets("Erreurs")
  .[A:A].ClearContents 'RAZ
  If mes = "" Then MsgBox "Aucune erreur", , "Erreurs": Exit Sub
  a = Split(Mid(mes, 2), vbLf)
  .[A1].Resize(UBound(a) + 1) = Application.Transpose(a)
  .Activate
End With
Fichier (1 bis).

Edit : pour le fun j'ai créé une MFC en colonne A de la feuille Erreurs.

A+
 

Pièces jointes

  • FICHIER(1 bis).xls
    72 KB · Affichages: 42
Dernière édition:

job75

XLDnaute Barbatruc
Re : Macro vérification de colonne non vide et suppression de certaines lignes

Bonjour Sandrine, le forum,

Notez que si l'on ne veut plus du contrôle "Doit être vide" il suffit de choisir pour b une colonne vide :

Code:
b = Array(256)
Bonne journée et A+
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof