XL 2016 Modifier le code VBA

Dadi147

XLDnaute Occasionnel
Bonjour...oui, je veux compter à partir de là où est la valeur

Je veux la somme du nombre de cellules après qu'il y ait la valeur dans la cellule ("s2")... Exemple si vous trouvez la valeur dans cell ("A80")
Les cellules sont comptées de (A80) à (A99)

VB:
Sub Count_cells_if()

Dim ws As Worksheet
Set ws = Worksheets("sh1")

ws.Range("a100") = Application.WorksheetFunction.CountIf(ws.Range("a1:a99"), "<=" & ws.Range("s2"))
ws.Range("b100") = Application.WorksheetFunction.CountIf(ws.Range("b1:b99"), "<=" & ws.Range("s2"))
ws.Range("c100") = Application.WorksheetFunction.CountIf(ws.Range("c1:c99"), "<=" & ws.Range("s2"))
ws.Range("d100") = Application.WorksheetFunction.CountIf(ws.Range("d1:d99"), "<=" & ws.Range("s2"))


End Sub
 
Solution
C
Bonjour le fil,

@Dadi147, il serait bien d'éviter de mettre des titre du style "Modifier le code VBA" ça ne veut rien dire et ce n'est pas conforme à la charte :rolleyes:

Concernant ton problème, il faut passer par des variables, ça évite les messages d'erreur
VB:
Sub Count_cells_if()
  Dim MaVal As Variant
  Dim ws As Worksheet
  Set ws = Worksheets("sh1")
 On Error Resume Next
  MaVal = 0: MaVal = Application.WorksheetFunction.CountIf(ws.Range("a" & Application.WorksheetFunction.Match(Range("f3"), _
    Range("a1:a99"), 0) & ":a99"), "<=" & ws.Range("f3"))
  If MaVal <> 0 Then ws.Range("a100") = MaVal
 
 'Etc ....'
 ' Fin de la gestion d'erreur
 On Error Goto 0
End Sub

A+

xUpsilon

XLDnaute Accro
Bonjour,

Il va falloir être plus clair, avec un fichier éventuellement ?

Voici ce que j'ai compris :
- il y a une valeur en [S2]
- on déroule toutes les cellules de la colonne A
- à partir du moment où on trouve la valeur de [S2], on retient la cellule A*, avec * la première cellule de la plage à compter
- on compte le nombre de cellules non vides "après" la cellule trouvée (donc le nombre de cellule en dessous de cette dernière), toujours en colonne A

Est-ce ça ?
Si non, que dois je comprendre ?

Bonne journée,
 

Dadi147

XLDnaute Occasionnel
Bonjour,

Il va falloir être plus clair, avec un fichier éventuellement ?

Voici ce que j'ai compris :
- il y a une valeur en [S2]
- on déroule toutes les cellules de la colonne A
- à partir du moment où on trouve la valeur de [S2], on retient la cellule A*, avec * la première cellule de la plage à compter
- on compte le nombre de cellules non vides "après" la cellule trouvée (donc le nombre de cellule en dessous de cette dernière), toujours en colonne A

Est-ce ça ?
Si non, que dois je comprendre ?

Bonne journée,
Oui, après avoir conservé la valeur A, ce qui est en dessous est calculé, mais à condition qu'il soit inférieur ou égal à la valeur de la cellule s2, et le reste est ignoré.
 

job75

XLDnaute Barbatruc
Bonjour,

Cette expression :
VB:
ws.Range("a100") = Application.WorksheetFunction.CountIf(ws.Range("a1:a99"), "<=" & ws.Range("s2"))
compte forcément les cellules à partir de la 1ère cellule contenant la valeur de S2.

A+
 

Dadi147

XLDnaute Occasionnel
Bonjour,

Cette expression :
VB:
ws.Range("a100") = Application.WorksheetFunction.CountIf(ws.Range("a1:a99"), "<=" & ws.Range("s2"))
compte forcément les cellules à partir de la 1ère cellule contenant la valeur de S2.

A+
Résolu Le problème est maintenant le message d’erreur lorsque la valeur n’existe pas dans la colonne Comment peut-il laisser la case vide sans afficher le message d’erreur

VB:
Sub Count_cells_if()

Dim ws As Worksheet
Set ws = Worksheets("sh1")

ws.Range("a100") = Application.WorksheetFunction.CountIf(ws.Range("a"&Application.WorksheetFunction.Match(Range("f3"),Range("a1:a99"),0)&":a99"), "<=" & ws.Range("f3"))
ws.Range("b100") = Application.WorksheetFunction.CountIf(ws.Range("b"&Application.WorksheetFunction.Match(Range("f3"),Range("b1:b99"),0)&":b99"), "<=" & ws.Range("f3"))
ws.Range("c100") = Application.WorksheetFunction.CountIf(ws.Range("c"&Application.WorksheetFunction.Match(Range("f3"),Range("c1:c99"),0)&":c99"), "<=" & ws.Range("f3"))
ws.Range("d100") = Application.WorksheetFunction.CountIf(ws.Range("d"&Application.WorksheetFunction.Match(Range("f3"),Range("d1:d99"),0)&":d99"), "<=" & ws.Range("f3"))


End Sub
 
C

Compte Supprimé 979

Guest
Bonjour le fil,

@Dadi147, il serait bien d'éviter de mettre des titre du style "Modifier le code VBA" ça ne veut rien dire et ce n'est pas conforme à la charte :rolleyes:

Concernant ton problème, il faut passer par des variables, ça évite les messages d'erreur
VB:
Sub Count_cells_if()
  Dim MaVal As Variant
  Dim ws As Worksheet
  Set ws = Worksheets("sh1")
 On Error Resume Next
  MaVal = 0: MaVal = Application.WorksheetFunction.CountIf(ws.Range("a" & Application.WorksheetFunction.Match(Range("f3"), _
    Range("a1:a99"), 0) & ":a99"), "<=" & ws.Range("f3"))
  If MaVal <> 0 Then ws.Range("a100") = MaVal
 
 'Etc ....'
 ' Fin de la gestion d'erreur
 On Error Goto 0
End Sub

A+
 

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 116
dernier inscrit
kutobi87