Problème fonction nb.si en vba

matrix

XLDnaute Occasionnel
Bonjour à tous,

Dans mon fichier excel (VBA), j'ai une fonction nb.si en script.

Ex: La la feuille Statistique colone A, j'ai 100 nom de personnes différent.
Je veux faire un nb.si dans la colone B en rapport avec la feuille Base de donnée colone A ou se trouve les mêmes nom mais en triple et même plus.

En se moment, j'utilise le scripte:

Code:
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
 Sheets("Statistique").Select
ActiveSheet.Unprotect
    Sheets("Employés").Select
    ActiveWindow.SmallScroll Down:=-15
    Sheets("Employés").Range("A2:A100").Select
    Selection.Copy
    ActiveWindow.ScrollRow = 2
    Sheets("Employés").Range("A1").Select
    Sheets("Statistique").Select
    Range("A3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    Range("B3").Select
    ActiveCell.FormulaR1C1 = "=COUNTIF('Base de donnée'!C1,RC[-1])"
    Selection.AutoFill Destination:=Range("B3:B487")
    Range("B3:B487").Select

    ActiveWindow.ScrollRow = 478
    Selection.AutoFill Destination:=Range("B3:B927"), Type:=xlFillDefault
    Range("B3:B927").Select
    Range("B3:B927").Select
    Range("B927").Activate
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Range("A2:B1008").Select
    Selection.Sort Key1:=Range("B3"), Order1:=xlDescending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    Columns("B:B").Select
    Selection.FormatConditions.Delete
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
        Formula1:="0"
    Selection.FormatConditions(1).Font.ColorIndex = 2
    ActiveWindow.SmallScroll Down:=-15
    Range("C1") = Date
    Range("D1") = Time
    
    ActiveWindow.ScrollRow = 3
    Range("A2").Select
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    Application.ScreenUpdating = True
    MsgBox "MISES À JOUR TERMINÉES"
End Sub

Mon problème est que je mis prend de la mauvaise façon en écrivant une formule et ensuite, je copie en valeur.

Donc si j'ajoute des nom dans la feuille Statistique, je dois modifier le scripte à chaque fois.

Comment faire pour mettre la bonne valeur du premier coup sans aller par le procédé de la formule et ensuite copier coller en valeur.

Merci de votre aide :)



ps: je crois qu'il y a un problème pour uploader un fichier excel car il me donne un message d'erreur.
 
Dernière édition:

Gorfael

XLDnaute Barbatruc
Re : Problème fonction nb.si en vba

Salut matrix et le forum
Code:
Mon problème est que [B]je mis prend de la mauvaise façon [/B]en écrivant une formule et ensuite, je copie en valeur.
Donc si j'ajoute des nom dans la feuille Statistique, je dois modifier le scripte à chaque fois.
[B]Comment faire pour mettre la bonne valeur du premier coup[/B] sans aller par le procédé de la formule et ensuite copier coller en valeur.
euh... en entrant directement la bonne valeur :eek:

"Je m'y prend comme un pied, mais voilà comment je fais" : c'est bien de savoir que ce que tu fais n'est pas bon... mais en quoi ça nous avance ?

Explique ce que tu as comme donnée (feuilles, adresse etc.)
explique ce que tu veux obtenir en utilisant du code

En gros, la position de départ et celle d'arrivée, et on pourra t'aider à faire un code qui fonctionne sans erreur.

A+
 

matrix

XLDnaute Occasionnel
Re : Problème fonction nb.si en vba

Ok,

Dans la feuille "Statistique", dans la colonne A de la cellule A2 à A100 se trouvent 100 noms de personnes différents.

Je veux que dans la colonne B, à côté de chaque nom, il me donne le nombre de fois que chaque nom apparait dans la feuille "Base de donnée" dans la colonne A.

Je précise que dans la feuille "base de donnée", dans la colonne A, le même nom peut apparaitre plusieurs fois.

Donc si dans la cellule A2 de la feuille "statistique" il y à le nom Steve Tremblay, et que dans la colonne A de la feuille "base de donnée" le nom Steve Tremblay se retrouve à 4 endroits, et bien dans la cellule B2 de la feuille "statistique", il sera marquer 4.

Et voilà! :)
 

Gorfael

XLDnaute Barbatruc
Re : Problème fonction nb.si en vba

Salut matrix

Dans la feuille "Statistique", dans la colonne A de la cellule A2 à A100 se trouvent 100 noms de personnes différents.
tu fais rentrer 100 noms dans 99 lignes ? avec un chausse-pied ? :p

Ce que je comprends :
Feuille ""Base de donnée"" : colonne A Une liste de noms liés à des enregistrement.
Feuille "Statistique" :
Colonne A : Un certain nombre de noms
Traitement : En colonne B, en face de chaque nom, inscrire le nombre de de fois où il apparaît dans la feuille précédente.
Plusieurs solutions : (on est sur Excel :D)

1 - Utiliser les macros, soit pour inscrire le nombre compté en dur, soit pour inscrire une formule
2 - Utiliser les formules : plus simple (désolé, mais ton code brut issu d'une macro apprentissage me laisse supposer que tu ne maîtrises pas bien VBA)

Principes :
1 - une double boucle une qui parcourt la liste de noms et qui lance une autre boucle qui compte le nenombre de fois où le nom apparaît dans l'autre feuille et l'inscrit.
Avantage : tout se fait automatiquement.
inconvénients :
- la feuille n'est mise à jour que par lancement de la macro : par activation de la feuille stats, changement dans la colonne A de BdD, changement de la colonne A de stat, manuellement...
- il faut pouvoir maintenir le code : les macros passent parfois mal le cap du changement de version ascendant., ou simplement une modif.

2 - par formule : on utilise un simple SOMMEPROD (j'aime pas Nb.Si :eek:)
Avantages :
- Stat à jour ne permanence.
- Une fois compris le principe, il est applicable directement sur d'autres problèmes.
- pas de problème de versions (au moins ascendente, si tu as un excel 4...)
Inconvénients :
- on va passer par une liste nommée. comme on ne veut pas perdre de temps, ce sera une liste dynamique, et donc, elle dépend de l'organisation de ta feuille BdD : Les cases vides sont interdites en colonne A (j'en ai déjà assez comme ça :eek:)
- obligation de crer une liste nommée.
- à chaque nouveau nom en feuille stat, il faudra copier la cellule de la colonne B de la ligne au-dessus.

- si on utilise une macro pour créer une formule, les avantages et inconvénients de chaque méthode s'additionnent (ou s'annulent)..

Par formule (c'est comme ça que je ferais):
Création de la liste nommée : on suppose que les noms commencent en ligne 2 et qu'il n'y a pas d'espace entre 2 noms

Menu insertion>>nom>>définir
Noms dans le classeur : Liste_Noms
Fait référence à :
=DECALER('Base de donnée'!$A$1;1;0;NBVAL('Base de donnée'!$A:$A)-1;1)
Dans l'exemple la cellule jaune m'a servi à verifier que cette formule fonctionnait correctement avant de l'utiliser
La formule de comptage est sur l'autre feuille

CXomme je ne suis pas sur que c'est l'option que tu prendras, j'arrête ici, mais pose tes questions si tu en as.
A+
 

Pièces jointes

  • Exemple liste nommée.xls
    14.5 KB · Affichages: 48

Discussions similaires

Réponses
3
Affichages
569

Statistiques des forums

Discussions
312 149
Messages
2 085 773
Membres
102 972
dernier inscrit
Alain PICHON