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

Gégé-45550

XLDnaute Accro
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 :


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.
Bonjour,
Un petit fichier anonymisé représentatif de la question à traiter serait beaucoup plus parlant qu'une longue explication avec du code inutile puisqu'on n'a pas le fichier correspondant.
Les questions :
  • que sont les nouveaux RdV du client ? des dates, des noms, autre chose ?
  • qu'entendez-vous par incrémenter les nouveaux noms ?
De base, pour incrémenter une liste, il existe une solution simple : la préfixer par le numéro de ligne mais, sans savoir ce que vous voulez vraiment faire, impossible de dire si c'est la bonne solution pour vous.
Cordialement,
 

fanou06

XLDnaute Occasionnel
Merci beaucoup.
Tout est anonymisé.

Ma demande en fait car pour le moment c'est une macro fastidieuse que j'ai essayé.
Je cherche :

1. J'ajoute un client dans l'onglet "BDD CLIENTS".
2. La macro devrait donc lorsque je l'exécute copier les nouveaux clients dans "NbRDV" et laisser les formules pour les statistiques.

Merci pour la piste.
 

Pièces jointes

  • TABLEAU_SUIVI_REGLEMENT_RDV PATIENT_2023 V_ESSAI.xlsm
    121 KB · Affichages: 9

vgendron

XLDnaute Barbatruc
En utilisant correctement les tables structurées (PAS de ligne vide)
la macro se contente de rajouter une ligne par client non listé dans la table t_2023
j'ai affecté la macro "NouveauClient" au deuxième bouton de ta feuille

PS: ta feuille BDD: j'ai modifié la disposition des données==> à mettre sous forme de table structurée également avec des noms explicites genre: "t_mois" ou "t_Statut".....
 

Pièces jointes

  • TABLEAU_SUIVI_REGLEMENT_RDV PATIENT_2023 V_ESSAI.xlsm
    74 KB · Affichages: 4

vgendron

XLDnaute Barbatruc
en PJ, je me suis permis quelques optimisations de ton code
ex: les MFC: on ne les applique QUE sur les plages de données et pas sur la feuille entière
lors l'ajout de données dans la table, les MFC, formules etc sont recopiées

les macro travaillent directement avec les tables structurées (que j'ai renommées pour faciliter leur identification)

dans ton tableau NbRDV2023, j'ai modifié les formules pour exploiter les noms de colonnes et limiter aux lignes qui contiennent effectivement des données

la feuille "dépense détail" n'étant pas dans le fichier, je n'ai pas touché aux macros qui la concernent...
 

Pièces jointes

  • TABLEAU_SUIVI_REGLEMENT_RDV PATIENT_2023 V_ESSAI.xlsm
    76.9 KB · Affichages: 6

fanou06

XLDnaute Occasionnel
en PJ, je me suis permis quelques optimisations de ton code
ex: les MFC: on ne les applique QUE sur les plages de données et pas sur la feuille entière
lors l'ajout de données dans la table, les MFC, formules etc sont recopiées

les macro travaillent directement avec les tables structurées (que j'ai renommées pour faciliter leur identification)

dans ton tableau NbRDV2023, j'ai modifié les formules pour exploiter les noms de colonnes et limiter aux lignes qui contiennent effectivement des données

la feuille "dépense détail" n'étant pas dans le fichier, je n'ai pas touché aux macros qui la concernent...
Ah oui, c'est bien.
Faut que je fasse ainsi sur mon tableau final.
Mais j'ai des bugs en recopaint
 

vgendron

XLDnaute Barbatruc
un peu de lecture ici, ca peut sans doute t'aider


 

fanou06

XLDnaute Occasionnel
Après essais, ca ne fonctionne pas.
Dans l'onglets NbRDV la première ligne (entetes) se classe comme les noms des clients :(

Dois-je changer quelque chose dans le code ?

VB:
Sub CopieAuto()
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim rngTableau1 As Range, rngTableau2 As Range
    Dim lastRow As Long
   
    ' Spécifiez le nom des feuilles de calcul (ajustez-les selon vos noms de feuilles)
    Set ws1 = ThisWorkbook.Sheets("BDD CLIENTS")
    Set ws2 = ThisWorkbook.Sheets("NbRDV")
   
    ' Détermine la dernière ligne du "Tableau 1"
    lastRow = ws1.Cells(Rows.Count, "A").End(xlUp).Row
   
    ' Définit la plage de données dans "Tableau 1" (supposons que les données sont dans la colonne A)
    Set rngTableau1 = ws1.Range("A2:A" & lastRow)
   
    ' Définit la plage de destination dans "Tableau 2" (supposons que les données seront collées dans la colonne A)
    Set rngTableau2 = ws2.Range("A2")
   
    ' Copie les données du "Tableau 1" vers le "Tableau 2"
    rngTableau2.Resize(rngTableau1.Rows.Count, 1).Value = rngTableau1.Value
End Sub

Si je reprends la macro proposée ci-dessus par @vgendron j'ai cette erreur :

Pourtant je renomme les données en t_Clients . . .

Merci
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
313 283
Messages
2 096 813
Membres
106 752
dernier inscrit
Tahiri1976