Comment lier des cellules d'un tableau avec les feuilles de calcul
Je souhaiterais créer un tableau inventaire de toutes nos collections. Pour cela j'ai un tableau principal où tout y est entré. Je voudrais donc créer des feuilles à "thème" : Géologie, fossiles etc... qui sont liées à mon tableau principal de façon à quand on ajoute sur ce tableau une nouvelle donnée, elle s'ajoute automatiquement dans les feuilles souhaitées(ou vice versa si cela est possible) . J'espère avoir été claire ! Voici un exemple de mon fichier.
Merci d'avance !! A bientôt j'espère
Bonjour
Complète ton profil en indiquant ta version Excel
Selon le nombre de thème, faisable par PowerQuery, sinon VBA
Bonjour…
Une proposition avec VBA (fichier .xlsm et non .xlsx)
Le premier tableau BD est filtré selon la Classe (futur nom de feuille) item d’un tableau sans doublon et, l'onglet Classe, est initialisé à sa sélection et réinitialisé en sortant.
Private Sub Worksheet_Activate()
Dim P As Range
[C2] = Feuil1.[C2]: Me.Name = [C2] ‘initialisation de l’onglet récepteur (nommé Classe)
Application.ScreenUpdating = 0 ‘affichage neurailé et repris à la fin de la procédure
[BD].AutoFilter 5, [C2] ‘filtre du tableau d’origine BD, selon la classe sélectionnée
Set P = [BD[[Echantillons]:[Référence]]].SpecialCells(12)
P.Copy [TC].Item(1, 1) ‘copie des 4 premières colonnes visibles après filtre
[BD].AutoFilter ‘reprise du tableau entier sans effet d’optique
End Sub
Rénitialisation obligatoire pour un nouveau départ de l’onglet récepteur avant la sortie
Private Sub Worksheet_Deactivate()
If Application.CountA([TC]) > 0 Then [TC].Delete
Me.Name = "Classe"
End Sub
Comme le souligne Chris (salut), selon de contexte, l’utilisation de PowerQuery pourra simplifier beaucoup d’actions prévues !
J'utilise la version Excel de 2007 et je vais avoir 6 thèmes différents. Je vous avoue que je ne connais pas du tout PowerQuery !
Merci Ordonc ! Je débute complétement dans le code ahah
Bon et bien j'ai regardé ton dossier, malheureusement il ne fonctionne pas comme il faut (c'est peut être moi qui n'arrive pas à le faire fonctionner aussi ...) Il ne se passe pas grand chose sur la feuille "classe" ... Et lorsque je change sur le tableau TC pour n'avoir qu'une classe j'ai un peu de tout
Bonjour
La solution Ordonc fonctionne : tu sélectionnes dans Tableau principal la classe voulue en C2 puis tu passes sur l'Onglet Classe et tu as la liste correspondante
Re ...
Merci Chris.
En général, j’évite d’avoir 36000 onglets de même conception qui ne diffèrent que par leur nom.
Pour ce faire, je procède en suivant les étapes suivantes, en partant de 2 onglets seulement.
Remarque : Les macros sont construites en tenant compte de noms de plages (voir avec Formules et Gestionnaire de noms).
- Création de la liste, sans doublon, des classes connues, en l’intégrant dans un tableau structuré. Il est nommé Tc dans l’exemple donné.
Dans le classeur fourni, il te suffira de copier les différentes classes que tu as déjà (en évitant les répétitions).
Pour prévoir toute autre action que la synthèse d’une classe, j’ai créé la liste de validation en C2 initialisée avec la plage Lf des classes sans le titre (voir, dans les outils de données, Données et Validation des données).
Il n’y a rien à changer. Les noms se mettront à jours avec les modifications du tableau des classes (ajout, modification, suppression et même tri, déplacement ici où là).
- Dans l’onglet de base, la plage étudiée est intégrée dans un tableau structuré nommé BD. Il te suffira d’un copier/coller de ton tableau pour initialiser les contenus. Attention la plage doit être composée de cellules contiguës horizontalement et verticalement !
- Dans l’onglet nommé Classe, on a le tableau nommé TC de 2 lignes dont celle des titres identique à celle du Tableau de base mais sans le dernier (nom de la classe voulue). Il suffira de l’ajuster en fonction du précédent.
Maintenant, il suffit de lancer les macros se dérouleront en 2 étapes : choix de la classe dans la liste déroulante puis activation de la feuille nommée Classe. Pour cette seconde étape j’ai pris simplement le clic sur le nom d’un onglet aller et retour).
Je suppose que tu ne t’arrêteras pas ton étude à cela. Tu auras en autres, la gestion des données générales.
Si celles-ci ne sont pas en nombre gigantesque, tu pourras continuer à utiliser Excel, mais c’est une autre histoire car le niveau requis est assez élevé* …
Bon courage pour la suite, en sachant que tu pourras toujours trouver de l’aide ici.
*si j’étais obligé de mettre une citation en signature, j’écrirais :
« L’ignorance n’est pas un défaut. Elle le devient quand on refuse d’apprendre… ».
Bonjour !
Merci beaucoup vraiment ! Surtout avec ces détails c'est top merci ! Effectivement je n'avais pas activé les macros comme quoi je débute vraiment ... Je vais encore vous embêter (dernière fois !) je vais devoir rajouter des colonnes, comment puis je les ajouter dans le fichier de façon à ce qu'elles apparaissent aussi sur l'onglet "Classe" Dois je rentrer une ligne de code en plus ?
Merci encore
Re …
Les propositions sont faites de façon générale en tenant compte de la demande.
C’est la multitude de variations du contexte qui peut enlever, parfois, l’envie de les traiter
Pour insérer une colonne dans un Tableau, on clique, bouton droit, sur une de ses cellules.
Si la cellule est dans la dernière colonne, on a, avec l’option Insérer, 2 propositions d’ajout d’une colonne : à gauche ou à droite sinon que la première. Après le choix, il suffit de saisir un nouveau titre.
Dans l’exemple traité, il y a un tableau couplé donc il faudra reporter la nouvelle ligne de titres dans celui-ci et adapter le numéro de la colonne clé. Cela peut être intégré dans la première macro.
Méthode : Clic bouton droit sur le nom la feuille Classe puis Visualiser le code et corriger la première macro ainsi
Private Sub Worksheet_Activate()
Dim n As Byte, P As Range
[C2] = Feuil1.[E3]: Me.Name = [C2]
Application.ScreenUpdating = 0
[BD].Rows(0).Copy [TC].Rows(0) 'pour adapter la nouvelle ligne de titres
n = [BD[Classe]].Column - [BD].Column + 1 'colonne du tableau de "Classe"
[BD].AutoFilter n, [C2]
Set P = [BD].SpecialCells(12)
P.Copy [TC].Item(1, 1)
[TC].Columns(n).Delete 'suppression de la colonne Classe devenue inutile
[BD].AutoFilter
End Sub
Merci infiniment !
Je ferai attention les prochaines fois de façon à être plus précise !
A bientôt