VBA compter cellules au demarrage

  • Initiateur de la discussion Initiateur de la discussion flstyle
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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 🙂
 
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:
Re : VBA compter cellules au demarrage

salut

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

et sans "s" superflus 😛
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
 
Re : VBA compter cellules au demarrage

salut

surtout pour le plaisir de croiser mes chers collègues 😀😀


et sans "s" superflus 😛
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 😛
 
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+
 
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+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour