Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Sélection dans VBA

3 réponses
Avatar
Stéphane
Bonjour,

Je suis en train de créer un code dans VBA mais je suis coincé.

Voici mon code

sub comptage()
dim cells As Range, compteur As Byte
compteur = 0

For each cells In sheets ("base de données").Range("I:I")
if cells = "client" then
compteur = compteur + 1
end if
next
Sheets ("stat").range ("A2").Vlaue = compteur
end sub

CE code fonctionne mais est trèss lent puisqu'il va regarder chaque cellule
dans la colonne I.

Je souhaiterais savoir comment intégrer la macro qui permet de séléctionner
jusqu'à la dernière cellule rempli dans la colonne I.

JE connais le code suivant pour atteindre la dernière ligne :
Range ("A1").End(xlDown.Offset (0,0).select.

Je n'arrive pas à l'intégrer dans la macro comptage.

D'avance merci de votre précieuse aide

Stéphane

3 réponses

Avatar
Rai
Bonjour

Essaie ceci :
(pas testé)

Sub comptage()
dim cells as range, compteur as byte
Compteur=0
DerLig = Range ("I65536").End(xlUp).Row

For Each cells In Sheets("base de données").Range("I1:I" & DerLig)
.....
Next cells
Sheets ("stat").range ("A2").Value = compteur
End Sub

Bonne continuation

Rai

"Stéphane" a écrit dans le message de news:
Bonjour,

Je suis en train de créer un code dans VBA mais je suis coincé.

Voici mon code

sub comptage()
dim cells As Range, compteur As Byte
compteur = 0

For each cells In sheets ("base de données").Range("I:I")
if cells = "client" then
compteur = compteur + 1
end if
next
Sheets ("stat").range ("A2").Vlaue = compteur
end sub

CE code fonctionne mais est trèss lent puisqu'il va regarder chaque cellule
dans la colonne I.

Je souhaiterais savoir comment intégrer la macro qui permet de séléctionner
jusqu'à la dernière cellule rempli dans la colonne I.

JE connais le code suivant pour atteindre la dernière ligne :
Range ("A1").End(xlDown.Offset (0,0).select.

Je n'arrive pas à l'intégrer dans la macro comptage.

D'avance merci de votre précieuse aide

Stéphane


Avatar
AV
Qques remarques :
Ne pas réinventer une fonction surtout pour la remplacer par une boucle !
Il existe la fonction NB.SI (CountIf en vba) pour décompter sous condition
Pour ton exemple (compter le nombre de "client" en I1:Ix) ça ferait :

Sub comptage()
x = ['base de données'!I65536].End(3).Address
MsgBox Application.CountIf(Range("'base de données'!I1:" & x), "client")
End Sub

Autre remarque : éviter les noms de feuille avec espaces car ça complique
inutilement l'exploitation en aval
Dans le cas présent, pour définir la variable "x", ça oblige à entourer le nom
(dans vba) par des apostrophes

AV
Avatar
denis P
Si tu utilise WorksheetFunction.CountIf tu n'as pas besoin de boucle, c'est
plus rapide
Exemple : Cherche le nb de "a" dans la colonne A.
Denis p.

'''''''''''Denis Pasquier 2004'''''''''''''''''''''''''
Option Explicit
Sub test()
Dim plage As Range
Dim cherche As Variant
Dim nb_occrence As Double
cherche = "a"
Set plage = Range("a1", Range("A65536").End(xlUp))
nb_occrence = ComptCel(plage, cherche)
Range("C1").Value = nb_occrence
Set plage = Nothing
End Sub
''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''
Function ComptCel(plage As Range, ValeurCherchée As Variant) As Integer
ComptCel = Application.WorksheetFunction.CountIf(plage, ValeurCherchée)
End Function
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''

"Stéphane" a écrit dans le message de
news:
Bonjour,

Je suis en train de créer un code dans VBA mais je suis coincé.

Voici mon code

sub comptage()
dim cells As Range, compteur As Byte
compteur = 0

For each cells In sheets ("base de données").Range("I:I")
if cells = "client" then
compteur = compteur + 1
end if
next
Sheets ("stat").range ("A2").Vlaue = compteur
end sub

CE code fonctionne mais est trèss lent puisqu'il va regarder chaque
cellule

dans la colonne I.

Je souhaiterais savoir comment intégrer la macro qui permet de
séléctionner

jusqu'à la dernière cellule rempli dans la colonne I.

JE connais le code suivant pour atteindre la dernière ligne :
Range ("A1").End(xlDown.Offset (0,0).select.

Je n'arrive pas à l'intégrer dans la macro comptage.

D'avance merci de votre précieuse aide

Stéphane