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

macro comptage

12 réponses
Avatar
marc
Bonjour à vous tous
Voici mon problème.
Pour chacune des colonnes (De F à S), il y a des événements.
Pour la colonne A, j'ai le nom des employés( B jusqu'à E, informations supplémentaires).
Lorsque je vais inscrire un employé pour un événement, je vais lui mettre un X. Par contre, il ne peut pas y avoir plus de 40
employés par événement.
J'aimerais avoir une macro qui dit que lorsque je mettrai le 41ième X ou plus, qu'Excel refuse son inscription avec un msgbox
disant: Il y a déjà 40 personnes d'inscrites.
En espérant avoir été assez clair, sinon, je pourrai vous envoyer le fichier.
Merci
marc

10 réponses

1 2
Avatar
JPMonnier
Bonsoir,
Supposons des salariés de A2 à A100
proc a mettre dans la Feuil1 (VBA)
'procédure pour contrôler le nb de x dans la colonne F
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("F2:F100")) Is Nothing Then
For Each n In Range("F2:F100")
If n = "x" Then
c = c + 1
End If
If c > 40 Then
MsgBox "plus de 40 salariés pour un événement"
MsgBox "supprimer un x pour un salarié"
Exit Sub
End If
Next
End If

à adapter aux autres colonnes
--
Cordialement



"marc" a écrit dans le message de
news:
Bonjour à vous tous
Voici mon problème.
Pour chacune des colonnes (De F à S), il y a des événements.
Pour la colonne A, j'ai le nom des employés( B jusqu'à E, informations
supplémentaires).
Lorsque je vais inscrire un employé pour un événement, je vais lui mettre
un X. Par contre, il ne peut pas y avoir plus de 40 employés par
événement.
J'aimerais avoir une macro qui dit que lorsque je mettrai le 41ième X ou
plus, qu'Excel refuse son inscription avec un msgbox disant: Il y a déjà
40 personnes d'inscrites.
En espérant avoir été assez clair, sinon, je pourrai vous envoyer le
fichier.
Merci
marc



Avatar
garnote
Ou bien quelque chose du genre :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ici As Range
Dim n As Long
Set ici = Range("F2:F100")
If Not Intersect(Target, ici) Is Nothing Then
n = Application.CountIf(ici, "x")
If n > 40 Then
Target.Select
Target.ClearContents
MsgBox "Il y a déjà 40 personnes d'inscrites."
End If
End If
End Sub

Cette macro ne fait pas la différence entre x et X
et tu dois entrer un seul x ( X ) à la fois.

Serge



"marc" a écrit dans le message de news:

Bonjour à vous tous
Voici mon problème.
Pour chacune des colonnes (De F à S), il y a des événements.
Pour la colonne A, j'ai le nom des employés( B jusqu'à E, informations
supplémentaires).
Lorsque je vais inscrire un employé pour un événement, je vais lui mettre
un X. Par contre, il ne peut pas y avoir plus de 40 employés par
événement.
J'aimerais avoir une macro qui dit que lorsque je mettrai le 41ième X ou
plus, qu'Excel refuse son inscription avec un msgbox disant: Il y a déjà
40 personnes d'inscrites.
En espérant avoir été assez clair, sinon, je pourrai vous envoyer le
fichier.
Merci
marc



Avatar
marc
Bonjour à vous deux
Cela fonctionne. Merci de votre aide
Marc

"garnote" a écrit dans le message de news: %
Ou bien quelque chose du genre :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ici As Range
Dim n As Long
Set ici = Range("F2:F100")
If Not Intersect(Target, ici) Is Nothing Then
n = Application.CountIf(ici, "x")
If n > 40 Then
Target.Select
Target.ClearContents
MsgBox "Il y a déjà 40 personnes d'inscrites."
End If
End If
End Sub

Cette macro ne fait pas la différence entre x et X
et tu dois entrer un seul x ( X ) à la fois.

Serge



"marc" a écrit dans le message de news:
Bonjour à vous tous
Voici mon problème.
Pour chacune des colonnes (De F à S), il y a des événements.
Pour la colonne A, j'ai le nom des employés( B jusqu'à E, informations supplémentaires).
Lorsque je vais inscrire un employé pour un événement, je vais lui mettre un X. Par contre, il ne peut pas y avoir plus de 40
employés par événement.
J'aimerais avoir une macro qui dit que lorsque je mettrai le 41ième X ou plus, qu'Excel refuse son inscription avec un msgbox
disant: Il y a déjà 40 personnes d'inscrites.
En espérant avoir été assez clair, sinon, je pourrai vous envoyer le fichier.
Merci
marc







Avatar
AndréBdR
Je l'aime bien ta Macro.
Si j'osais, j'en demanderais un peu plus...
Au lieu de la seule lettre "x" (ou "X"), est-il possible de trouver dans une plage donnée le nombre
de cellules qui contiendraient le groupe de lettres "gar" au milieu d'un paquet de cellules qui
pourraient tout aussi bien s'écrire "regard" que "bigarreau" que "garnote aime bien les cigares", et
là, ça ferait seulement 3, à raison d'une seule détection par cellule?
Il s'agirait en gros d'une recherche du style *gar*.
Merci d'avance.

"garnote" a écrit dans le message de news:
%
Ou bien quelque chose du genre :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ici As Range
Dim n As Long
Set ici = Range("F2:F100")
If Not Intersect(Target, ici) Is Nothing Then
n = Application.CountIf(ici, "x")
If n > 40 Then
Target.Select
Target.ClearContents
MsgBox "Il y a déjà 40 personnes d'inscrites."
End If
End If
End Sub

Cette macro ne fait pas la différence entre x et X
et tu dois entrer un seul x ( X ) à la fois.

Serge



"marc" a écrit dans le message de news:
Bonjour à vous tous
Voici mon problème.
Pour chacune des colonnes (De F à S), il y a des événements.
Pour la colonne A, j'ai le nom des employés( B jusqu'à E, informations supplémentaires).
Lorsque je vais inscrire un employé pour un événement, je vais lui mettre un X. Par contre, il ne
peut pas y avoir plus de 40 employés par événement.
J'aimerais avoir une macro qui dit que lorsque je mettrai le 41ième X ou plus, qu'Excel refuse
son inscription avec un msgbox disant: Il y a déjà 40 personnes d'inscrites.
En espérant avoir été assez clair, sinon, je pourrai vous envoyer le fichier.
Merci
marc








Avatar
garnote
Salut André,

Ceci te conviendrait-il ?
Sub gar()
Dim c As Range
Dim n As Long
For Each c In Selection
If InStr(1, c.Value, "gar", vbTextCompare) > 0 Then n = n + 1
Next c
MsgBox "Il y a " & n & " cellules contenant la chaîne gar au moins une
fois." _
& vbLf & "Les lettres g, a et r peuvent être en majuscule ou en
minuscule."
End Sub

Serge


"AndréBdR" a écrit dans le message de news:
4aba80f2$0$23438$

Je l'aime bien ta Macro.
Si j'osais, j'en demanderais un peu plus...
Au lieu de la seule lettre "x" (ou "X"), est-il possible de trouver dans
une plage donnée le nombre de cellules qui contiendraient le groupe de
lettres "gar" au milieu d'un paquet de cellules qui pourraient tout aussi
bien s'écrire "regard" que "bigarreau" que "garnote aime bien les
cigares", et là, ça ferait seulement 3, à raison d'une seule détection par
cellule?
Il s'agirait en gros d'une recherche du style *gar*.
Merci d'avance.

"garnote" a écrit dans le message de news:
%
Ou bien quelque chose du genre :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ici As Range
Dim n As Long
Set ici = Range("F2:F100")
If Not Intersect(Target, ici) Is Nothing Then
n = Application.CountIf(ici, "x")
If n > 40 Then
Target.Select
Target.ClearContents
MsgBox "Il y a déjà 40 personnes d'inscrites."
End If
End If
End Sub

Cette macro ne fait pas la différence entre x et X
et tu dois entrer un seul x ( X ) à la fois.

Serge



"marc" a écrit dans le message de news:

Bonjour à vous tous
Voici mon problème.
Pour chacune des colonnes (De F à S), il y a des événements.
Pour la colonne A, j'ai le nom des employés( B jusqu'à E, informations
supplémentaires).
Lorsque je vais inscrire un employé pour un événement, je vais lui
mettre un X. Par contre, il ne peut pas y avoir plus de 40 employés par
événement.
J'aimerais avoir une macro qui dit que lorsque je mettrai le 41ième X ou
plus, qu'Excel refuse son inscription avec un msgbox disant: Il y a déjà
40 personnes d'inscrites.
En espérant avoir été assez clair, sinon, je pourrai vous envoyer le
fichier.
Merci
marc












Avatar
garnote
Ou bien :

Sub garminuscule()
Dim c As Range
Dim n As Long
If TypeName(Selection) <> "Range" Then
MsgBox "Il faut sélectionner une plage de cellules" _
& vbLf & "avant de faire appel à moi ;-)"
Exit Sub
End If
For Each c In Selection
If InStr(1, c.Value, "gar") > 0 Then n = n + 1
Next c
MsgBox "Il y a " & n & " cellule(s) contenant la chaîne gar au moins une
fois." _
& vbLf & "Les lettres g, a et r étant toutes en minuscule."
End Sub

Serge



"garnote" a écrit dans le message de news:
%
Salut André,

Ceci te conviendrait-il ?
Sub gar()
Dim c As Range
Dim n As Long
For Each c In Selection
If InStr(1, c.Value, "gar", vbTextCompare) > 0 Then n = n + 1
Next c
MsgBox "Il y a " & n & " cellules contenant la chaîne gar au moins une
fois." _
& vbLf & "Les lettres g, a et r peuvent être en majuscule ou en
minuscule."
End Sub

Serge


"AndréBdR" a écrit dans le message de news:
4aba80f2$0$23438$

Je l'aime bien ta Macro.
Si j'osais, j'en demanderais un peu plus...
Au lieu de la seule lettre "x" (ou "X"), est-il possible de trouver dans
une plage donnée le nombre de cellules qui contiendraient le groupe de
lettres "gar" au milieu d'un paquet de cellules qui pourraient tout aussi
bien s'écrire "regard" que "bigarreau" que "garnote aime bien les
cigares", et là, ça ferait seulement 3, à raison d'une seule détection
par cellule?
Il s'agirait en gros d'une recherche du style *gar*.
Merci d'avance.

"garnote" a écrit dans le message de news:
%
Ou bien quelque chose du genre :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ici As Range
Dim n As Long
Set ici = Range("F2:F100")
If Not Intersect(Target, ici) Is Nothing Then
n = Application.CountIf(ici, "x")
If n > 40 Then
Target.Select
Target.ClearContents
MsgBox "Il y a déjà 40 personnes d'inscrites."
End If
End If
End Sub

Cette macro ne fait pas la différence entre x et X
et tu dois entrer un seul x ( X ) à la fois.

Serge



"marc" a écrit dans le message de news:

Bonjour à vous tous
Voici mon problème.
Pour chacune des colonnes (De F à S), il y a des événements.
Pour la colonne A, j'ai le nom des employés( B jusqu'à E, informations
supplémentaires).
Lorsque je vais inscrire un employé pour un événement, je vais lui
mettre un X. Par contre, il ne peut pas y avoir plus de 40 employés par
événement.
J'aimerais avoir une macro qui dit que lorsque je mettrai le 41ième X
ou plus, qu'Excel refuse son inscription avec un msgbox disant: Il y a
déjà 40 personnes d'inscrites.
En espérant avoir été assez clair, sinon, je pourrai vous envoyer le
fichier.
Merci
marc
















Avatar
AndréBdR
Parfait Serge.
Et mille excuses à Marc pour m'être infiltré dans son sujet sans crier gare.

"garnote" a écrit dans le message de news:

Ou bien :

Sub garminuscule()
Dim c As Range
Dim n As Long
If TypeName(Selection) <> "Range" Then
MsgBox "Il faut sélectionner une plage de cellules" _
& vbLf & "avant de faire appel à moi ;-)"
Exit Sub
End If
For Each c In Selection
If InStr(1, c.Value, "gar") > 0 Then n = n + 1
Next c
MsgBox "Il y a " & n & " cellule(s) contenant la chaîne gar au moins une fois." _
& vbLf & "Les lettres g, a et r étant toutes en minuscule."
End Sub

Serge



"garnote" a écrit dans le message de news:
%
Salut André,

Ceci te conviendrait-il ?
Sub gar()
Dim c As Range
Dim n As Long
For Each c In Selection
If InStr(1, c.Value, "gar", vbTextCompare) > 0 Then n = n + 1
Next c
MsgBox "Il y a " & n & " cellules contenant la chaîne gar au moins une fois." _
& vbLf & "Les lettres g, a et r peuvent être en majuscule ou en minuscule."
End Sub

Serge


"AndréBdR" a écrit dans le message de news:
4aba80f2$0$23438$

Je l'aime bien ta Macro.
Si j'osais, j'en demanderais un peu plus...
Au lieu de la seule lettre "x" (ou "X"), est-il possible de trouver dans une plage donnée le
nombre de cellules qui contiendraient le groupe de lettres "gar" au milieu d'un paquet de
cellules qui pourraient tout aussi bien s'écrire "regard" que "bigarreau" que "garnote aime bien
les cigares", et là, ça ferait seulement 3, à raison d'une seule détection par cellule?
Il s'agirait en gros d'une recherche du style *gar*.
Merci d'avance.

"garnote" a écrit dans le message de news:
%
Ou bien quelque chose du genre :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ici As Range
Dim n As Long
Set ici = Range("F2:F100")
If Not Intersect(Target, ici) Is Nothing Then
n = Application.CountIf(ici, "x")
If n > 40 Then
Target.Select
Target.ClearContents
MsgBox "Il y a déjà 40 personnes d'inscrites."
End If
End If
End Sub

Cette macro ne fait pas la différence entre x et X
et tu dois entrer un seul x ( X ) à la fois.

Serge



"marc" a écrit dans le message de news:

Bonjour à vous tous
Voici mon problème.
Pour chacune des colonnes (De F à S), il y a des événements.
Pour la colonne A, j'ai le nom des employés( B jusqu'à E, informations supplémentaires).
Lorsque je vais inscrire un employé pour un événement, je vais lui mettre un X. Par contre, il
ne peut pas y avoir plus de 40 employés par événement.
J'aimerais avoir une macro qui dit que lorsque je mettrai le 41ième X ou plus, qu'Excel refuse
son inscription avec un msgbox disant: Il y a déjà 40 personnes d'inscrites.
En espérant avoir été assez clair, sinon, je pourrai vous envoyer le fichier.
Merci
marc





















Avatar
garnote
Et pour compter le nombre de cellules contenant
la chaîne gar une seule fois :

Sub gar_unique_minuscule()
Dim c As Range
Dim n As Long
If TypeName(Selection) <> "Range" Then
MsgBox "Il faut sélectionner une plage de cellules" _
& vbLf & "avant de faire appel à moi ;-)"
Exit Sub
End If
For Each c In Selection
If (Len(c) - Len(Replace(c, "gar", ""))) / Len("gar") = 1 Then n = n
+ 1
Next c
MsgBox "Il y a " & n & " cellule(s) contenant la chaîne gar une seule
fois." _
& vbLf & "Les lettres g, a et r étant toutes en minuscule."
End Sub

Serge


"AndréBdR" a écrit dans le message de news:
4abb2c37$0$23487$

Parfait Serge.
Et mille excuses à Marc pour m'être infiltré dans son sujet sans crier
gare.

"garnote" a écrit dans le message de news:

Ou bien :

Sub garminuscule()
Dim c As Range
Dim n As Long
If TypeName(Selection) <> "Range" Then
MsgBox "Il faut sélectionner une plage de cellules" _
& vbLf & "avant de faire appel à moi ;-)"
Exit Sub
End If
For Each c In Selection
If InStr(1, c.Value, "gar") > 0 Then n = n + 1
Next c
MsgBox "Il y a " & n & " cellule(s) contenant la chaîne gar au moins
une fois." _
& vbLf & "Les lettres g, a et r étant toutes en minuscule."
End Sub

Serge



"garnote" a écrit dans le message de news:
%
Salut André,

Ceci te conviendrait-il ?
Sub gar()
Dim c As Range
Dim n As Long
For Each c In Selection
If InStr(1, c.Value, "gar", vbTextCompare) > 0 Then n = n + 1
Next c
MsgBox "Il y a " & n & " cellules contenant la chaîne gar au moins
une fois." _
& vbLf & "Les lettres g, a et r peuvent être en majuscule ou en
minuscule."
End Sub

Serge


"AndréBdR" a écrit dans le message de news:
4aba80f2$0$23438$

Je l'aime bien ta Macro.
Si j'osais, j'en demanderais un peu plus...
Au lieu de la seule lettre "x" (ou "X"), est-il possible de trouver
dans une plage donnée le nombre de cellules qui contiendraient le
groupe de lettres "gar" au milieu d'un paquet de cellules qui
pourraient tout aussi bien s'écrire "regard" que "bigarreau" que
"garnote aime bien les cigares", et là, ça ferait seulement 3, à raison
d'une seule détection par cellule?
Il s'agirait en gros d'une recherche du style *gar*.
Merci d'avance.

"garnote" a écrit dans le message de news:
%
Ou bien quelque chose du genre :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ici As Range
Dim n As Long
Set ici = Range("F2:F100")
If Not Intersect(Target, ici) Is Nothing Then
n = Application.CountIf(ici, "x")
If n > 40 Then
Target.Select
Target.ClearContents
MsgBox "Il y a déjà 40 personnes d'inscrites."
End If
End If
End Sub

Cette macro ne fait pas la différence entre x et X
et tu dois entrer un seul x ( X ) à la fois.

Serge



"marc" a écrit dans le message de news:

Bonjour à vous tous
Voici mon problème.
Pour chacune des colonnes (De F à S), il y a des événements.
Pour la colonne A, j'ai le nom des employés( B jusqu'à E,
informations supplémentaires).
Lorsque je vais inscrire un employé pour un événement, je vais lui
mettre un X. Par contre, il ne peut pas y avoir plus de 40 employés
par événement.
J'aimerais avoir une macro qui dit que lorsque je mettrai le 41ième X
ou plus, qu'Excel refuse son inscription avec un msgbox disant: Il y
a déjà 40 personnes d'inscrites.
En espérant avoir été assez clair, sinon, je pourrai vous envoyer le
fichier.
Merci
marc

























Avatar
Caetera
> Et pour compter le nombre de cellules contenant
la chaîne gar une seule fois :



MsgBox [CountIf(plage,"gar")]

Etc
Avatar
garnote
Ave Caetera,

Alors là on ne parle pas de la même chose!
Sub compte()
MsgBox Application.CountIf(Selection, "gar")
End Sub
renvoie le nombre de cellules contenant exclusivement
gar en ne tenant pas compte de la casse.
Quant à ma macro du 24/09/2009 11:03,
elle tente de trouver le nombre de cellules
contenant une seule sous-chaîne gar (en minuscules)
dans une sélection de cellules contenant des chaînes comme
gar vbg garlk
sdfgarxxx
...
Du moins c'est ce que j'ai compris qu'il fallait faire
en lisant le message d'André : 23/09/2009 16:11

Serge




"Caetera" <EtiennePloufCahé@wanadoo.fr> a écrit dans le message de news:
%
Et pour compter le nombre de cellules contenant
la chaîne gar une seule fois :



MsgBox [CountIf(plage,"gar")]

Etc



1 2