Dès le départ, je suis un novice en matière de codage, et l'étendue de mes compétences est en cours de modification basée sur les recherches Google. J'utilise Excel 2010 et j'essaie d'utiliser VBA pour éviter d'utiliser la mise en forme conditionnelle. La feuille de calcul que j'utilise est un modèle avec 31 colonnes, dont 20 sont obligatoires. Il y a un codage en place que s'il y a une entrée dans une de ces colonnes pour une ligne donnée, les 19 autres cellules doivent être remplies avant que le fichier puisse être sauvegardé.Excel VBA mise en forme conditionnelle des cellules vides dans la rangée
J'essaie de faire une fonction similaire pour mettre en évidence les cellules vides empêchant le fichier d'être sauvegardé. Je sais que je pourrais utiliser la mise en forme conditionnelle, mais cela l'obligerait à regarder une cellule dans chaque rangée, par opposition à l'une des cellules requises dans cette rangée. Je sais aussi qu'il pourrait faire plusieurs formats conditionnels, mais je sais que plus il y a de couches, plus la feuille de calcul fonctionnera lentement.
Est-ce possible? Les colonnes que j'ai qui sont obligatoires sont A-D, F-K, M-N, S-Y & AE. Dans le cas où il serait un facteur, j'ai attaché le code que je utilise pour mandat une fois l'entrée l'une de ces colonnes sont habitées:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim ws As Worksheet
Dim rg As Range, c As Range
Dim bCanSave As Boolean
Dim sWarning As String
Set ws = Sheets("Main")
Set rg = ws.Range("A2:A10000,B2:B10000,C2:C10000,D2:D10000,F2:F10000,G2:G10000,H2:H10000,J2:J10000,K2:K10000,N2:N10000,S2:S10000,T2:T10000,U2:U10000,V2:V10000,W2:W10000,X2:X10000,Y2:Y10000,AE2:AE10000")
sWarning = "File not saved!" & vbNewLine & "Mandatory cells missing in rows: " & vbNewLine
With ws
bCanSave = True
For Each c In rg
If Not IsEmpty(c) Then
If .Cells(c.Row, "A") = "" Or .Cells(c.Row, "B") = "" Or .Cells(c.Row, "C") = "" Or .Cells(c.Row, "D") = "" Or .Cells(c.Row, "F") = "" Or .Cells(c.Row, "G") = "" Or .Cells(c.Row, "H") = "" Or .Cells(c.Row, "I") = "" Or .Cells(c.Row, "J") = "" Or .Cells(c.Row, "K") = "" Or .Cells(c.Row, "N") = "" Or .Cells(c.Row, "S") = "" Or .Cells(c.Row, "T") = "" Or .Cells(c.Row, "U") = "" Or .Cells(c.Row, "V") = "" Or .Cells(c.Row, "W") = "" Or .Cells(c.Row, "X") = "" Or .Cells(c.Row, "Y") = "" Or .Cells(c.Row, "AE") = "" Then
bCanSave = False
sWarning = sWarning & c.Row & ","
End If
End If
Next c
End With
If Not bCanSave Then
MsgBox sWarning, vbExclamation
Cancel = True
End If
End Sub
«J'utilise Excel _____ » - est que « ____ » un espace réservé pour l'année/version? –
Je * soupçonne * que ce que vous entendez par * qui l'obligerait à regarder une cellule dans chaque rangée * est une mauvaise compréhension. – pnuts
Mug de Mat: Oui ... édité l'OP avec Excel 2010. pnuts: Peut-être un mauvais libellé de ma part? Si je veux avoir un impact sur la mise en forme conditionnelle sur 20 colonnes, j'aurais besoin de 20 conditions dépendantes. – rant