Macro pour publipostage excel - excel.

patwoman

XLDnaute Nouveau
Bonjour tout le monde,

Je decouvre le monde merveilleux des macros, et je cherche à faire quelque chose.... Evidemment je bloque.

J'ai un fichier excel avec dans un onglet, un tableau avec plein de données.
Dans un deuxieme onglet, le modèle d'un "bon de livraison".

J'aimerais:
- Pour chaque ligne du tableau
- Creer un onglet dans un nouveau fichier
- Avec les infos du bon de livraison correspondant à la ligne en question.

Une espece de publipostage quoi...

Je pense que ca doit pas etre trop compliqué, mais j'avoue que le "For Each" me dépasse encore completement !!!

Merci si vous pouvez m'aider un peu ! :)
 

patwoman

XLDnaute Nouveau
Re : Macro pour publipostage excel - excel.

Hello Staple/JM

Merci pour ta reponse... que je ne comprends pas tout à fait ! :)

J'ai déclaré le tableau via excel, et du coup, dans mon onglet "bon de livraison", je remplis les données variables avec les noms pré-définis.

Mais vu qu'il faudrait un bon de livraison par ligne de tableau, c'est pour celà que j'essaie que "d'un clic", un nouveau fichier se crée avec x onglets, chacun contenant un bon de livraison par ligne...

:)
 

Staple1600

XLDnaute Barbatruc
Re : Macro pour publipostage excel - excel.

Re

Ce que je voulais dire pour être clair

Dans ta première discussion, tu penses à joindre un fichier exemple
(Ce que j'appelle un bon réflexe surtout pour un nouveau membre du forum qui par définition connait mal les us et coutumes du forum)

Et là dans cette seconde discussion, le réflexe est déjà perdu.

D'où mon premier message ici ;)
 

patwoman

XLDnaute Nouveau
Re : Macro pour publipostage excel - excel.

Ah oui, en effet ! :)

Voici donc un exemple simplifié (la macro s'appliquera à un autre tableau, vous verrez qu'ici, pas question de livraison... peu importe).
Dans l'onglet "test bon livraison", j'ai pour le moment 3 données variables :
- Le nom du village (j'imagine qu'il faudra demander à la macro de remplir cette case pour chaque ligne)
- 2 chiffres de pop venant du tableau. Vu que j'y ai mis des formules matricielles, j'ose esperer que ca se mettra donc à jour.

Donc en francais, j'aimerais dire à la macro :
- cree un nouveau fichier.
- Pour chaque ligne, mets à jour le "nom du village", copie (valeurs et format) l'onglet "bon de livraison" et colle le dans le nouveau fichier (en nommant l'onglet par le nom du village s'il te plait mon cher excel).

:)
 

Pièces jointes

  • test publipostage.xlsm
    71.7 KB · Affichages: 65

Staple1600

XLDnaute Barbatruc
Re : Macro pour publipostage excel - excel.

Re

Pour bien comprendre ce tu souhaites, peux-tu, stp, mettre une PJ avec une feuille* "RESULTAT SOUHAITE"
pour une ligne de données
(*donc réalisée manuellement)

Questions:
Il s'agit bien de parcourir ligne à ligne les données de la feuille 1.2 Population en se basant sur les valeurs en colonne C ?
Et dans celle colonne C, il n'y aura jamais de doublons ?
 

patwoman

XLDnaute Nouveau
Re : Macro pour publipostage excel - excel.

Re,

Et voici le resultat attendu par rapport au 1er fichier...
Comme tu le dis, oui, il sagit de parcourir la colonne C et de, ligne par ligne, creer un onglet avec les chiffres de cette lignes, et non, il n'y aura jamais de doublons dans la colonne C
 

Pièces jointes

  • test publipostage resultat attendu.xlsx
    12.9 KB · Affichages: 53

Staple1600

XLDnaute Barbatruc
Re : Macro pour publipostage excel - excel.

Re

Testes cette macro sur ton fichier exemple
(en renommant la feuille idoine en bon livraison au préalable)
NB: Ôtes le If/End If si tu veux toutes les villes (même celles avec des données à zéro)
Test OK sur mon PC avec ton fichier exemple.
Code:
Sub test()
Dim c As Range, f As Worksheet
Set f = Sheets("1.2 Population")
Application.ScreenUpdating = False
For Each c In f.Range("c27:c68")
If Len(f.Cells(c.Row, "M")) > 0 Then
Sheets("bon livraison").Copy after:=Sheets(Sheets.Count)
With ActiveSheet
    .Name = c.Text
    .Range("F12").Value = Mid(c, 5, 9 ^ 9)
    .Range("F13").Value = f.Cells(c.Row, "M").Value
    .Range("F14").Value = f.Cells(c.Row, "U").Value
End With
End If
Next c
End Sub
 

patwoman

XLDnaute Nouveau
Re : Macro pour publipostage excel - excel.

Waouhhhhhhh genial, c'est ca !!!! Merci !!!!!!!!!!!!!!!!!!!!!!!!!!!! :)

J'ai plus qu'à l'adapter :) :)
Un grand grand merci !


Tiens, en passant, une question sur "Set truc =worksheets("")... Je travaille sur plein d'onglet, et du coup j'y fais souvent usage (et je le repete trop souvent).

Est-ce que ce serait pas mieux de le faire dans une sous-procedure genre sub nomWS() et de l'appeler systematiquement au debut de chaque procedure plutot que de repeter la meme chose tout le temps ?
 

Staple1600

XLDnaute Barbatruc
Re : Macro pour publipostage excel - excel.

Re

Tiens, en passant, une question sur "Set truc =worksheets("")... Je travaille sur plein d'onglet, et du coup j'y fais souvent usage (et je le repete trop souvent).
Est-ce que ce serait pas mieux de le faire dans une sous-procedure genre sub nomWS() et de l'appeler systematiquement au debut de chaque procedure plutot que de repeter la meme chose tout le temps ?

Tu préciser davantage et/ou donner un exemple concret, stp ?
Code:
Public f As Worksheet
Function nomWS(Feuille$) As String
Set f = Worksheets(Feuille)
nomWS = f.Name
End Function
Sub CCECIOUPASMAISAKOIBONDANSCEK()
Dim Q$
Q = "bon livraison"
MsgBox nomWS(Q)
End Sub
 

patwoman

XLDnaute Nouveau
Re : Macro pour publipostage excel - excel.

Re,

Ben là je vois que tu "nomme" la feuille pop "f".
Sur mes autres procedures, je nomme aussi les feuilles pour me faciliter la vie.

Mais j'ai l'impression que d'une procedure à l'autre, j'ai besoin de redefinir les noms des feuilles.
Du coup, pas mal de mes procedures commencent par "Set WS11 = Worksheets("1.1 Parametres"); Set WS12("1.2 Pop"), etc...
Je recopie à chaque fois, et je me dis que ca doit pas etre le mieux, parce que si je change un nom d'onglet, j'ai 36 trucs à changer dans le code...

Donc je pensais a creer un sub WSname(), qui definissent d'un coup tout les noms (que des instructions set), et mettre au debut des autres procedures un "call WSname".
Mais j'ai peur qu'en faisant ca, je fatigue excel en lui demandant à chaque fois de nommer tous les onglets (alors que la plupart des procedures n'en utilise que 2-3 à la fois...)

Bref, c'est pas vraiment le plus important, juste pour faire un code plus joli (et plus facile à mettre à jour si besoin), mais ma priorité, c'est deja de faire un code qui fonctionne !

Allez, encore merci !
 

Statistiques des forums

Discussions
312 858
Messages
2 092 876
Membres
105 547
dernier inscrit
Phil Moi