Macro pour creer des fiches à partir d'un tableau

PièceJointe

XLDnaute Nouveau
Voilà la question est basique mais je n'ai pas trouvé la réponse "basique"...

J'ai un tableau avec une centaine de ligne et 17 colonnes. je voudrais transformer chaque ligne en une fiche individuelle... j'imagine qu'il faut faire une macro...oui mais laquelle?

Je vous joins un fichier...

En vous remerciant pour vos lanternes ...
 

Pièces jointes

  • Tab Nouvelle Formule1.xls
    32 KB · Affichages: 572

ROGER2327

XLDnaute Barbatruc
Re : Macro pour creer des fiches à partir d'un tableau

BONJOUR* PièceJointe

Un début de solution, à développer, dans le classeur joint.
Mais s'il doit y avoir une centaine de fiche, il serait sans doute mieux de rédiger une feuille sous Word, puis d'y insérer les données issues d'Excel.

AU REVOIR* PièceJointe
ROGER2327
#2278

_
__________________
* Ça ne mange pas de pain...
 

Pièces jointes

  • Tab_2278.zip
    8.5 KB · Affichages: 759

PièceJointe

XLDnaute Nouveau
Re : Macro pour creer des fiches à partir d'un tableau

oops...
En effet... je suis confus...c'est que j'ai rédigé vite fait du travail entre deux tâches et que je m'y suis repris à deux fois...bref je suis impardonnable de toutes les façons...

Donc bonjour et merci, je vais explorer ce début de solution !

au revoir ;-)
 

PièceJointe

XLDnaute Nouveau
Re : Macro pour creer des fiches à partir d'un tableau

Re,

Bon, j'imagine que je suis responsable mais la macro ne se lance pas (nom inconnu) et je ne comprends pas pourquoi il faut mettre un nom en B2 (cette cellule est dans le bandeau)...
j'ai vaguement regardé comment c'était construit et ça dépasse de loin mes compétences...
Une piste ?
@+
 

ROGER2327

XLDnaute Barbatruc
Re : Macro pour creer des fiches à partir d'un tableau

Re...
Je ne comprends pas ce que vous appelez "bandeau". Dans les feuilles 'Fiche n', on a l'intitulé "nom" en A1. La note que j'ai placée dans ces feuilles dit d'inscrire le nom de la personne pour laquelle on veut créer une fiche dans la cellule B2 :
Mettez un nom en B2 (...)
Ensuite, effectuer la procédure 'fiche' :
(...) et exécutez la procédure fiche.
(Je suppose que vous savez exécuter une procédure. Sinon : faire Alt F8 puis double-cliquer fiche.)
Je viens d'ouvrir le classeur et d'exécuter ces instructions : la fiche se remplit correctement avec les données qui correspondent au nom qu'on a inscrit en B2 sur la fiche. (Si le nom choisi n'est pas dans la feuille "TAB Travail", un message le signale et abandonne la procédure.)
ensuite :
j'ai vaguement regardé comment c'était construit et ça dépasse de loin mes compétences...
Une piste ?
Il va falloir regarder plus que vaguement et, pour vous y aider, voici le code commenté pas à pas :
Code:
[COLOR="DarkSlateGray"][B]Sub fiche()
Dim nom As String, data As Object, oCel As Range, enr As Object, ch, i As Integer
   [COLOR="SeaGreen"]'Tableau de correspondance entre les cellules de la fiche et les champs _
   de données du tableau. _
   Le champ 1 (nom) va en B1 sur la fiche. Le champ 2 (prénom) va en B2, etc. _
   Le premier élément du tableau ("") n'est là que pour occuper la position 0. _
   L'avant dernier élément est "" car le champ 16 n'est pas utilisé.[/COLOR]
   ch = Array("", "B1", "B2", "B3", "B4", "C6", "C7", "C8", "C9", "C10", "C11", "C12", "C13", "G2", "C20", "C21", "", "G1")
   With ActiveSheet [COLOR="SeaGreen"]'Désigne la feuille active : c'est la fiche qu'on veut _
   remplir (feuille visible).[/COLOR]
      nom = .[B1].Value [COLOR="SeaGreen"]'On note le nom qu'on vient de mettre en B1 _
      sur la fiche active.[/COLOR]
      [COLOR="SeaGreen"]'On désigne par 'data' la partiede colonne A de la feuille _
      "TAB Travail" contenant les noms.[/COLOR]
      Set data = Sheets("TAB Travail").[A1].Resize(Sheets("TAB Travail").Cells(Rows.Count, 1).End(xlUp).Row, 1)
      [COLOR="SeaGreen"]'Dans la boucle qui suit, on compare chaque valeur contenue dans la _
      colonne A de la feuille "TAB Travail" ('oCel') au nom qu'on a inscrit _
      en B1 de la fiche active.[/COLOR]
      For Each oCel In data.Cells
         If oCel.Value = nom Then Set enr = oCel.Resize(1, 17): Exit For [COLOR="SeaGreen"]'Si on _
      a trouvé le nom, on désigne par 'enr' les dix-sept premières cellules de la _
      ligne où on a trouvé le nom dans "TAB Travail" et on sort de la boucle.[/COLOR]
      Next oCel
      Set data = Nothing [COLOR="SeaGreen"]'Ligne "technique" : on libère la place occuppée en "vidant" _
      la référence à la feuille "TAB Travail".[/COLOR]
      If enr Is Nothing Then MsgBox "Nom inconnu": Exit Sub [COLOR="SeaGreen"]'Vérification qu'on a _
      trouvé le nom cherché dans la feuille "TAB Travail". Si ce n'est pas le cas, _
      on le signale par un message, puis on abandonne la procédure.[/COLOR]
      Application.ScreenUpdating = False [COLOR="SeaGreen"]'Ligne technique : Interdicition du _
      "rafraichissement" de l'affichage pour accélérer les opérations qui vont suivre.[/COLOR]
      [COLOR="SeaGreen"]'Dans la boucle suivante, on lit successivement les valeurs trouvées dans les _
      champs de la feuille "TAB Travail" pour les affecter aux cellules _
      correspondantes dans la fiche active.[/COLOR]
      For i = 1 To 17
         If ch(i) <> "" Then .Range(ch(i)).Value = enr(1, i) [COLOR="SeaGreen"]' Traduction de _
      cette ligne : si le ième élément du tableau 'ch' n'est pas la chaîne vide, _
      alors affecter la ième valeur du tableau 'enr' à la cellule dont _
      l'adresse est le ième élément du tableau 'ch'.[/COLOR]
      Next i
      Application.ScreenUpdating = True [COLOR="SeaGreen"]'Autorisation du rafraichissement de l'affichage.[/COLOR]
   End With
End Sub[/B][/COLOR]
Je suis sûr qu'une fois que vous aurez attentivement analysé le code, il vous paraitra simple. Il est même trop simple pour être réellement efficace (c'est pourquoi je parlais de début de solution).
En effet, ce code présente les inconvénients suivants :
  1. En l'état, il nécessite la création manuelle d'autant de fiches qu'on voudra en créer. Pour chacune, il oblige à la saisie manuelle du nom de la personne concernée. Créer cent fiches ne sera pas une sinécure.
    Heureusement, il ne sera pas difficile d'apporter les modifications permettant l'automatisation de ces tâches.
    Je ne l'ai pas fait à dessein : d'une part je voulais d'abord vous proposer un exemple simple permettant de commencer, d'autre part, pour le faire correctement, il faudra sans doute modifier votre base de données (feuille "TAB Travail" car...
  2. ... car si l'on s'en tient au code actuel, vous allez tôt ou tard être confronté à des problèmes d'homonymie. Pour l'instant, si vous avez deux noms identiques dans la base, le code n'est capable d'établir une fiche que pour la première occurrence du nom. C'est évidemment inacceptable, et il faudra bien doter chaque enregistrement d'une clef unique, i.e. d'un champ dont on est certain qu'on ne trouvera qu'une seule fois chacune de ses valeurs.
  3. Le choix d'éditer des fiches par centaines dans Excel n'est peut-être pas la meilleure solution. Que pensez-vous de la suggestion que je vous faisais plus tôt ?
    Mais s'il doit y avoir une centaine de fiche, il serait sans doute mieux de rédiger une feuille sous Word, puis d'y insérer les données issues d'Excel.
    Il se peut que votre projet présente des contraintes que j'ignore, vous obligeant à tout faire avec Excel. Si ce n'est pas le cas, réfléchissez à ma suggestion. Elle vous permettrait d'éviter le recours à la programmation en VisualBasic, tout en n'exigeant pas de trop longues manipulations à chaque publication de fiches.
En attendant votre réponse, bon courage !
ROGER2327
#2281
 

PièceJointe

XLDnaute Nouveau
Re : Macro pour creer des fiches à partir d'un tableau

Bonsoir,

Après étude approfondie ;) je peux dire que je me suis mal exprimé... (même si effectivement ça fonctionne) ce que je désire obtenir est en fait l'inverse.

je vous explique la procédure de saisie se fait via formulaire qui incrémente le tableau principal (TAB Travail), ensuite je souhaite que toutes les données soient reventilées dans des fiches individuelles... et effectivement en word ce serait peut être mieux... mais bon...


Du coup les deux propositions ne me vont pas...(même si elles fonctionnent)...

@+ et merci de votre aide.
 

ROGER2327

XLDnaute Barbatruc
Re : Macro pour creer des fiches à partir d'un tableau

Bonsoir,

Après étude approfondie ;) je peux dire que je me suis mal exprimé... (même si effectivement ça fonctionne) ce que je désire obtenir est en fait l'inverse.

je vous explique la procédure de saisie se fait via formulaire qui incrémente le tableau principal (TAB Travail), ensuite je souhaite que toutes les données soient reventilées dans des fiches individuelles... et effectivement en word ce serait peut être mieux... mais bon...


Du coup les deux propositions ne me vont pas...(même si elles fonctionnent)...

@+ et merci de votre aide.

Ça donne vraiment envie de donner un coup de main !


ROGER2327
#2285
 

PièceJointe

XLDnaute Nouveau
Re : Macro pour creer des fiches à partir d'un tableau

bonjour (et particulièrement à toi Roger2327)

je ne comprends pas ta réaction mais bon...il n'y avait aucune malice ni désobligeance dans mon message... Nous nous sommes mal compris et comme je l'avoue je ne capte pas trop les lignes de code j'ai besoin de temps pour lire et intégrer ce qui est proposé...

Qu'est ce que j'ai raté ?

@+
 

PièceJointe

XLDnaute Nouveau
Re : Macro pour creer des fiches à partir d'un tableau

Bonjour, je remonte le topic bien lancé, (j'avais appris des choses) stoppé net en raison d'une incompréhension toujours sans réponse d'ailleurs...

pour mémoire je cherche à faire une macro qui reventile les données des lignes d'un tableau dans autant de fiches individurelles...

Merci d'avance...
 

kjin

XLDnaute Barbatruc
Re : Macro pour creer des fiches à partir d'un tableau

Bonsoir,
A adapter
Attention à la limitation du nombre d'onglet
En outre, s'il y en a beaucoup, ca risque d'être ingérable
Mais comme à priori le lien que je t'ai indiqué ne te convient pas...
A+
kjin
 

Pièces jointes

  • PJ.zip
    12.1 KB · Affichages: 651
  • PJ.zip
    12.1 KB · Affichages: 579
  • PJ.zip
    12.1 KB · Affichages: 630

ROGER2327

XLDnaute Barbatruc
Re : Macro pour creer des fiches à partir d'un tableau

Re...
Bonjour, je remonte le topic bien lancé, (j'avais appris des choses) stoppé net en raison d'une incompréhension toujours sans réponse d'ailleurs...

pour mémoire je cherche à faire une macro qui reventile les données des lignes d'un tableau dans autant de fiches individurelles...

Merci d'avance...
Je suppose que cette remarque me concerne. J'y réponds par un message privé.​
ROGER2327
#2343
 

PièceJointe

XLDnaute Nouveau
Re : Macro pour creer des fiches à partir d'un tableau

Bonjour Kjin,

Fantastique ! c'est exactement ce que je cherche... je regarde le code et j'adapte !

Je vais également voir pour éviter l'écueil de la multiplication des onglets en créant des classeurs par "experts"...

Un grand merci à tous !
 

Discussions similaires

Réponses
18
Affichages
505

Statistiques des forums

Discussions
311 724
Messages
2 081 936
Membres
101 844
dernier inscrit
pktla