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
Ok, ça marche, sauf pour le formulaire je ne peux pas sélectionner la liste.
Je vais chercher.
J'ai copié les autres onglets ça semble ok sauf pour les nouveaux RDV, car les nouveaux clients ne se classent pas par ordre alphabétique et quand je crée la macro de tri les formules ne se copient pas.
 

fanou06

XLDnaute Occasionnel
Ok, merci.
Je vais reprendre tout cela car ta méthode est la bonne.
Je vais apprendre à utiliser ce type de tableau structuré c'est plus simple.
Maintenant je vais voir pour que la macro classe par ordre alphabétique les nouveaux clients dans "NbRDV2023" :)
 

vgendron

XLDnaute Barbatruc
Ok, merci.
Je vais reprendre tout cela car ta méthode est la bonne.
Je vais apprendre à utiliser ce type de tableau structuré c'est plus simple.
Maintenant je vais voir pour que la macro classe par ordre alphabétique les nouveaux clients dans "NbRDV2023" :)
il te suffit de copier le contenu de la macro "TriDate" et tu adaptes le nom de la feuille, de la table, et supprime une des deux lignes de tri..
 

fanou06

XLDnaute Occasionnel
D'accord.

Par contre je n'arrive pas à modifier la macro TriDate pour l'onglet NbRDV2023.

J'ai mis ceci :

VB:
Sub TriDate23()
'
' TriDate Macro
'

'
    Columns("A:X").Select
    ActiveWorkbook.Worksheets("NbRDV2023").ListObjects("t_NbRDV2023").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("NbRDV2023").ListObjects("t_NbRDV2023").Sort.SortFields.Add2 _
        Key:=Range("A2:A500"), SortOn:=xlSortOnValues, Order:=xlAscending, _
        DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("NbRDV2023").ListObjects("t_NbRDV2023").Sort.SortFields.Add2 _
        Key:=Range("O2:O500"), SortOn:=xlSortOnValues, Order:=xlAscending, _
        DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("NbRDV2023").ListObjects("t_NbRDV2023").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

mais BUG.


:(
 

vgendron

XLDnaute Barbatruc
D'accord.

Par contre je n'arrive pas à modifier la macro TriDate pour l'onglet NbRDV2023.

J'ai mis ceci :



mais BUG.


:(
Ce serait quand meme bien que tu reprennes les macros que je t'ai faites.. et pas reprendre tes anciennes macro...
dans cette PJ, j'ai commenté les macros.. à toi d'aller voir, lire et comprendre
 

Pièces jointes

  • TABLEAU_SUIVI_REGLEMENT_RDV PATIENT_2023 V10 ESSAI ANONYME.xlsm
    272.4 KB · Affichages: 3

fanou06

XLDnaute Occasionnel
Oui, merci, je reprends les tiennes mais je n'arrive pas à dupliquer TriDate sur l'autre tableau.
Ca me décale toutes les formules quand j'exécute la macro.
Par exemple, je crée un client HHHHH, eh bien alors qu'il n'a aucun RDV, il est noté il en a déja plusieurs.
Tout le reste c'est parfait.
Je vais chercher.


:)
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
315 095
Messages
2 116 169
Membres
112 676
dernier inscrit
little_b