VBA compter cellules au demarrage

flstyle

XLDnaute Nouveau
Bonjour a tous,

J'ai deja posé la question sur une conversation mais je trouve ca interressant d'n faire un sujet.
Ceci pourrai mettre fortement utilie.

Voila j'ai un tableau où je voudrais qu'il y est un message qui s'affiche (Msgbox) qui m'indique, à l'ouverture de ma classeur, le nombre de cellule de la colonne G (a partir de la 3eme ligne à la 3000eme) qui rempli les condition suivante:
si(et(G<>F;G<>"")

Voila. Je vous remercie par avance sur vos réponses, que je sais toujours bonnes ;)

ps: je vous joins un ptit fichier pour illustrer.
 

Pièces jointes

  • TEST.xlsx
    10.3 KB · Affichages: 36
  • TEST.xlsx
    10.3 KB · Affichages: 42
  • TEST.xlsx
    10.3 KB · Affichages: 45

DoubleZero

XLDnaute Barbatruc
Re : VBA compter cellules au demarrage

Bonjour, flstyle, le Forum,

Comme ceci (code dans ThisWorkbook) ?

Code:
Option Explicit
Private Sub Workbook_Open()
    Dim i As Long, compteur As Double
    With Application: .ScreenUpdating = False: .Calculation = xlManual: .EnableEvents = False: End With
    Sheets("Feuil1").Activate ' nom onglet adapter
    compteur = 0
    For i = Cells(Rows.Count, "f").End(xlUp).Row To 3 Step -1
        If Range("f" & i) <> Range("g" & i) And Range("g" & i) <> "" Then compteur = compteur + 1
    Next i
    MsgBox compteur
    With Application: .EnableEvents = True: .Calculation = xlAutomatic: .ScreenUpdating = True: End With
End Sub

A bientôt :)
 

Staple1600

XLDnaute Barbatruc
Re : VBA compter cellules au demarrage

Bonsoir à tous, 00 ;)

Une autre façon de faire (sans boucle)
Code:
Sub NombreErreurs()
Application.ScreenUpdating = False
Dim rng As Range: Set rng = Range("H3:H3000")
rng = "=IF(AND(RC[-2]<>RC[-1],RC[-1]<>""""),""$"",0)"
MsgBox "Vous avez " & Application.CountIf(rng, "$") & " faute(s).", vbCritical
Columns(8).ClearContents
Application.ScreenUpdating = True
End Sub
 
Dernière édition:

Si...

XLDnaute Barbatruc
Re : VBA compter cellules au demarrage

salut

surtout pour le plaisir de croiser mes chers collègues :D:D
Bonsoir à tous, 00 ;)
Une autre façon de faire (sans boucle)...

et sans "s" superflus :p
Code:
Sub Oups()
  Dim R As Range, n As Long
  Set R = Range("H3:H" & [A6500].End(xlUp).Row): R.FormulaLocal = "=(F3=G3)+(G3<>0)"
  n = Application.CountIf(R, 1)
  MsgBox "Vous avez " & n & " faute" & IIf(n < 2, "", "s"), , "": R.Clear
End Sub
 

NezQuiCoule

XLDnaute Occasionnel
Re : VBA compter cellules au demarrage

salut

surtout pour le plaisir de croiser mes chers collègues :D:D


et sans "s" superflus :p
Code:
Sub Oups()
  Dim R As Range, n As Long
  Set R = Range("H3:H" & [A6500].End(xlUp).Row): R.FormulaLocal = "=(F3=G3)+(G3<>0)"
  n = Application.CountIf(R, 1)
  MsgBox "Vous avez " & n & " faute" & IIf(n < 2, "", "s"), , "": R.Clear
End Sub

Encore mieux, sans IIf !

Code:
MsgBox "Vous avez " & n & " faute" & Chr(32 + 83 * Sgn(n - 1))

Bon j'avoue, inutile !
Salut à tous :p
 

job75

XLDnaute Barbatruc
Re : VBA compter cellules au demarrage

Bonjour à tous,

Alors les ami(e)s vous avez oublié la fonction SOMMEPROD :

Code:
Private Sub Workbook_Open()
With Sheets("Feuil1").[G3:G3000] 'plage adaptable
MsgBox "Vous avez " & _
Evaluate("SUM((" & .Columns(0).Address & "<>" & .Address & ")*(" & .Address & "<>""""))") _
& " faute(s) !"
End With
End Sub
En VBA on peut remplacer SUMPRODUCT par SUM...

A+
 

job75

XLDnaute Barbatruc
Re : VBA compter cellules au demarrage

Re,

Pour info l'évaluation de la formule est rapide, sur Win 7 - Excel 2010 :

[G3:G3000] durée < 0,01 seconde

[G3:G100000] durée = 0,11 seconde

[G3:G1000000] durée = 0,86 seconde.

Pour les mesurer j'ai rempli les colonnes F et G avec la formule =ALEA().

A+
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 321
Messages
2 087 266
Membres
103 501
dernier inscrit
talebafia