XL pour MAC Recopier une saisie de texte de manière automatique

Brissou33

XLDnaute Nouveau
Bonjour,

Je vous sollicite concernant un tableau de suivi de financement que je mets en place pour mes collaborateurs et pour moi-même.

L'idée est de pouvoir m'assurer que les clients soient relancés en temps et en heure tout en recevant des alertes par mail automatique par la suite lorsque la tâche arrive à échéance.

Mais dans un premier temps, j'aimerai savoir comment automatiser la saisie du texte de "Vendeur 1" et "Vendeur 2" sur le "Tableau de bord" pour les colonnes "Réservataire";"Vente en VEFA / Achevée";"Date de signature contrat de réservation";"Prêt" et "Nom de la banque".

Comme vous pouvez le voir, les formules de calcules sur "Tableau de Bord" sont déjà faites, ce qui me permettra d'avoir un prévisionnel sur les échéances du financement client.

Ci-joint le fichier excel.
 

Pièces jointes

  • Suivi de financement.xlsx
    57.9 KB · Affichages: 8
Solution
Si j'ai bien compris, alors il y a beaucoup plus simple, j'efface tout Tableau de bord excepté vos formules, et pour chaque vendeur on recopie les partie gauche (A:F) et droite (M:N) sans toucher à vos formules. Comme cela elles restent opérationnelles.
Voir PJ avec :
VB:
Sub Worksheet_Activate()
    On Error GoTo Fin
    Application.ScreenUpdating = False
    Application.EnableEvents = False                        ' On bloque tout nouvel événement
    Dim DLTDB%, F, DL%, Tablo1, Tablo2
    DLTDB = Range("A65500").End(xlUp).Row                   ' Dernière ligne de TDB
    If DLTDB < 18 Then DLTDB = 18
    Range("A18:F" & DLTDB).ClearContents
    Range("M18:N" & DLTDB).ClearContents
    For Each F In Worksheets...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Brissou,
1- C'est une mise à jour du Tableau de bord en fonction des vendeurs, acceptez vous des macros VBA ?
Petit problème : Pour faire une mise à jour de base de données, il faut que chaque élément soit identifiable comme unique, par exemple un ID où une référence unique ....
2- Dans votre fichier on pourrait avoir pour un même vendeur deux lignes ayant les 5 cellules à copier identiques, même "Réservataire";"Vente en VEFA / Achevée";"Date de signature contrat de réservation";"Prêt" et "Nom de la banque". D'où l'impossibilité de mettre à jour car on prendrais le risque de mettre à jour une mauvaise ligne qui aurait déjà complétée dans les autres colonnes.

NB: ce dernier point serait caduque si on est absolument sur qu'un même vendeur ne peut pas avoir deux signature de contrat le même jour. En sauvegardant aussi le nom du vendeur en colonne N, on pourrait discriminer.
 

Brissou33

XLDnaute Nouveau
Bonjour,

1. Oui j'accepte de faire des macros VBA.

2. Effectivement, c'est quelque chose qui pourrait arriver mais qui risquerait tout de même exceptionnelle. On pourrait réserver deux appartements à un même réservataire. La solution serait peut-être d'ajouter une colonne "Numéro de lot" ainsi qu'une autre colonne "Nom du projet" peut-être?

Le but est que je puisse avoir les premières informations sur mon Tableau de bord qui ferait le prévisionnel automatiquement des dates d'échéances des différentes étapes du financement.

Le vendeur devra remplir chacune des cellules en fonction de l'avancement du financement et si la cellule est vide alors qu'on arrive à 3-4 jours de l'échéance, qu'un mail automatique soit envoyé pour rappeler au vendeur de relancer son client.

En quoi la colonne "N" serait discriminante? Chaque vendeur ne pourra avoir accès qu'à sa feuille excel du classeur, ils n'auront pas accès aux autres feuilles des vendeurs, ni au tableau de bord.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
En PJ un essai avec une Worksheet_Activate qui s'exécute automatiquement lorsqu'on sélectionne la feuille Tableau de bord.
Un item est déclaré comme nouveau si le Réservataire ET la Date ET le Vendeur ne sont pas présent simultanément sur une ligne du le tableau. ( on considère que c'est suffisant pour discriminé, sinon il faut rajouté un item de discrimination )
VB:
Public Tablo ' tableau qui récupère la page d'un vendeur, en array pour accélerer, en public pour être partagé entre les deux macros
Sub Worksheet_Activate()
    On Error GoTo Fin
    Application.ScreenUpdating = False
    Application.EnableEvents = False                        ' On bloque tout nouvel événement
    Dim DLTDB%, F, DL%
    DLTDB = Range("A65500").End(xlUp).Row                   ' mémorisation dernière ligne de TDB, utile lors du message final
    For Each F In Worksheets                                ' Pour toutes les feuilles
        If F.Name <> "Tableau de bord" Then                 ' Hormis Tableau de bord
            With Sheets(F.Name)
                DL = .Range("A65500").End(xlUp).Row         ' Dernière ligne occupée de la feuille
                Tablo = .Range("A9:N" & DL)                 ' Tranfert données dans Tablo
            End With
            Mise_à_jour                                     ' Mise à jour du Tableau de bord
        End If
    Next F
    If DLTDB = Range("A65500").End(xlUp).Row Then           ' Y a t il des nouveautés ?
        MsgBox " Pas de nouveautés !"
    Else
        MsgBox (Range("A65500").End(xlUp).Row - DLTDB) & " items ajoutés."
    End If
Fin:
    Application.EnableEvents = True
End Sub
Sub Mise_à_jour()
    Dim Ligne%, Trouvée%
    Ligne = 18                                              ' Ligne de départ
    Trouvée = 0                                             ' Trouvée=1 si l'item a été trouvé dans TDB donc ignoré
    For i = 1 To UBound(Tablo)                              ' Pour tous les éléments
        While Cells(Ligne, "A") <> ""                       ' Pour toute ligne non vide
            If Cells(Ligne, "C") = Tablo(i, 3) Then         ' Si même date
                If Cells(Ligne, "N") = Tablo(i, 14) And Cells(Ligne, "A") = Tablo(i, 1) Then ' Et même vendeur et réservataire
                    Trouvée = 1
                End If
            End If
            Ligne = Ligne + 1
        Wend
        If Trouvée = 0 Then                                 ' L'item n'a pas été trouvé donc on le copie
            Cells(Ligne, "A") = Tablo(i, 1)                 ' Reservataire
            Cells(Ligne, "B") = Tablo(i, 2)                 ' Vente en Vefa
            Cells(Ligne, "C") = Tablo(i, 3)                 ' Date
            Cells(Ligne, "E") = Tablo(i, 5)                 ' Prêt
            Cells(Ligne, "F") = Tablo(i, 6)                 ' Banque
            Cells(Ligne, "N") = Tablo(i, 14)                ' Vendeur
        Else
            Trouvée = 0                                     ' Remettre le flag Trouvée à 0 s'il valait 1, pour la procheine recherche.
        End If
        Ligne = 18                                          ' Ré init de la première ligne
    Next i
End Sub
 

Pièces jointes

  • Suivi de financement (1).xlsm
    77.4 KB · Affichages: 2

Brissou33

XLDnaute Nouveau
Re,

Merci beaucoup pour votre partage.

J'ai tenté de faire une macro sur mon fichier excel, en vain...

Je tente de comprendre la logique du code d'autant plus que vous avez bien expliqué chaque étape mais j'avoue que ça me dépasse un peu.

- Une ligne s'ajoute à chaque fois que je la supprime et qui n'est pas existante sur "Vendeur1 et 2"
- Lorsque je mets à jour une ligne déjà reportée sur le Tableau de bord, la mise à jour n'apparait pas ou le changement de cellule ne se fait pas. Exemple : Si vendeur 1 déclare sa vente et stipule le nom de la banque BNP et qu'il change le nom de la banque après que la macro ait été activée, la mise à jour ne se fait pas.
- Si je change le nom du réservataire après que la macro ait été exécutée, une ligne s'ajoutera sur le tableau de bord plutôt que de mettre à jour.

Avez-vous une idée pour implanter cela dans la macro? Je suis prêt à le faire moi-même si vous avez des indices ou instructions à me donner :)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Alors j'ai bien peur que ce ne soit pas réalisable.
Si par exemple vous changez un réservataire, comment diable peut t-on savoir que c'est sur celle ligne qu'il y a eu un changement, et que c'est pas une nouvelle ligne ? puisuq'il n'y a rien qui identifie cette ligne par rapport à une ligne déjà enregistrée.
D'où la discussion du début, il faut absolument un ID qui identifie une opération de façon unique. De cette façon on peut regarder les modifications de chaque ID.
C'est le B-A-BA de toute base de données.
 

Brissou33

XLDnaute Nouveau
Je comprends effectivement le problème.

Si j'ajoutais une colonne "Numéro" avant celle du réservataire qui serait le numéro d'identification de la ligne (1,2,3,4,etc...) est-ce que cela pourrait être envisageable?

On partirait du principe que la ligne serait identifier quelque soit la modification apportée par le vendeur par son numéro d'identification.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Evidemment cela revient à faire un ID.
Même si on insère une ligne dans un bloc déjà construit, l' ID permet de le repérer.
Donnez nous alors un fichier reformater, j'adapterais.
Mais vous désirez aussi une mise à jour des modifications sur les lignes existantes ?
 

Brissou33

XLDnaute Nouveau
Ci-joint la fichier reformaté.

Effectivement si toutefois il y avait des modifications apportées sur les colonnes Réservataires, VENTE EN VEFA / ACHEVÉE, DATE SIGNATURE DU CONTRAT DE RÉSERVATION, PRÊT, NOM DE LA BANQUE, j'aimerai que ça mette à jour la ligne déjà créée par la macro dans le Tableau de bord.

Merci beaucoup pour votre aide
 

Pièces jointes

  • Suivi de financement - Excel.xlsm
    79.2 KB · Affichages: 2

Brissou33

XLDnaute Nouveau
Apportez vous des modifications manuelles dans la feuille Tableau de bord ?
Si rien n'est ajouté manuellement alors il y a beaucoup plus simple, c'est d'effacer la feuille Tableau et de recopier les pages des vendeurs, dans ce cas tout ID est inutile.

Non je n'apporte aucune modification manuelle néanmoins, il y a des formules pour les colonnes DATE ACCORD PRINCIPE, DATE DEPOT DEMANDE, DATE EDITION OFFRE PRÊT, DATE RECEPTION JUSTIFICATIF, DATE REMISE OFFRE ALEXANDRINE, DATE ACTE AUTHENTIQUE dans la feuille "Tableau de bord" qui ne sont pas dans les feuilles "Vendeur".
Pour que vous compreniez ma logique dans le suivi de financement de mes vendeurs est qu'il note chaque date de manière manuelle pour toutes les colonnes. En revanche, le tableau de bord qui sera accessible uniquement par moi, me permet d'avoir un prévisionnel sur la date d'obtention de chaque élément correspond aux colonnes pour lesquelles une formule a été mise en place et l'objectif ultime de ce fichier est que si la case vendeur est vide alors que l'échéance arrive dans 4 jours (échéance prévisionnel du Tableau de bord) alors un mail automatique sera envoyé au vendeur lui indiquant de relancer le client pour "DÉPÔT DOSSIER EN BANQUE" par exemple.

Mais effectivement le Tableau de bord est entièrement automatisé et aucune modification manuelle ne sera apportée.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Si j'ai bien compris, alors il y a beaucoup plus simple, j'efface tout Tableau de bord excepté vos formules, et pour chaque vendeur on recopie les partie gauche (A:F) et droite (M:N) sans toucher à vos formules. Comme cela elles restent opérationnelles.
Voir PJ avec :
VB:
Sub Worksheet_Activate()
    On Error GoTo Fin
    Application.ScreenUpdating = False
    Application.EnableEvents = False                        ' On bloque tout nouvel événement
    Dim DLTDB%, F, DL%, Tablo1, Tablo2
    DLTDB = Range("A65500").End(xlUp).Row                   ' Dernière ligne de TDB
    If DLTDB < 18 Then DLTDB = 18
    Range("A18:F" & DLTDB).ClearContents
    Range("M18:N" & DLTDB).ClearContents
    For Each F In Worksheets                                ' Pour toutes les feuilles
        If F.Name <> "Tableau de bord" Then                 ' Hormis Tableau de bord
            With Sheets(F.Name)
                DL = .Range("A65500").End(xlUp).Row         ' Dernière ligne occupée de la feuille
                Tablo1 = .Range("A9:F" & DL)                ' Tranfert données dans Tablo partie gauche (A:F)
                Tablo2 = .Range("M9:N" & DL)                ' Tranfert données dans Tablo partie droite (M:N)
            End With
            DLTDB = 1 + Range("A65500").End(xlUp).Row
            Cells(DLTDB, "A").Resize(UBound(Tablo1, 1), UBound(Tablo1, 2)) = Tablo1 ' Transfert tableau partie droite
            Cells(DLTDB, "M").Resize(UBound(Tablo2, 1), UBound(Tablo2, 2)) = Tablo2 ' Transfert tableau partie gauche
        End If
    Next F
Fin:
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
 

Pièces jointes

  • Suivi de financement (3).xlsm
    77 KB · Affichages: 7

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 913
Membres
101 837
dernier inscrit
Ugo