Microsoft 365 Publipostage avec Excel

polog57

XLDnaute Junior
Bonjour,

Je voudrais savoir s'il est possible de réaliser un publipostage entre 2 fichiers Excel.
Je suis capable de le faire à partir d'un fichier Word qui va chercher les données dans un fichier Excel mais je ne suis pas sûr que cela fonctionne uniquement sur Excel.

Notre secrétaire à un fichier Excel prédéfini pour des ordres de mission et elle doit rentrer les données professeur par professeur, ce qui prend beaucoup de temps.
Nous avons une base de données que nous récoltons via Microsoft Forms et il faut ventiler les informations des lignes qui correspondent à chaque personne dans une feuille différente.
Ou doit-on passer par rechercheV en créant des liens entre classeurs?
Je sais aussi qu'il a possibilité de récupérer les données correspondant à chaque ligne en incrémentant le numéro de ligne dans la feuille cible, mais j'avoue ne plus me souvenir de la formule.
Je vous joins les 2 formulaires anonymisés pour vous donner une idée de ce que l'on veut.
Merci beaucoup pour votre aide.
Paul
 

Pièces jointes

  • Form Anonyme.xlsx
    14.3 KB · Affichages: 7
  • OM Anonyme.xls
    67 KB · Affichages: 7

polog57

XLDnaute Junior
Bonjour à tous

@polog57

Avec ce que j'ai compris je te propose ce fichier

Merci de ton retour
Merci beaucoup pour votre aide et le temps passé. Cela marche.
Concernant Excel, je trouverais cela pratique que le programme offre la possibilité d'effectuer une édition de formulaires remplis en un seul document (comme cela est possible avec un document publipostage Word) pour éviter de devoir les imprimer un par un.
Lorsque la liste ne contient que 10-20 noms, ce n'est pas un trop gros inconvénient mais lorsque le nombre de documents à imprimer dépasse la centaine, cela demande plus de temps.
Cordialement
Paul
 

polog57

XLDnaute Junior
Bonjour à tous,

Un essai via power query et recherchev

JHA
Merci beaucoup pour votre aide et le temps passé. Cela marche.
Concernant Excel, je trouverais cela pratique que le programme offre la possibilité d'effectuer une édition de formulaires remplis en un seul document (comme cela est possible avec un document publipostage Word) pour éviter de devoir les imprimer un par un.
Lorsque la liste ne contient que 10-20 noms, ce n'est pas un trop gros inconvénient mais lorsque le nombre de documents à imprimer dépasse la centaine, cela demande plus de temps.
Cordialement
Paul
 

Phil69970

XLDnaute Barbatruc
Bonjour à tous

@polog57

Avec une macro (code VBA) excel sait faire cela aussi mais il faut que tu acceptes les macros quand tu ouvres le fichier excel .
Concernant Excel, je trouverais cela pratique que le programme offre la possibilité d'effectuer une édition de formulaires remplis en un seul document (comme cela est possible avec un document publipostage Word) pour éviter de devoir les imprimer un par un.
Mais il manque des infos il me semble pour avoir tous les champs remplis donc si tu nous donnais les infos manquantes (ou bien lesquelles prendre) excel pourrait le faire
 

Sequoyah

XLDnaute Nouveau
Bonjour le fil et le forum,

voici un fichier exemple, j'ai inséré uniquement les colonnes faisant référence au nom et prénom et au grade, pour les autres colonnes il suffit d'adapter la formule avec la colonne source

=RECHERCHEV(J5;Table1;4;FAUX)
Ci-dessous le code

VB:
Sub PrintOrdreM()
'https://excel-downloads.com/threads/publipostage-avec-excel.20084597/

Dim first As Variant
Dim r As Range, c As Range, inputRange As Range

    ' Location of DataValidation cell
    Set r = Worksheets("OM 2022 2023").Range("J5")
    ' Get DataValidation values
    Set inputRange = Evaluate(r.Validation.Formula1)

    Application.ScreenUpdating = False

    ' Loop through DataValidation list
    For Each c In inputRange
        If first = "" Then first = c.Value
        If c <> "" Then
            r.Value = c.Value
            Worksheets("OM 2022 2023").PrintOut
        End If
    Next c

    ' Reset
    r = first

    Application.ScreenUpdating = True

End Sub

Cordialement
 

Pièces jointes

  • test.xlsm
    34.8 KB · Affichages: 3

polog57

XLDnaute Junior
Bonjour le fil et le forum,

voici un fichier exemple, j'ai inséré uniquement les colonnes faisant référence au nom et prénom et au grade, pour les autres colonnes il suffit d'adapter la formule avec la colonne source

=RECHERCHEV(J5;Table1;4;FAUX)
Ci-dessous le code

VB:
Sub PrintOrdreM()
'https://excel-downloads.com/threads/publipostage-avec-excel.20084597/

Dim first As Variant
Dim r As Range, c As Range, inputRange As Range

    ' Location of DataValidation cell
    Set r = Worksheets("OM 2022 2023").Range("J5")
    ' Get DataValidation values
    Set inputRange = Evaluate(r.Validation.Formula1)

    Application.ScreenUpdating = False

    ' Loop through DataValidation list
    For Each c In inputRange
        If first = "" Then first = c.Value
        If c <> "" Then
            r.Value = c.Value
            Worksheets("OM 2022 2023").PrintOut
        End If
    Next c

    ' Reset
    r = first

    Application.ScreenUpdating = True

End Sub

Cordialement
Merci, je me disais bien que la solution existait en passant par VBA mais là je ne suis pas assez compétent .
Ce que je pense comprendre est que
"For Each c In inputRange
If first = "" Then first = c.Value
If c <> "" Then
r.Value = c.Value
Worksheets("OM 2022 2023").PrintOut
End If"
donne l'ordre vérifier si les cellules dans chaque colonne contiennent des données et si oui "imprimer"
Je suppose que "c" signifie Column?
Ensuite
" r = first "indique le traitement colonne 1 (Que signifie "r"?)
Faut-il ensuite ajouter le code "r=second" "r=third" ...pour poursuivre le processus? Où cela lance t-il la boucle automatiquement jusqu'au moment ou la colonne est vide?

Je me pose aussi la question de pourquoi traiter le fichier colonne par colonne et non ligne par ligne?
Le ligne à ligne permettrait de pouvoir imprimer par exemple de la ligne 5 à 8 en ignorant les autres, comme la fonction dans publipostage de Word "Modifier des documents individuels..." qui permet de produire des documents ciblés sur les lignes du tableau Excel lié, et ensuite de les imprimer en bloc.
En fait, comme pour Word, je pensais que cette fonction pouvait exister pour Excel.

Désolé pour toutes ces questions de novices.
Merci pour votre temps et votre coup de main.

Cordialement
Paul
 

polog57

XLDnaute Junior
Bonjour à tous

@polog57

Avec une macro (code VBA) excel sait faire cela aussi mais il faut que tu acceptes les macros quand tu ouvres le fichier excel .

Mais il manque des infos il me semble pour avoir tous les champs remplis donc si tu nous donnais les infos manquantes (ou bien lesquelles prendre) excel pourrait le faire
Merci. (Voir réponse suivante)
Cordialement
Paul
 

Sequoyah

XLDnaute Nouveau
Bonjour à tous, merci à Paul pour ton retour. Ci-dessous le code mis à jour pour pouvoir choisir la ligne initiale et finale à imprimer. Une petite explication

la macro permet d'imprimer une feuille de calcul pour une sélection de valeurs dans une liste déroulante (validation de données - cellule J5 de la feuille OM 2022 2023).
1. Demande de l'utilisateur : La macro demande à l'utilisateur d'entrer le numéro du premier et du dernier enregistrement à imprimer à l'aide de deux boîtes de dialogue (InputBox).
2. Vérification des annulations : Si l'utilisateur appuie sur "Annuler" dans l'une des boîtes de dialogue, la macro s'arrête.
3. Boucle sur la sélection : La macro parcourt les valeurs de la liste déroulante correspondant aux numéros spécifiés par l'utilisateur (du premier au dernier enregistrement).
4. Impression des feuilles : Pour chaque valeur sélectionnée, la macro met à jour la cellule avec la valeur actuelle et imprime la feuille.
5. Réinitialisation : Après avoir terminé l'impression, la macro réinitialise la cellule avec la première valeur de la liste.
VB:
Sub PrintOrdreM()
'https://excel-downloads.com/threads/publipostage-avec-excel.20084597/

    Dim first As Variant
    Dim r As Range, c As Range, inputRange As Range
    Dim i As Long, startRecord As Variant, endRecord As Variant

    ' Location of DataValidation cell
    Set r = Worksheets("OM 2022 2023").Range("J5")
    ' Get DataValidation values
    Set inputRange = Evaluate(r.Validation.Formula1)
   
     Application.ScreenUpdating = False

    startRecord = Application.InputBox("première ligne à imprimer:", Type:=1)
   
    ' Exit macro if Cancel is pressed
    If startRecord = False Then Exit Sub

    endRecord = Application.InputBox("dernière ligne à imprimer:", Type:=1)

    ' Exit macro if Cancel is pressed
    If endRecord = False Then Exit Sub
 
    ' Loop through DataValidation list
    For i = startRecord To endRecord
        If first = "" Then first = inputRange(i).Value
        If inputRange(i) <> "" Then
            r.Value = inputRange(i).Value
            Worksheets("OM 2022 2023").PrintOut
        End If
    Next i

    ' Reset
    r.Value = first

    Application.ScreenUpdating = True

End Sub
Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
314 738
Messages
2 112 335
Membres
111 512
dernier inscrit
Gilles727