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...

vgendron

XLDnaute Barbatruc
1) pour CREER la table structurée
tu cliques DANS le tableau de données
CTRL+L
cocher "contient des entetes"

2) pour NOMER la table
tu cliques dedans
et en haut à gauche tu changes le nom
Sans titre 1.png
 

fanou06

XLDnaute Occasionnel
Oui, je change le nom mais ca ne le sauvegarde pas.
J'ai donc changé le nom, mais la macro maintenant indexe les nouveaux clients dans t_2023 mais j'ai perdu les formules, ça me dit mettre à jour ou pas et les formules semblent être en local :

Code:
=SOMME((TEXTE('C:\Users\borde\Desktop\Dossier Suisse\[TABLEAU_SUIVI_REGLEMENT_RDV PATIENT_2023 V6.xlsm]RDV'!$B$2:$B$2998;"mmmm")='C:\Users\borde\Desktop\Dossier Suisse\[TABLEAU_SUIVI_REGLEMENT_RDV PATIENT_2023 V6.xlsm]NbRDV2023'!B$1)*('C:\Users\borde\Desktop\Dossier Suisse\[TABLEAU_SUIVI_REGLEMENT_RDV PATIENT_2023 V6.xlsm]RDV'!$A$2:$A$2998='C:\Users\borde\Desktop\Dossier Suisse\[TABLEAU_SUIVI_REGLEMENT_RDV PATIENT_2023 V6.xlsm]NbRDV2023'!$A2))

Je pense que j'ai trop essayé de bidouiller.
On peut effacer des noms de tables ? Et Effacer des noms de tableaux ?

CTRL L ne donne rien

merci.
 

vgendron

XLDnaute Barbatruc
en retour ton fichier

1) les tables sont renommées correctement
2) les listes de validation sont ecrites correctement en faisant référénce directement aux tables "t_etat, t_Tarifs, t_typeExam......"

3) j'ai supprimé des macros qui faisaient doublon
4) j'ai réorganisé les macros dans différents modules
5) toutes les macros travaillent AVEC les tables structurées
6) comme il manque une feuille, les macros concernées n'ont pas été testées
7) j'ai simplifié ta macro pour enregistrer un RDV
8) et j'ai remis les formules dans la table t_2023
tes formules initiales font références à des colonnes entières de la feuille.. ca ne sert à rien
 

Pièces jointes

  • TABLEAU_SUIVI_REGLEMENT_RDV PATIENT_2023 V10 ESSAI ANONYME.xlsm
    270.9 KB · Affichages: 4

fanou06

XLDnaute Occasionnel
Merci, par contre je fais comment pour copier les macros de ce tableau anonymisé au définitif ?
Je fais que copier/coller ?
Car je dois renommer mes tables sur le définitif ?

Avec la macro de saisie (formulaire) erreur quand je la place dans mon nouveau tableau :

With Sheets("RDV").ListObjects("t_RDV")

J'ai pourtant renommé la plage en t_RDV :(


Merci beaucoup.
 

vgendron

XLDnaute Barbatruc
ou alors, tu fais le contraire..
tu copies tes données "finales" VERS les tables du fichier anonymisé

4 feuilles avec 4 tables.. ca ne fait que 4 copier coller.. ca me semble le plus simple
je pense meme qu'copier collage spécial/valeur est le mieux.. ca évitera de casser les listes de validation

et tu copies la feuille manquante vers le fichier anonymisé
 

fanou06

XLDnaute Occasionnel
Je viens d'essayer, les macros renvoient la même erreur.
Comment effacer un nom déja donné sur un tableau ? t_RDV est déja utilisé par exemple.
Et idem pour t_Clients.

En fait l'onglet garde son nom.
Ensuite je clique sur A1 pour nommer la table ? Ou non ?
Car en faisant ainsi je ne peux la nommer.
Je n'arrive vraiment pas avec ces tableaux structurés. Je ne sais pas comment les renommer sur mon fichier final car des noms sont déja donnés.

Et doit on sélectionner des cellules pour nommer les tables ? Ou toute une colonne ?

Merci
 
Dernière édition:

vgendron

XLDnaute Barbatruc
pourquoi vouloir effacer les noms de tables ! il ne faut pas puisque ces noms sont utilisés dans les tables

quand tu fais tes copier coller, il ne faut copier QUE les données. pas le tableau complet

Ex pour la table "t_client" de la feuille BDD clients

dans ton fichier de travail, les noms de clients vont de A2 à A402
tu selectionnes A2:A402 (soit 400 clients)
tu fais Ctrl C

tu vas DANS le fichier anonymisé
tu cliques juste sur A2 (1ere ligne de données de la table HORS entete)
tu fais Ctrl V
les 400 clients sont copiés, et la table s'est AUTOMATIQUMENT ajustée toute seule

dans la feuille RDV, table t_RDV
tu fais la meme chose

pour la feuille nbRDV2023, table t_2023, tu fais la meme chose en ne copiant QUE la colonne Client
 

Discussions similaires

Statistiques des forums

Discussions
312 364
Messages
2 087 626
Membres
103 625
dernier inscrit
Smer