Extraire des données d'un tableau et les ranger dans un autre

Zorbec Le Gras

XLDnaute Nouveau
Re-bonjour le Forum,

J'essaye de trouver une macro qui me permettrait de faire la chose suivante :

J'ai un tableau de données, s'étendant sur la plage B11:L1000.
La colonne B comprend sur chaque ligne des noms de personnes, la colonne K comprend des intitulés de groupes auxquels chaque personne est affectée.

Il y a 8 groupes différents en tout.

Je voudrais que la macro copie tous les noms et les range à la queue leu leu, dans leur groupe respectif, dans un autre tableau, comprenant 8 colonnes (une par groupe). Chacune des colonnes de ce tableau de 'récupération' a en en-tête le nom exact du groupe tel qu'il est utilisé dan la colonne K.
Ces en-têtes de colonnes s'étendent sur la plage N5:U5, et donc les noms des personnes doivent s'afficher dans la colonne correspondant à leur groupe tel qu'il leur est affecté dans la colonne K du tableau de' base de données' B11:L1000.

Je suis conscient que je demande beaucoup, mais je suis preneur de tout début de solution sous forme de code, même partiel.

Merci d'avance à ceux qui auront le courage de lire mon pavé ! :)
 

CISCO

XLDnaute Barbatruc
Re : Extraire des données d'un tableau et les ranger dans un autre

Bonjour à tous

1) On peut aussi faire ça sans macro. Est-ce que cela t'intérese ou est-ce que tu veux absolument quelque chose sous la forme de macro ?

2) Mets donc un petit fichier en pièce jointe, avec juste une vingtaine de lignes, histoire que nos propositions correspondes bien à ta demande.

@ plus
 

Zorbec Le Gras

XLDnaute Nouveau
Re : Extraire des données d'un tableau et les ranger dans un autre

Merci Cisco de ta réponse.

Je joins le modèle demandé. J'espère que le format sera bon...

Si une solution plus simple qu'une macro est possible, je suis preneur.

@ +
 

Pièces jointes

  • Zorbec Le Gras.xls
    21 KB · Affichages: 151

CISCO

XLDnaute Barbatruc
Re : Extraire des données d'un tableau et les ranger dans un autre

Bonjour

Ton fichier modifié en pièce jointe.

Si tu as beaucoup de lignes, cette méthode risque de prendre beaucoup de temps de calcul (tous les calculs sont matriciels, obtenus en appuyant sur ctrl+maj+entrée, et signalés par les {} avant et après la formule).
Si besoin est, on peut diminuer ce temps d calcul en :
*nommant certaines des plages ou des formules,
*modifiant certaines parties de la formule pour éviter certains calculs "idiots" (La formule est alors moins facile à comprendre, mais elle fonctionne plus rapidement).

@ plus
 

Pièces jointes

  • Zorbec Le Gras(1).xls
    29 KB · Affichages: 233
  • Zorbec Le Gras(1).xls
    29 KB · Affichages: 247
  • Zorbec Le Gras(1).xls
    29 KB · Affichages: 247
Dernière édition:

Zorbec Le Gras

XLDnaute Nouveau
Re : Extraire des données d'un tableau et les ranger dans un autre

Re-bonjour Cisco,

Désolé, mais j'ai un souci pour adapter ta formule à mon tableau.

Actuellement mes données s'arrêtent pour l'instant à la ligne 49 (mais par la suite il y aura plus de lignes). Or dans ta formule il est fait référence à la ligne $28 qui est la dernière de la BD de l'exemple. De ce fait, toutes les lignes en dessous de la ligne 28 de ma base de données réelle ne renvoient pas le nom dans le groupe correspondant. (Ce qui me semble logique)
J'ai essayé de remplacer toutes les valeurs $28 de ta formule par la valeur $49, mais ça me génère un message d'erreur : #VALEUR! sur la 1° ligne des 8 groupes, et par ailleurs les personnes des lignes sous la 28 de la BD ne figurent pas dans les groupes. Je ne comprends pas pourquoi ?!

Peux-tu s'il te plait m'expliquer comment adapter aux dimensions de ma base de données ?

Merci d'avance.
 

Pyrof

XLDnaute Occasionnel
Re : Extraire des données d'un tableau et les ranger dans un autre

Bonjour,

Essais cette macro

Code:
Sub essais()
Dim tab_l(8) ' pour mémoriser les lignes des groupes
l = 11: c = 2 ' cellule du premier nom
While Cells(l, c) <> ""
    nom = Cells(l, c)
    groupe = Split(Cells(l, 11), " ")(1)
    tab_l(groupe) = tab_l(groupe) + 1
    Cells(tab_l(groupe) + 5, groupe + 13) = nom
    l = l + 1
Wend
End Sub
 

Zorbec Le Gras

XLDnaute Nouveau
Re : Extraire des données d'un tableau et les ranger dans un autre

Bonjour Pyrof,

ta macro fonctionne en effet sur mon tableau d'essai, en revanche je n'arrive pas à l'adapter à mon tableau réel. Si j'utilise la macro telle quelle, j'obtiens le message d'erreur d'exécution '9' "L'indice n'apaprtient pas à la sélection" pour la ligne :
groupe = Split(Cells(l, 11), " ")(1)

La seule différence entre ma feuille excel réelle et celle d'exemple est que mon tableau 'base de données' couvre pour l'instant la plage B11:L49. (Les titres des colonnes étant en B10:L10, comme dans l'exemple). Mais il est amené à grandir encore en ce qui concerne le nombre de lignes, le nombre de colonnes restant lui inchangé.

Merci de ton aide.
 

CISCO

XLDnaute Barbatruc
Re : Extraire des données d'un tableau et les ranger dans un autre

RE

Ne pas oublier de valider la formule avec ctrl+maj+entrée (cf mon précédent post, et les {} avant et après les formules dans le fichier ci-joint ci-dessous).

@ plus

PS : Et une version pouvant comprendre des blancs dans la liste des noms, dans la colonne B, et s'adaptant automatiquement à la longueur de cette liste (autrement dit, on n'a pas besoin de modifier les 28 en 49, puis plus tard les 49 en.... (cf la définition des plages nommées "Groupe", "noms" et "noms1")).

@ plus
 

Pièces jointes

  • Zorbec Le Gras(1).xls
    29 KB · Affichages: 109
  • Zorbec Le Gras(1).xls
    29 KB · Affichages: 120
  • Zorbec Le Gras(1).xls
    29 KB · Affichages: 119
  • Zorbec Le Gras(1)bis.xls
    28 KB · Affichages: 157
Dernière édition:

Pyrof

XLDnaute Occasionnel
Re : Extraire des données d'un tableau et les ranger dans un autre

groupe = Split(Cells(l, 11), " ")(1)

Cells(l, 11) = la cellule ou est précisée le groupe (colonne 11)

split va séparer les élements de cette cellule et prend comme caractère séparateur " " (l'espace)

ainsi l'élément (0) sera "groupe" et l'élément (1) sera le numéro de groupe

Il faut donc impérativement un espace entre groupe et le numéro.

Tu peux aussi avoir un espace avant et après il faudrait donc :

groupe = Split(Trim(Cells(l, 11)), " ")(1)
 

Zorbec Le Gras

XLDnaute Nouveau
Re : Extraire des données d'un tableau et les ranger dans un autre

Re-bonjour à tous les deux,

@ Cisco : La formule contenue dans ton fichier (1) bis me convient parfaitement puisqu'elle est évolutive en ce qui concerne la base de données.

@ Pyrof : Je testerai ta macro, mais je doute que mon niveau en VBA soit à la hauteur pour l'adapter à mon cas personnel ! :)

Un grand merci à vous deux pour votre aide et sa rapidité !
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 571
Messages
2 089 808
Membres
104 278
dernier inscrit
LENZY