XL 2021 Créer Macro permettant d'indexer des nouveaux clients ? [Résolu]

fanou06

XLDnaute Occasionnel
Bonjour,

Dans l'onglet NbRDV je calcule le nombre de RDV du client selon les mois.
J'ai mis la formule suivante :

Code:
=SOMME((TEXTE(RDV!$B$2:$B$3000;"mmmm")=NbRDV!B$1)*(RDV!$A$2:$A$3000=NbRDV!$A2))

Elle semble fonctionner.

Par contre :
Est-il possible par une macro de mettre à jour le tableau de l'onglet NbRDV au sur et à mesure de la saisie de nouveau RDV dans l'onglet RDV ?
Et de ce fait, d'incrémenter les nouveaux noms ?

Je pensais faire ainsi :

1. BDD Clients : Une fois la mise à jour faite, copier A2:A500
2. NbRDV : Copier en A2 les cellules copiées de l'onglet BDD Clients
3. Trier A:A
4. Glisser les formules.

Macro :

VB:
Sub NbRDV()
'
' NbRDV Macro
'

'
    Range("A2:A614").Select
    Selection.Copy
    Sheets("NbRDV").Select
    Range("A2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    ActiveWorkbook.Worksheets("NbRDV").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("NbRDV").Sort.SortFields.Add2 Key:=Range("A2:A614") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("NbRDV").Sort
        .SetRange Range("A2:A614")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    ActiveWindow.SmallScroll Down:=66
    Range("B80:M80").Select
    Selection.AutoFill Destination:=Range("B80:M153"), Type:=xlFillDefault
    Range("B80:M153").Select
    ActiveWindow.ScrollRow = 124
    ActiveWindow.ScrollRow = 120
    ActiveWindow.ScrollRow = 116
    ActiveWindow.ScrollRow = 113
    ActiveWindow.ScrollRow = 111
    ActiveWindow.ScrollRow = 108
    ActiveWindow.ScrollRow = 105
    ActiveWindow.ScrollRow = 103
    ActiveWindow.ScrollRow = 100
    ActiveWindow.ScrollRow = 97
    ActiveWindow.ScrollRow = 93
    ActiveWindow.ScrollRow = 89
    ActiveWindow.ScrollRow = 86
    ActiveWindow.ScrollRow = 82
    ActiveWindow.ScrollRow = 78
    ActiveWindow.ScrollRow = 75
    ActiveWindow.ScrollRow = 72
    ActiveWindow.ScrollRow = 70
    ActiveWindow.ScrollRow = 68
    ActiveWindow.ScrollRow = 65
    ActiveWindow.ScrollRow = 62
    ActiveWindow.ScrollRow = 60
    ActiveWindow.ScrollRow = 57
    ActiveWindow.ScrollRow = 55
    ActiveWindow.ScrollRow = 53
    ActiveWindow.ScrollRow = 51
    ActiveWindow.ScrollRow = 49
    ActiveWindow.ScrollRow = 48
    ActiveWindow.ScrollRow = 45
    ActiveWindow.ScrollRow = 43
    ActiveWindow.ScrollRow = 40
    ActiveWindow.ScrollRow = 37
    ActiveWindow.ScrollRow = 35
    ActiveWindow.ScrollRow = 34
    ActiveWindow.ScrollRow = 32
    ActiveWindow.ScrollRow = 29
    ActiveWindow.ScrollRow = 28
    ActiveWindow.ScrollRow = 26
    ActiveWindow.ScrollRow = 25
    ActiveWindow.ScrollRow = 24
    ActiveWindow.ScrollRow = 22
    ActiveWindow.ScrollRow = 21
    ActiveWindow.ScrollRow = 19
    ActiveWindow.ScrollRow = 18
    ActiveWindow.ScrollRow = 16
    ActiveWindow.ScrollRow = 15
    ActiveWindow.ScrollRow = 13
    ActiveWindow.ScrollRow = 11
    ActiveWindow.ScrollRow = 9
    ActiveWindow.ScrollRow = 8
    ActiveWindow.ScrollRow = 5
    ActiveWindow.ScrollRow = 3
    ActiveWindow.ScrollRow = 1
    Range("A2").Select
End Sub
Mais est-ce qu'il n'y a pas plus simple ? Et en gardant les formules ?
Car la Macro est fastidieuse.
Peut être copier la dernière ligne et copier la formule ?
Mais je pense il doit y avoir plus simple (plus propre surtout) ?


Merci.
 
Solution
Hello,
bon. y a un moment, faut arrêter de faire tout et n'importe quoi !
dans la dernière PJ que tu as mise, ce n'EST PAS celle que je t'ai donnée !!
tu n'a pas gardé les tables de la feuille BDD, la table des catégories s'appelle encore "tableau15, alors que je l'avais renommée "t_Catégories"
idem pour les mois et box

Dans la feuille "Formulaire"
tu persistes à définir les listes de validation avec du "='BDD CLIENTS'!$A:$A"
ce qui prend TOUTE la colonne.. donc avec 1 000 000 de lignes vides ==> AUCUN intérêt
moi je t'avais mis des listes de validation à base de =indirect("t_Nom") ou indirect("t_Tarifs").....

Dans la feuille "NbRDV2023"
tu persisites à mettre tes formules à base de Somme(texte.....), alors qu'il y avait des formules...

fanou06

XLDnaute Occasionnel
SOMMEPRO ne fonctionne pas.
Je remet ma formule et ça marche.
Mais impossible (car en fait c'est là le soucis) de recopier la formule quand on insère un nouveau client. Obligé de la glisser manuellement.

Ne peut on pas faire une macro pour permettre lorsqu'il y a une nouvelle entrée de lui affecter aussi la formule ?


merci.
 

vgendron

XLDnaute Barbatruc
bon. on va essayer d'expliquer la formule
=SOMMEPROD((t_2023[@[Nom du client]:[Nom du client]]=t_RDV[[NOM]:[NOM]])*(MOIS(t_RDV[[DATE]:[DATE]])=COLONNE()-1))

t_2023[@[Nom du client]:[Nom du client]] = t_RDV[[Nom]:[Nom]]

la formule est DANS la table t_2023
t_2023[@[Nom du client]:[Nom du client]] ==> c'est le nom contenu à la ligne dans la colonne "Nom du client" de la table t_2023
t_RDV[[NOM]:[NOM]] ==> colonne NOM de la table t_rdv ==> il faut donc que les deux soient correctement écrits
si la table ne s'appelle plus t_RDV mais TableToto, il faut remplacer t_RDV par TableToto

le message d'erreur que tu viens de poster indique une erreur de syntaxe dans la formule

il te manque un crochet fermant "]"
 

vgendron

XLDnaute Barbatruc
pourquoi doit on "doubler" le nom de la colonne ? pour figer la colonne lorsqu'on tire la formule vers la droite

=t_2023[Nom] ==> si tu tires vers la droite, la formule d'a coté devient t_2023[Date]
il faut donc figer la colonne Nom pour que ce soit toujours celle ci en référence "absolue"

on doit donc écrire
=t_2023[[Nom]:[Nom]] ==> on a deux foix le nom de la colonne entre crochet, séparé par un : et le tout entre crochet
 

fanou06

XLDnaute Occasionnel
pourquoi doit on "doubler" le nom de la colonne ? pour figer la colonne lorsqu'on tire la formule vers la droite

=t_2023[Nom] ==> si tu tires vers la droite, la formule d'a coté devient t_2023[Date]
il faut donc figer la colonne Nom pour que ce soit toujours celle ci en référence "absolue"

on doit donc écrire
=t_2023[[Nom]:[Nom]] ==> on a deux foix le nom de la colonne entre crochet, séparé par un : et le tout entre crochet
Ah merci.
Je comprends. Mais je ne trouve pas le soucis de crochet, je vais refaire :)
Crochets et parenthèses O/F en nombre pourtant.
 

vgendron

XLDnaute Barbatruc
Je reviens dans CE post

dans le fichier, j'ai ajouté les nouvelles feuilles que tu as mises dans l'autre post

donc. DANS ce fichier
TOUTES les macros sont
1) commentées (expliquées)
2) testées et validées==> elles fonctionnent toutes comme il faut
3) les listes de validation sont bonnes
4) plus de plages nommées inutiles

5) Feuille Dépenses
5-1) les formules sont bonnes et renvoient les bonnes valeurs
5-2) j'ai ajouté la ligne "TOTAL" de la table (conception de la table, option "ligne total"
le graphique fait référence à cette ligne

6) comme tu avais une feuille Recette sur le meme modèle que "Dépenses", je suppose que tu as aussi une feuille "Recettes Détail" sur le meme modèle que "Dépenses Détail"

==> j'ai donc fait une copie de la feuille Dépenses Détail,
je l'ai appelée Recettes Détail, j'ai nommé la table t_RecDep
et j'ai mis les formules à jours dans Recettes

il te reste donc à mettre les bonnes données dans la feuille "recettes Détail"
 

Pièces jointes

  • TABLEAU_SUIVI_REGLEMENT_RDV PATIENT_2023 V20.xlsm
    318.2 KB · Affichages: 5

Discussions similaires

Statistiques des forums

Discussions
312 207
Messages
2 086 234
Membres
103 162
dernier inscrit
fcfg