Excel - Classeur étant le filtre d'un autre

flo8 -  
 flo8 -
Bonjour,

J'ai une grande base de données Excel contenant entre autres une colonne G reprenant des noms de référents. Je voulais savoir s'il était possible de créer un classeur par référent qui reprendrait automatiquement les lignes où le nom du référent apparaît en colonne G et qui se modifierait automatiquement chaque fois que des modifications sont apportées à la base de données initiale.

Merci d'avance

25 réponses

  • 1
  • 2
Résumé de la discussion

Une grande base de données Excel contient une colonne G avec des noms de référents et l’objectif est de générer un classeur par référent repliant automatiquement les lignes correspondantes et de le mettre à jour. Plusieurs pistes ont été évoquées, notamment un classeur externe avec une feuille par référent ou un classeur commun regroupant les feuilles, l’utilisation de macros ou d’automatisations pour filtrer les lignes par colonne G et actualiser. Des difficultés ont été abordées, notamment les chemins d’accès réseau, les noms de classeur ou de plages, les erreurs de macro, avec l’idée d’un bouton sur chaque feuille pour actualiser sans toucher à la base.

Bobot (l'IA à votre service)
  1. flo8
     
    Quand tu veux un exemple, tu veux un fichier Excel joint ?

    Pour les feuilles référents, il faudrait en tout cas que ce soit dans un classeur autre que celui de la base de données, mais on pourrait avoir un classeur pour tous les référents avec une feuille par référent.
    1
  2. Le Pingou Messages postés 12286 Date d'inscription   Statut Contributeur Dernière intervention   1 481
     
    Bonjour,
    Oui c'est tout à fait possible via fonction Excel ou procédure VBA.
    Question ; est-ce obligatoire d'avoir un classeur par référent ou est-il possible sur le même classeur par feuille ?
    Pour en dire plus un exemple serait souhaitable.
    0
  3. Le Pingou Messages postés 12286 Date d'inscription   Statut Contributeur Dernière intervention   1 481
     
    Bonjour,
    Je ne vous impose rien, par contre, s'il vous est possible de mettre un exemple sur un fichier Excel avec une petite explication directement sur le fichier se sera plus parlant.
    Fichier sur https://www.cjoint.com/ et poster le lien.
    0
  4. flo8
     
    Voici le fichier joint :
    http://cjoint.com/?ALgqKJSP1xb

    J'espère que mes explications sont claires (pas gagné).
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Le Pingou Messages postés 12286 Date d'inscription   Statut Contributeur Dernière intervention   1 481
     
    Bonjour,
    Merci pour l'information, c'est parfait.
    Demain vous aurez une proposition.
    Juste une question, quel est le nombre approximatif des référents ?
    0
  7. Le Pingou Messages postés 12286 Date d'inscription   Statut Contributeur Dernière intervention   1 481
     
    Bonjour,
    Merci pour l'information.
    Voici ma proposition : https://www.cjoint.com/?3LhkYHEwBid
    Note : les 2 classeurs doivent se trouver dans le même répertoire. Le nom du classeur des référents doit être inscrit dans la plage réservé du classeur de données.
    Vous devez lancer la mise à jour selon vos besoins par clic sur le bouton de commande et la procédure fera son travail.
    Si vous avez un nouveau référent, il suffit de copier une des feuilles présentent dans le classeur y relatif et de prendre soin de renommer la feuille avec le nom du référent (doit être identique à celui du classeur de base). Pas oublier d'enregistrer... !
    0
  8. Caveman
     
    Bonjour,

    J'essaie de l'adapter à mon fichier, mais ça bug encore. Par contre, comme le fichier "Référent" ne reprend pas automatiquement les informations de la base, mais qu'il est modifié par un bouton, il faudrait plutôt y avoir un bouton sur chaque feuille de référent.

    En effet, le but de crée des pages liés aux référents est que chaque référent aille voir sa feuille (soit dans un classeur commun, soit dans des classeurs séparés) sans passer par la base de données, qui est gérée par une autre personne.

    Donc, il faudrait que chaque référent puisse voir sur sa feuille à lui la situation au moment où il va dessus et pas au moment où le gestionnaire de la base de données a remis à jour pour la dernière fois.
    0
    1. Le Pingou Messages postés 12286 Date d'inscription   Statut Contributeur Dernière intervention   1 481
       
      Bonjour Caveman,
      Eh bien dans ma proposition se base sur le gestionnaire qui est le seul à gérer le classeur de base, donc chaque référent peut voir sa feuille selon ces besoins du moment.
      Pour quel raison ce sont les référents qui changeraient les données ?
      En plus elle s'adressais à flo8 .
      Salutations.
      Le Pingou
      0
    2. flo8
       
      Purée, c'est un collègue qui s'incruste où il doit pas :(

      Faut que le rappelle à l'ordre...

      Ceci dit, il soulève un point auquel je n'avais pas pensé. La base de données est géré par un homme qui est censé être le seul à y accéder. Les référents ne sont pas censés toucher à cette base de données. Par contre, ils ont chacun une feuille, soit sur un classeur commun (comme dans ta proposition), soit dans des classeurs différents. Qu'ils ne peuvent normalement pas modifier.

      Cependant, il pourrait être intéressant pour le référent, quand il consulte son dossier, d'avoir un bouton sur sa feuille qui remette à jour plutôt que de devoir passer par le gestionnaire de la base de données (qui ne remettrait pas forcément à jour chaque fois qu'il modifie la base).

      C'est ça l'idée...
      0
  9. Le Pingou Messages postés 12286 Date d'inscription   Statut Contributeur Dernière intervention   1 481
     
    Bonjour flo8,
    Merci pour l'information.
    Je vous conseille de ne pas inverser les rôles.
    Toutefois si vous pensez que le gestionnaire peux oublier de mettre à jour son travail alors il est possible de le faire via la procédure.
    0
  10. Le Pingou Messages postés 12286 Date d'inscription   Statut Contributeur Dernière intervention   1 481
     
    Bonjour flo8,
    Si vous dites ceci : Les référents ne sont pas censés toucher à cette base de données Donc le référent reçoit un fichier mis à jour par le gestionnaire.
    Note, bien entendu que c'est à vous de décider quelle méthode vous voulez adopter.

    Salutations.
    Le Pingou
    0
    1. flo8
       
      Effectivement, les référents ne sont pas censés toucher à la base de données. C'est le gestionnaire qui la met à jour. Mais pour envoyer les mises à jour, le gestionnaire doit cliquer sur le bouton. Ca ne se fait pas automatiquement. Donc, est-ce qu'il le fera systématiquement ?

      L'idée est donc que, depuis sa feuille, le référent puisse aussi avoir la possibilité d'appeler cette mise à jour afin d'être sûr qu'il a bien la dernière version.
      0
  11. Le Pingou Messages postés 12286 Date d'inscription   Statut Contributeur Dernière intervention   1 481
     
    Bonjour flo8,
    J'ai juste une question ; avez-vous déjà essayé le fichier pour voir ce qui se passe ?
    Remarque : il est possible de forcer la mise à jour dès la fermeture du fichier de base, ce qui rendra inutile toute manipulation de la part des référents.
    Dans ce cas vous avez tout en main, vous devez mettre la même procédure dans le classeur référent en mentionnant le nom du classeur de base.
    0
  12. flo8
     
    De retour au turbin...

    Alors, j'ai essayé l'exemple, mais je n'ai encore fini. Il bogur au niveau de l'expression suivante :
    Range("MesData").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("AA1:AA2"), _
    CopyToRange:=wbcible.Sheets(ref.Name).Range("A2:C2"), Unique:=False

    Je pense que je dois changer quelque chose, mais quoi ?
    0
  13. Le Pingou Messages postés 12286 Date d'inscription   Statut Contributeur Dernière intervention   1 481
     
    Bonjour,
    Cela m'étonne que mon exemple ne fonctionne pas correctement.
    Qu'elle est le message d'erreur ?
    Vous pouvez réaliser une copie d'écran lors du message d'erreur et ensuite une deuxième sur le débogage du code. Mettre les 2 copies d'écran sur un fichier Word et le placer sur https://www.cjoint.com/ et poster le lien !

    Salutations.
    Le Pingou
    0
  14. flo8
     
    Oups, mon message est incomplet. J'ai oublié une phrase entre la première et la deuxième.

    L'exemple marche très bien. J'essaie d'adapter dans mon fichier et ça bug. Il y a des éléments que je dois changer, mais j'ai de la peine à voir lesquels. Et en plus, ce matin. ça bug à un autre endroit où ça passait vendredi.

    Voici les deux captures d'écran du premier bug actuel :
    http://cjoint.com/?ALmiD31j1EG
    0
    1. Le Pingou Messages postés 12286 Date d'inscription   Statut Contributeur Dernière intervention   1 481
       
      Bonjour,
      Selon les copies d'écran c'est effectivement le nom du classeur du référent qui est mal orthographié ou il n'est pas dans le même répertoire de votre fichier de base (« Cordinations.xl..)
      Salutations.
      Le Pingou
      0
    2. flo8
       
      Pourtant, après vérification, le classeur cible est bien orthographié et il est dans le même dossier que le fichier de départ. Ce qui est bizarre, c'est que ce bug se manifeste de manière aléatoire.
      0
    3. Le Pingou Messages postés 12286 Date d'inscription   Statut Contributeur Dernière intervention   1 481
       
      Bonjour,
      Son extension doit aussi faire partie du nom !
      Salutations.
      Le Pingou
      0
    4. flo8
       
      J'ai vérifié, mais ça joue. L'extension y est. D'ailleurs, elle apparaît dans le message d'erreur.
      0
  15. flo8
     
    Et allez, je refais un essai et c'est un autre bug qui apparaît. Je te mets aussi les captures d'écran :
    http://cjoint.com/?ALmiWe2XjtK
    0
    1. Le Pingou Messages postés 12286 Date d'inscription   Statut Contributeur Dernière intervention   1 481
       
      Bonjour,
      Concernant le deuxième cas, il y a 2 possibilités d'erreur.
      La première : [Range("MesData")] ou [Mesdata] représente le nom de la plage des données à filtrer
      Dans mon exemple le nom MesData fait référence :
      =DECALER('Base de données'!$A$1:$D$1;;;NBVAL('Base de données'!$A:$A))
      Cette formule permet de réagir dynamiquement à l'augmentation ou diminutions du nombre des enregistrements (lignes...)

      La deuxième : [Range("A2:C2")] c'est la plage des titres des colonnes que vous voulez récupérer sur le classeur [AC]
      Salutations.
      Le Pingou
      0
    2. flo8
       
      OK, la deuxième possibilité est réglée. Par contre, où est-ce que je modifie la première possibilité en cas de besoin ?
      0
    3. Le Pingou Messages postés 12286 Date d'inscription   Statut Contributeur Dernière intervention   1 481
       
      Bonjour,
      Et pourtant vous avez l'exemple sur ma proposition [flo8_ccm_Base.xlsm].
      Alors vous devez définir un nom pour votre plage de données, dans la boite de dialogue [Nouveau nom], sous [NOM :] indiqué par exemple [MesData] et sous [Fait référence à :] dans votre cas la formule :
      =DECALER('Participants'!$A$1:$H$1;;;NBVAL('Participants'!$A:$A))
      Note : adapté $A$1:$H$1 selon les colonnes de votre choix.
      Salutations.
      Le Pingou
      0
    4. flo8
       
      MesData est défini dans la macro ? Voilà le texte que j'ai :

      Option Explicit
      Sub FiltreAutreClasseur()
      Dim wbbase As String, nomclaref As String
      Dim wbcible As Workbook
      Dim ref As Variant
      Range("AA1") = "Référent"
      nomclaref = Range("claref")
      wbbase = ActiveWorkbook.Name
      ChDir ActiveWorkbook.Path
      Application.DisplayAlerts = False
      Workbooks.Open (nomclaref)
      Set wbcible = ActiveWorkbook
      Windows(wbbase).Activate
      ' boucle sur les référent (nom des feuilles
      For Each ref In wbcible.Worksheets
      Range("AA2") = ref.Name
      Range("MesData").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("AA1:AA2"), _
      CopyToRange:=wbcible.Sheets(ref.Name).Range("A2:C2"), Unique:=False
      Next ref
      Range("miajo") = "Le " & Format(Date, "dd.mm.yyyy") & " à " & Format(Time, "h:mm:ss")
      MsgBox "La mise à jour est terminée."
      End Sub
      0
  16. Le Pingou Messages postés 12286 Date d'inscription   Statut Contributeur Dernière intervention   1 481
     
    Bonjour,
    Alors vous m'expliquez ou c'est ?
    Et ceci vous en faites quoi :
    Alors vous devez définir un nom pour votre plage de données, dans la boite de dialogue [Nouveau nom], sous [NOM :] indiqué par exemple [MesData] et sous [Fait référence à :] dans votre cas la formule :
    =DECALER('Participants'!$A$1:$H$1;;;NBVAL('Participants'!$A:$A))
    Note : adapté $A$1:$H$1 selon les colonnes de votre choix.
    0
  17. flo8
     
    D'accord. Donc, ce n'était pas dans la macro qu'il fallait modifier ça.

    Donc, j'ai crée le nom de la plage avec la formule précédente adaptée au nombre de colonnes et... ça bugue toujours. Avec le même message qu'auparavant.

    Donc, en dehors des deux problèmes possibles précédents, il doit y en avoir un troisième. Ou alors j'ai mal adapté les formules
    0
    1. Le Pingou Messages postés 12286 Date d'inscription   Statut Contributeur Dernière intervention   1 481
       
      Bonjour,
      Est-il possible de voir ce que vous avez réalisé...?
      Et par la même occasion la structure du classeur [AC.xlsm] ?
      Salutations.
      Le Pingou
      0
    2. flo8
       
      http://cjoint.com/?ALoh2r5SZFD
      Avec toute la confidentialité inhérente...
      0
    3. Le Pingou Messages postés 12286 Date d'inscription   Statut Contributeur Dernière intervention   1 481
       
      Bonjour,
      Merci pour les fichiers.
      Dans la procédure j'ai ajouté une commande pour désactiver les événements qui déclenchent des procédures événementielles. En plus la plage de données dans la procédure est [MesData] donc vous devez avoir le même nom dans le gestionnaire des noms (MesDatas était donc incorrect, le [s] est de trop.)
      Dans le classeur [AC.xlsm] vous n'aviez pas les titres des colonnes que vous vouliez obtenir. En plus, le nom de la feuille [Macquat] n'était pas correct par rapport au nom du fichier d'origine.
      Vos fichiers : https://www.cjoint.com/?3LokU4BJKHy
      Salutations.
      Le Pingou
      0
  18. flo8
     
    Les fichiers que tu me renvoient fonctionnent très bien. Par contre, quand je les copie dans le dossier où ils sont censés être, ça re-bugue. D'où ma question : est-ce que la méthode utilisée peut avoir des problèmes si les fichiers sont sur un serveur et non sur un disque local ?
    0
  19. Le Pingou Messages postés 12286 Date d'inscription   Statut Contributeur Dernière intervention   1 481
     
    Bonjour,
    Eh bien en principe cela devrait marcher sans autre, peut être un caprice jurassien... !
    Cependant pouvez-vous me donner la valeur que prend l'expression [ActiveWorkbook.Path] de la procédure ?
    0
  • 1
  • 2