Bonjour à tous
Une discussion a été aujourd'hui ouverte.
Il y était question d'une difficulté rencontrée pour déterminer le nombre de cellules contenant "Non"
Bien qu'il soit plus que vraisemblable que la cause de cette difficulté était le fait d'espace(s) avant ou après la chaîne "Non", j'avais de mon côté fait observer qu'il valait toujours mieux préciser la propriété utilisée des cellules parcourues, plutôt que de laisser VBA "deviner" et choisir celle à prendre en considération.
Cette remarque aura pu, je le sais, paraître quelque peu exagérée.
Et pourtant ....
Voici donc le petit test que je propose, plus particulièrement à ceux qui n'ont pas encore pris cette sage habitude (de spécifier clairement la propriété) --->>
Une feuille de calcul avec un bouton de commande commandbutton1 et ce code :
Voilà -->> remplissez donc la colonne A de nombres, dont certains > 10 et d'autres < 10 -->> observez -->>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 Option Explicit Private Sub CommandButton1_Click() Dim dl As Long, k As Long, nbdefault As Long, nbvalue As Long, nbtext As Long, totalrejets As Double, totalretenu As Double dl = Range("A" & Rows.Count).End(xlUp).Row nbdefault = 0: nbvalue = 0: nbtext = 0: totalrejets = 0: totalretenu = 0 For k = 1 To dl If Range("A" & k) = "Non" Then nbdefault = nbdefault + 1 If Range("A" & k).Value = "Non" Then nbvalue = nbvalue + 1 If Range("A" & k).Text = "Non" Then nbtext = nbtext + 1: totalrejets = totalrejets + Range("A" & k).Value Else totalretenu = totalretenu + Range("A" & k).Value End If Next MsgBox " NOMBRE DE ""NON""" & vbCrLf & "sans utiliser de propriété ===>> " & nbdefault & vbCrLf & _ "en utlisant la propriété value (qui est celle par défaut) ===>> " & nbvalue & vbCrLf & _ "mais en utilisant la propriété text ===>> " & nbtext & vbCrLf & vbCrLf & " Regardons nos différents totaux" & vbCrLf & _ "total réel ===>> " & WorksheetFunction.Sum(Range("A1:A" & dl)) & vbCrLf & _ "total rejeté ===>> " & totalrejets & vbCrLf & _ "total retenu ===>> " & totalretenu End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column > 1 Then Exit Sub Target.HorizontalAlignment = 3 Target.NumberFormat = "#.00" On Error Resume Next If IsNumeric(Target.Text) And Target.Value <> "" And Target.Value < 10 Then Target.NumberFormat = """Non""" On Error GoTo 0 End Sub
Cliquez maintenant sur le bouton de commande --->> lisez
Une précision : j'ai voulu ici ne montrer (je dis bien montrer car ce n'est en général pas le cas lorsque l'on met en place ce genre de stratagème) que la "moelle" des choses. Tout est donc ici visible et apparent, ce qui est loin d'être le cas lorsque le développeur installe ce genre de mécanisme.
J'ai choisi des "Non". C'est bien "autre chose" qu'une chaîne bien trop visible que l'on choisit généralement
Pourquoi et quand le ferait-il ? Comment "cacherait"-il, etc ??? -->> c'est en général là sa seule "affaire" et cela ne relevant que d'autres aspects, dont la créativité, je n'ai aucune intention d'en exposer les raisons.
Contentez-vous du seul objectif de la présente discussion : Montrer l'importance de la spécification systématique des propriétés utilisées
Amitiés
Partager