XL 2019 Ajouter des colonnes dans plusieurs feuilles avec les données en dynamique (Mise en page et données)

ryfalcon

XLDnaute Nouveau
Bonjour à tous,

Je vous expose les faits.

J'ai un fichier Excel utiliser pour la saisie des données et j'utilise plusieurs feuilles.

J'ai créer un bouton sur chaque "Feuille OBJECTIF". Le bouton (+) permet d'ajouter une colonne à la suite de la précédente avec le codes et la mise en page identique. ça c'est ok!

Il y a un repère dans la colonne D2 "IXXXI" afin de placer la colonne à insérer avant ce repère. ça c'est ok!

Puis les infos de la "Feuille OBJECTIF 1" sont stockez dans les colonnes [AE à AZ] de la "feuille Listing" pour un export publipostage, ça c'est ok!

Il y a un repère dans la colonne BA "IAAAI" afin de placer les colonnes à insérer avant ce repère. ça c'est ok!

Je souhaiterai que lorsque j'appui sur le Bouton + de la "feuille OBJECTIF 1", il ajoute aussi dans la "feuille Listing" après la colonne [AZ] les colonnes identiques de [AE à AZ] pour y stocker les données de la nouvelle colonne ajouter dans la "feuille OBJECTIF 1".

Merci beaucoup pour votre aide.
 

Pièces jointes

  • Formulaire PPA 2023 V6.-forum.xlsm
    134.1 KB · Affichages: 3

ryfalcon

XLDnaute Nouveau
Dans la feuille "Listing" il est plus simple d'ajouter une 1ère ligne avec en AE1 le nom de la feuille "Objectif".

Mis entre apostrophes pour que ce nom soit traité par la macro.
J'ai autre soucis en fait le listing doit répertorié toutes les feuilles OBJECTIF là, le listing n'affiche que que les objectifs par rapport à l'input box. j'aurai souhaité qu'il ajoute à la suite toutes les feuilles.
Encore désolé 🙏
 

job75

XLDnaute Barbatruc
Plutôt qu'un publipostage il vaut mieux archiver les données de la feuille "Listing" dans "Archives".

La macro affectée au bouton "Archiver" :
VB:
Sub Archiver()
If MsgBox("Archiver les données de " & [AE1] & " ?", vbQuestion + vbYesNo) = vbNo Then Exit Sub
Dim ncol%, num&, i As Variant
ncol = Cells(2, Columns.Count).End(xlToLeft).Column
With Sheets("Archives")
    num = Val(Replace(Replace([AE1], "'", ""), "Objectif ", ""))
    i = Application.Match(num, .Columns(1), 0)
    If IsNumeric(i) Then .Rows(i).Resize(3).Delete
    .Rows("1:3").Insert 'insère 3 lignes
    Rows(1).Resize(3, ncol).Copy .Cells(1, 2) 'copie tout
    .Cells(1, 2).Resize(3, ncol) = Rows(1).Resize(3, ncol).Value 'copie les valeurs
    .Cells(1).Resize(3) = num 'repère en colonne A
    .UsedRange.Sort .Columns(1), xlAscending, Header:=xlNo 'tri sur la colonne A
    .Columns.ColumnWidth = 2
    .Columns.AutoFit 'ajustement largeurs
    .Columns(1).Hidden = True 'masque la colonne A
End With
End Sub
 

Pièces jointes

  • Formulaire PPA 2023 V6.-forum.xlsm
    142.3 KB · Affichages: 4

ryfalcon

XLDnaute Nouveau
Plutôt qu'un publipostage il vaut mieux archiver les données de la feuille "Listing" dans "Archives".

La macro affectée au bouton "Archiver" :
VB:
Sub Archiver()
If MsgBox("Archiver les données de " & [AE1] & " ?", vbQuestion + vbYesNo) = vbNo Then Exit Sub
Dim ncol%, num&, i As Variant
ncol = Cells(2, Columns.Count).End(xlToLeft).Column
With Sheets("Archives")
    num = Val(Replace(Replace([AE1], "'", ""), "Objectif ", ""))
    i = Application.Match(num, .Columns(1), 0)
    If IsNumeric(i) Then .Rows(i).Resize(3).Delete
    .Rows("1:3").Insert 'insère 3 lignes
    Rows(1).Resize(3, ncol).Copy .Cells(1, 2) 'copie tout
    .Cells(1, 2).Resize(3, ncol) = Rows(1).Resize(3, ncol).Value 'copie les valeurs
    .Cells(1).Resize(3) = num 'repère en colonne A
    .UsedRange.Sort .Columns(1), xlAscending, Header:=xlNo 'tri sur la colonne A
    .Columns.ColumnWidth = 2
    .Columns.AutoFit 'ajustement largeurs
    .Columns(1).Hidden = True 'masque la colonne A
End With
End Sub
Vraiment désolé mais je ne comprend pas comment organiser la manipulation.
Les utilisateur de ce fichiers sont encore plus newbee que moi.

On remplis les objectifs, on ajoute des colonnes dans les OBJECTIFS de 1-5, si nécessaire.
on clique sur un bouton pour envoyé les données vers un word.

ça c'est le process globale.

limite quand on clique sur listing il récupérer toutes les valeurs des feuilles OBJECTIF de 1 à 5 et les ajoute dans le tableau listing à la suite en gardant les objectifs regroupé.

J'ai ajouter des colonne avant la requête listing, car ils ont été effacé après les colonnes ajouté mais le code ne fonctionne plus, j'ai corrigé les plage mais rien à faire. Je ne vois pas ou est l'erreur?
Les objectifs doivent s'affichées à partir de la colonne CM.

Ci joint le fichier avec le bon classement des colonnes afin de garder toutes les colonnes dynamique à la fin

Encore merci pour votre soutien
 

Pièces jointes

  • Formulaire PPA 2023 V6.-forum-VERS1432.xlsm
    144.7 KB · Affichages: 2

ryfalcon

XLDnaute Nouveau
Si vous testez correctement mon fichier vous devez comprendre ma méthode.

ok j'ai bien vérifier, cependant il faut dans "listing" sélectionnée chaque objectif pour récupérer les valeurs de chaque feuilles et ensuite l'affiché.
Puis cliquez sur ARCHIVER.

comment faire pour qu'il exécute l'ajout de toutes les OBJECTIFS 1-5 en une seul fois et l'affiche dans le tableau à la suite ?
puis on clique sur archiver pour tout archiver. ?
Merci
 

job75

XLDnaute Barbatruc
comment faire pour qu'il exécute l'ajout de toutes les OBJECTIFS 1-5 en une seul fois et l'affiche dans le tableau à la suite ?
Alors plus besoin d'archiver.

Dans la feuille "Listing" il faut créer 3 lignes pour chaque feuille "Objectif" et cette macro :
VB:
Private Sub Worksheet_Activate()
Dim nombre%, n%, ncol%, i As Variant, P As Range
nombre = 5 'nombre de feuilles Objectif, à adapter
Application.ScreenUpdating = False
For n = 1 To nombre
    ncol = Sheets("Objectif " & n).Cells(2, Columns.Count).End(xlToLeft).Column - 4 'nombre de nouvelles colonnes
    i = Application.Match("Objectif " & n, Columns("AE"), 0)
    If IsError(i) Then
        MsgBox "Il faut créer les 3 lignes pour la feuille 'Objectif " & n & "' !", 48
    Else
        Range("BA" & i).Resize(3, Columns.Count - Columns("AZ").Column).Delete xlToLeft 'RAZ
        Set P = Range("AE" & i & ":AZ" & i + 2) '1ère plage copiée
        For i = 1 To ncol
            P.Copy P.Offset(, P.Columns.Count) 'copier-coller
            Set P = P.Offset(, P.Columns.Count)
            P.Replace "!*$", "!" & Split(Columns(i + 3).Address(0, 0), ":")(0) & "$", xlPart 'MAJ des formules
        Next i
    End If
Next n
Columns.ColumnWidth = 2
Columns.AutoFit 'ajustement largeurs
End Sub
Elle se déclenche quand on active la feuille.

Edit : ce qui me gêne avec cette méthode c'est que les plages des colonnes A à AC se répètent de manière identique puisque ce sont les mêmes formules. Avec l'archivage du post #17 elles peuvent être différentes.
 

Pièces jointes

  • Formulaire PPA 2023 V6.-forum.xlsm
    140.3 KB · Affichages: 5
Dernière édition:

ryfalcon

XLDnaute Nouveau
Alors plus besoin d'archiver.

Dans la feuille "Listing" il faut créer 3 lignes pour chaque feuille "Objectif" et cette macro :
VB:
Private Sub Worksheet_Activate()
Dim nombre%, n%, ncol%, i As Variant, P As Range
nombre = 5 'nombre de feuilles Objectif, à adapter
Application.ScreenUpdating = False
For n = 1 To nombre
    ncol = Sheets("Objectif " & n).Cells(2, Columns.Count).End(xlToLeft).Column - 4 'nombre de nouvelles colonnes
    i = Application.Match("Objectif " & n, Columns("AE"), 0)
    If IsError(i) Then
        MsgBox "Il faut créer les 3 lignes pour la feuille 'Objectif " & n & "' !", 48
    Else
        Range("BA" & i).Resize(3, Columns.Count - Columns("AZ").Column).Delete xlToLeft 'RAZ
        Set P = Range("AE" & i & ":AZ" & i + 2) '1ère plage copiée
        For i = 1 To ncol
            P.Copy P.Offset(, P.Columns.Count) 'copier-coller
            Set P = P.Offset(, P.Columns.Count)
            P.Replace "!*$", "!" & Split(Columns(i + 3).Address(0, 0), ":")(0) & "$", xlPart 'MAJ des formules
        Next i
    End If
Next n
Columns.ColumnWidth = 2
Columns.AutoFit 'ajustement largeurs
End Sub
Elle se déclenche quand on active la feuille.

Edit : ce qui me gêne avec cette méthode c'est que les plages des colonnes A à AC se répètent de manière identique puisque ce sont les mêmes formules. Avec l'archivage du post #17 elles peuvent être différentes.

Merci beau coup pour tout le travail. Oui je comprend pour la répétition, mais c'est pas utile, car c'est simplement d'affiché les information des différents tableaux pour ensuite tout envoyé vers un fichier WORD, qui fera la mise en page.

Un grand merci
Il me reste à récupérer ces information pour les afficher dans un fichier word modèle.
Un grand merci
je vous ferai un retour sur les 2 fichiers.
Merci
 

ryfalcon

XLDnaute Nouveau
Bonjour désolé de vous déranger encore.
J'ai trop de problèmes pour compiler les infos sur Word.
J'ai encore besoin de vous.

J'ai rajouter toutes les colonnes statiques qui ont été supprimer afin de laisser la fin du listing pour les OBJECTIFS dynamiques (avant la colonne [CT] )
-La colonne CT va contenir le code OBJ (et le numéro de la feuille) ça c'est OK

en fait j'aurai besoin que toutes les colonnes de chaque objectifs apparaissent à la suite comme dans un tableau
tous les objectif 1, puis les 2, etc... à la suite afin de pouvoir l'exporter vers word.
Encore merci pour votre aide et navré de vous déranger......
 

ryfalcon

XLDnaute Nouveau
Bonjour ryfalcon,

Je ne comprends pas ce que vous faites ni l'intérêt d'un fichier Word.

A+
je m'explique... nous devons remplir différentes feuilles en équipe et fournir à la personne un document uniquement au format word ou pdf avec tous les éléments des différentes feuilles. Je suis parti sur l'affichage EXCEL car il est plus facie à mettre en visuel qu'un document Word. (on a essayé et tout est trop linéaire et les collègues, ne peuvent pas remplir plusieurs sous objectif sur le même écran. Le but étant de formaliser le document word avec toujours les mêmes menus déroulant, etc... sauf les infos personnelles qui seront à saisir dans Excel.

Je n'ai trouvé que cette méthode. Remplir les données sous excel et publipostage vers Word afin d'avoir un document formater en texte et non en tableau.

Maintenant si vous avez une méthode pour créer un document word ou pdf reprenant toutes les infos et le format de Word. Tant mieux.
J'espère avoir été plus clair sur le but du fichier.
 

Discussions similaires

Statistiques des forums

Discussions
313 243
Messages
2 096 509
Membres
106 644
dernier inscrit
7frd5