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
dans ton gestionnaire de noms je vois encore des plages qui n'ont aucun sens!
BDD = BBB!1:1048576 ==> tu définis une plage nommée "BDD" qui correspond à TOUTE la feuille BDD
ca ne sert à RIEN !

idem pour t_dépenses, t_formulaire, t_déptet, ....

1) un nom qui commence par le préfixe "t_" c'est juste une convention pour signifier qu'on a à faire à une table structurée

2) définir une plage nommée a pour intérêt de LIMITER une plage de données
ex: dans ta maison, il y a plusieurs pièces
à Pâques, si je te dis avoir caché UN oeuf dans la maison.(= le classeur entier). tu vas devoir chercher partout dans la maison. ca va te prendre des plombes
si je te dis l'avoir caché dans la salle à manger (= la plage nommée) ==> ca va etre plus simple, et plus rapide
Ok, je vais changer les plages. De toute façon quand on ajoute un élément les plages s'ajoutent au fur et à mesure ?
 

vgendron

XLDnaute Barbatruc
non les plages ne s'ajoutent pas.. c'est la table qui s'adapte automatiquement:
si tu ajoutes une ligne, la table s'agrandi toute seule pour intégrer la nouvelle ligne..c'est tout l'intérêt..
va lire le premier site que je t'ai envoyé en lecture dans les premiers posts;
 

fanou06

XLDnaute Occasionnel
Ok, merci. je vais relire.

Par contre, est-ce normal que ces tableaux je ne peux pas les supprimer ou renommer ?

Tables0.png
 

vgendron

XLDnaute Barbatruc
oui, comme il s'agit de table structurée = "objet" sur les feuilles, tu ne peux pas les supprimer directement à partir du gestionnaire de nom

pour cela, il faut aller SUR la table, et les retransformer en plage de données
quand tu cliques dans la table, dans le menu "Conception de table", il y a l'option "convertir en plage"
 

fanou06

XLDnaute Occasionnel
Merci c'est bon.
A l'avenir je ferais toujours ainsi les tableau et les tables et les validations de données . . .
Je commence à peine sur les macros.

Là faut que je trouve donc pour que les formules s'incrémentent automatiquement quand le nom de la BDD Clients est ajouté :)
 

fanou06

XLDnaute Occasionnel
La tienne :
Code:
SOMMEPROD((t_2023[@[Nom du client]:[Nom du client]]=t_RDV[[NOM]:[NOM]])*(MOIS(t_RDV[[DATE]:[DATE]])=COLONNE()-1))

Comme j'ai changé les titres :
Code:
SOMMEPROD((t_2023[@[Nom du client]:[Nom du client]]=t_RDV[[Nom du client]:[Nom du client]])*(MOIS(t_RDV[[Date]:[Date]])=COLONNE()-1))

Mais elle ne passe pas.
Pour ça je pense que j'ai du faire une erreur en copiant les tableaux :(
 

Discussions similaires

Statistiques des forums

Discussions
315 093
Messages
2 116 127
Membres
112 667
dernier inscrit
foyoman