Extraire des colonnes d'un tableau Excel

Bonjour,

svp, j'ai un tableau contenant plusieurs colonnes titrés, n° étudiant, nom étudiant, n°CIN, code étudiant, département, titre du sujet, nom laboratoire, ...

en faite c'est une base de donnée étudiants.

je voudrais extraire de ce tableau un autre tableau contenant juste les colonne : étudiant, nom, prénom, titre du sujet

avec bien sur les lignes concernant chaque étudiant,

comment faire? le filtrage n'est pas efficace dans ce cas

merci

Bonjour Nectarine78,

Vous ne risquez pas d'avoir de réponse, si vous ne postez pas dans le bon forum

Sinon, merci de mettre un exemple anonymisé de ce que vous avez et ce que vous souhaiteriez comme résultat

A+

Bonjour, BrunoM45

Merci pour ta précieuse la remarque ,

sinon, qu'est ce vous proposez comme bon forum pour ma fameuse question?!!

NB: Ci attaché un petit exemple:

comment faire pour extraire de ce tableau, un 2 ème tableau ne contenant que les colonnes A, C, F, H, I avec leurs données biens sur?

Merci.

Bonjour nectarine78, le fil

Je te propose 2 solutions :

  • L'une par formule. Qui ne sera pas une bonne idée parce que si ton tableau d'origine devait augmenter en nombre de lignes, tu serais obliger de recopier les formules à chaque fois !
  • L'autre par VBA. Qui se débrouille toute seule pour lire le tableau d'origine, peu importe sa dimension !
  • Cerise sur le gâteau avec VBA,le choix des colonnes à copier est possible !

merci pour votre réponse, svp comment faire avec VBA?

Bonjour nectarine78, le fil

Tu passe dans l'onglet [Par VBA] et tu cliques sur le bouton vert... Tout se fait tout seul !

Pour ce qui est d'adapter à ton vrai tableau, au besoin je t'explique comment faire... Mais as-tu testé au moins ce bouton ?

Rebonjour, cher Green, merci pour le retour,

je trouve pas cet onglet VBA sur ma page excel !

comment l'activer?

...

Est-ce que tu as télécharger ma PJ exemple-tableau-20220606-001.xlsm ?

Re,

oui, je viens de le télécharger, il marche bien le VBA,!! c'est génial

comment alors l'appliquer à ma vrai base de données, je voudrais apprendre svp

merci pour votre aide.

Bonjour neactarine78,

Voici les explications :

1) Ici l'onglet [Feuil1] contenant l'ensemble des données

capture 20220606 001

2) Ici l'onglet [Par VBA] sur lequel seront copiées les colonnes souhaitées

capture 20220606 002

Exemple de sélection de colonnes :
(L'insert est une copie de l'onglet [Feuil1] - Les colonnes marquées en orange sont celles qui seront copiées dans l'onglet [Par VBA])

capture 20220606 004

Autre exemple...

capture 20220606 005

Cliquer sur ce bouton permet de lancer le transfert

capture 20220606 006

Voici le résultat du transfert :

capture 20220606 007

Voici le résultat avec un changement de colonnes (il faut cliquer de nouveau sur le bouton pour réaliser le nouveau transfert, après le changement des colonnes sélectionnées) :

capture 20220606 008

Attention les noms de colonnes sélectionnées dans l'onglet [Par VBA] doivent être strictement identiques à ceux de l'onglet [Feuil1] !


Comment adapter à ton fichier réel... ?

  • Il y a dans le code, 2 fonctions qui permettent de délimiter respectivement la dernière ligne et la dernière colonne d'une zone :
capture 20220606 101
  1. Dans la fonction LastRow :
    1. "wshAct" est l'onglet sur lequel la fonction devra fonctionner
    2. "colRef" est la colonne de référence. Elle permet de savoir où est située la 1ère colonne significative. Depuis cette colonne la fonction retrouve grâce à ".End(xlUp).Row" numéro de ligne
    3. "rowMin" est la ligne sur laquelle se trouve le début des données
    4. Lorsque la fonction fait son travail, elle remonte depuis la dernière ligne d'Excel (.Rows.Count) jusqu'à la ligne de début des données (rowMin), puis elle prend le maximum des 2 valeurs trouvées (au cas où le fichier serait vide)
  2. Dans la fonction LastCol :
    1. "wshAct" idem "LastRow"
    2. "rowRef" est la ligne de référence. Elle permet de déterminer la ligne à prendre en compte pour compter les colonnes. Idéalement, celle de la ligne d'entête
    3. "colMin" est la colonne minimum à prendre en compte

Adaptation :Il faut modifier certaines zones de code, pour indiquer où se trouvent les données d'origine :

  1. Dans la zone 1 il faut changer
    1. "Cells(3,4)" en fonction de la première ligne et colonne des données dans l'onglet [Feuil1]
    2. Puis les informations concernant les fonctions "LastRow" et "LastCol"
  2. Dans la zone 2
    1. Pour la ligne avec "Range(.Cells(4,4) ... ))).ClearContents" il faut changer le 4 et 4 en fonction de la ligne et colonne sur lesquelles tu veux transférer les données. Attention la ligne est bien celle des données pas celle de l'entête (zone orange dans les figures ci-dessus - qui doit toujours rester présente)
    2. Pour la ligne avec "tabDest=Range( ...)))" il faut changer le 3 et le 4. La ligne 3 est la ligne d'entête, qu'il faut prendre en compte ! Et changer les valeurs données aux fonctions "LastRow" et "LastCol"
capture 20220606 104

Puis en dernier lieu, il faut adapter cette dernière zone de code :

capture 20220606 106
  • Changer le "3,4" qui doit être le même que celui indiqué plus haut dans le code à la ligne "tabDest=Range( ...)))"

Voilà, en espérant que les explications seront suffisantes pour adapter au vrai fichier de travail !

c'est trés iteresent comme solution, je vais l'appliquer à mon tableu, et toutes mes bases de données rencontrées.

Merci bcps pour ton grand efort, et ta gébial solution.

C'est une proposition de solution est géniale, et claire ...

Merci beaucopus Green SOFTS

Bonjour nectarine78

Ravi que la solution et les explications te conviennent !

Et merci pour tous les mercis

N'hésite pas re-demander si besoin plus d'explications si tu rencontres des problèmes sur certaines de

"toutes tes bases de données rencontrées"

PS/

merci cher Green SoftS

Bonjour Nectarine, je te propose une solution sans VBA, avec des formules uniquement. À l’endroit où tu veux récupérer la copie partielle de ton tableau qui t’intéresse, tu recopies les entêtes qui t’intéressent. En dessous de chacun de ces entêtes, tu écris la formule =FILTRE(table1;table1[#En-têtes]=D$13;"") où D$13 correspond à l’adresse de l’entête que tu as copié. Il suffit ensuite de copier cette formule sous chacun des entête copiés. Cette formule étant dynamique, ligne que tu ajouteras dans le premier tableau se copieront automatiquement dans le deuxième sans intervention.

image
Rechercher des sujets similaires à "extraire colonnes tableau"