XL 2019 Sommaire et intégration de données provenant des feuilles

paulng

XLDnaute Nouveau
Bonjour,

J'ai repris à mon compte un fichier provenant du site (lien), je remercie Mayday et vgendron.

L'idée étant de créer un sommaire automatique en reprenant quelques informations provenant des feuilles du classeur.

J'aimerais bien pouvoir choisir dans la création du sommaire :

- du nombre de colonnes et d'informations que je choisis de mettre dans le sommaire
- que les informations soient reprises pour chaque ligne du sommaire (à la base cette option focntionnait, mais je crois bien que j'ai commis une erreur, et en reprnant le fichier original, cela ne fonctionne plus ...??)
Je maîtrise mal, pour le moment le langage VBA.

Si quelqu'un peut m'aider...

Cordialement,
Paul
 

Pièces jointes

  • sommaire-aide.xlsm
    46.6 KB · Affichages: 10

vgendron

XLDnaute Barbatruc
Hello

pour le nombre de colonne, il suffit de demander à l'utilisateur avec un inputbox
et ensuite tu utilises la réponse pour redéfinir (resize) la table

VB:
Sub Sommairefiches()

Application.ScreenUpdating = False

NbCol = Application.InputBox("Combien de colonnes souhaitez vous?")
With Sheets("Sommaire")
   'commencer par effacer le sommaire
   .ListObjects(1).DataBodyRange.Clear
   .ListObjects(1).Resize Range("A3").Resize(2, NbCol)
   
    For Each ws In ActiveWorkbook.Sheets 'pour chaque feuille du classeur
        If ws.Name <> "Sommaire" And ws.Name <> "Outils" And ws.Name <> "Fiche Vierge" Then
            .Range("A" & .Rows.Count).End(xlUp).Offset(IIf(.Range("A4") <> "", 1, 0), 0) = ws.Name 'on colle le nom en colonne A
        End If
    Next ws
    Fin = .Range("A" & .Rows.Count).End(xlUp).Row 'dernière ligne de la feuille
    .Range("B" & 4).Formula = "=INDIRECT(""'"" &A4 &""'!B5"")"
    .Range("B" & 4).NumberFormat = "m/d/yyyy"
    .Range("C" & 4).Formula = "=INDIRECT(""'"" &A4 &""'!B6"")"
    .Range("D" & 4).Formula = "=INDIRECT(""'"" &A4 &""'!B7"")"
    .Range("E" & 4).Formula = "=INDIRECT(""'"" &A4 &""'!B10"")"
    
End With

Application.ScreenUpdating = True
End Sub
 

vgendron

XLDnaute Barbatruc
avec le code précédent, normalement les formules sont recopiées automatiquement, mais le format date n'est pas appliqué sur toute la colonne
voici qui devrait rectifier
Vérifie quand meme le format que tu souhaites:
tu avais écrit: m/d/yyyy
j'ai mis: dd/mm/yyyy (qui semble plus correspondre aux infos saisies dans les fiches)

VB:
Sub Sommairefiches()

Application.ScreenUpdating = False

NbCol = Application.InputBox("Combien de colonnes souhaitez vous?")
With Sheets("Sommaire")
   'commencer par effacer le sommaire
   .ListObjects(1).DataBodyRange.Clear
   .ListObjects(1).Resize Range("A3").Resize(2, NbCol)
   
    For Each ws In ActiveWorkbook.Sheets 'pour chaque feuille du classeur
        If ws.Name <> "Sommaire" And ws.Name <> "Outils" And ws.Name <> "Fiche Vierge" Then
            .Range("A" & .Rows.Count).End(xlUp).Offset(IIf(.Range("A4") <> "", 1, 0), 0) = ws.Name 'on colle le nom en colonne A
        End If
    Next ws
    Fin = .Range("A" & .Rows.Count).End(xlUp).Row 'dernière ligne de la feuille
    .Range("B" & 4).Formula = "=INDIRECT(""'"" &A4 &""'!B5"")"
    .ListObjects(1).ListColumns(2).DataBodyRange.NumberFormat = "dd/mm/yyyy"
    .Range("C" & 4).Formula = "=INDIRECT(""'"" &A4 &""'!B6"")"
    .Range("D" & 4).Formula = "=INDIRECT(""'"" &A4 &""'!B7"")"
    .Range("E" & 4).Formula = "=INDIRECT(""'"" &A4 &""'!B10"")"
    
End With

Application.ScreenUpdating = True
End Sub
 

paulng

XLDnaute Nouveau
avec le code précédent, normalement les formules sont recopiées automatiquement, mais le format date n'est pas appliqué sur toute la colonne
voici qui devrait rectifier
Vérifie quand meme le format que tu souhaites:
tu avais écrit: m/d/yyyy
j'ai mis: dd/mm/yyyy (qui semble plus correspondre aux infos saisies dans les fiches)

VB:
Sub Sommairefiches()

Application.ScreenUpdating = False

NbCol = Application.InputBox("Combien de colonnes souhaitez vous?")
With Sheets("Sommaire")
   'commencer par effacer le sommaire
   .ListObjects(1).DataBodyRange.Clear
   .ListObjects(1).Resize Range("A3").Resize(2, NbCol)
  
    For Each ws In ActiveWorkbook.Sheets 'pour chaque feuille du classeur
        If ws.Name <> "Sommaire" And ws.Name <> "Outils" And ws.Name <> "Fiche Vierge" Then
            .Range("A" & .Rows.Count).End(xlUp).Offset(IIf(.Range("A4") <> "", 1, 0), 0) = ws.Name 'on colle le nom en colonne A
        End If
    Next ws
    Fin = .Range("A" & .Rows.Count).End(xlUp).Row 'dernière ligne de la feuille
    .Range("B" & 4).Formula = "=INDIRECT(""'"" &A4 &""'!B5"")"
    .ListObjects(1).ListColumns(2).DataBodyRange.NumberFormat = "dd/mm/yyyy"
    .Range("C" & 4).Formula = "=INDIRECT(""'"" &A4 &""'!B6"")"
    .Range("D" & 4).Formula = "=INDIRECT(""'"" &A4 &""'!B7"")"
    .Range("E" & 4).Formula = "=INDIRECT(""'"" &A4 &""'!B10"")"
   
End With

Application.ScreenUpdating = True
End Sub
Merci beaucoup !
Je regarde cela
 

paulng

XLDnaute Nouveau
Merci beaucoup !
Je regarde cela
avec le code précédent, normalement les formules sont recopiées automatiquement, mais le format date n'est pas appliqué sur toute la colonne
voici qui devrait rectifier
Vérifie quand meme le format que tu souhaites:
tu avais écrit: m/d/yyyy
j'ai mis: dd/mm/yyyy (qui semble plus correspondre aux infos saisies dans les fiches)

VB:
Sub Sommairefiches()

Application.ScreenUpdating = False

NbCol = Application.InputBox("Combien de colonnes souhaitez vous?")
With Sheets("Sommaire")
   'commencer par effacer le sommaire
   .ListObjects(1).DataBodyRange.Clear
   .ListObjects(1).Resize Range("A3").Resize(2, NbCol)
  
    For Each ws In ActiveWorkbook.Sheets 'pour chaque feuille du classeur
        If ws.Name <> "Sommaire" And ws.Name <> "Outils" And ws.Name <> "Fiche Vierge" Then
            .Range("A" & .Rows.Count).End(xlUp).Offset(IIf(.Range("A4") <> "", 1, 0), 0) = ws.Name 'on colle le nom en colonne A
        End If
    Next ws
    Fin = .Range("A" & .Rows.Count).End(xlUp).Row 'dernière ligne de la feuille
    .Range("B" & 4).Formula = "=INDIRECT(""'"" &A4 &""'!B5"")"
    .ListObjects(1).ListColumns(2).DataBodyRange.NumberFormat = "dd/mm/yyyy"
    .Range("C" & 4).Formula = "=INDIRECT(""'"" &A4 &""'!B6"")"
    .Range("D" & 4).Formula = "=INDIRECT(""'"" &A4 &""'!B7"")"
    .Range("E" & 4).Formula = "=INDIRECT(""'"" &A4 &""'!B10"")"
   
End With

Application.ScreenUpdating = True
End Sub
Lorsque j'exécute la macro,
j'obtiens un message d'erreur qui indique que l'indice n'appartient pas la sélection
==> .ListObjects(1).ListColumns(2).DataBodyRange.NumberFormat = "dd/mm/yyyy"

La formule INDIRECT ne se recopie pas à l'ensemble des clients...
 

vgendron

XLDnaute Barbatruc
D'accord,
effectivement en tapant 2 colonnes le message n'apparait pas... au temps pour moi.

Par contre je rencontre toujours le même problème avec l'absence de la formule INDIRECT sur les autres lignes

Merci pour ta disponibilité
Je pense qu'il s'agit d'un problème de "colonne calculée"

il y a une option qui permet d'empecher la recopie automatique des formules
il doit donc etre possible de remettre l'option
sur la première cellule qui contient la formule, tu as sans doute une icone (un eclair je crois) ou autre pour cliquer dessus et remettre l'option, un peu comme quand il y a une erreur, et que excel te propose de corriger ou ignorer l'erreur..
 

paulng

XLDnaute Nouveau
Je pense qu'il s'agit d'un problème de "colonne calculée"

il y a une option qui permet d'empecher la recopie automatique des formules
il doit donc etre possible de remettre l'option
sur la première cellule qui contient la formule, tu as sans doute une icone (un eclair je crois) ou autre pour cliquer dessus et remettre l'option, un peu comme quand il y a une erreur, et que excel te propose de corriger ou ignorer l'erreur..
Je vois de quoi tu parles.
Mais c'est très curieux, en choisissant par exemple 3 colonnes, la recopie s'effectue sur la deuxième colonne et ni sur la première ni sur la troisième
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @paulng ;), @vgendron ;),

Ma p'tite version.
  • Il n'y a plus de formule dans le sommaire.
  • il n'y a plus de bouton Sommaire. Le sommaire se met à jour à l'ouverture du classeur et quand on sélectionne la feuille "Sommaire".

Deux constantes dans le module11 :

Const lesColonnes = ""b4;b5;b6;b7;b8"
On y place les cellules à afficher dans les colonnes 2, 3, 4, ... du sommaire
Si on ne veut que trois champs (par exemple Date contrat; Audit annuel et Audit programmé) dans le sommaire, alors on indiquera pour la constante : Const lesColonnes = "b5;b7;b8"


Const PasLesFeuilles = "Sommaire;Outils;Fiche vierge"
Les feuilles à ignorer dans le sommaire

Les principales modifications sont dans module11.
On a rajouté quelques lignes de code dans le module de ThisWorlbook et de la feuille Sommaire.
 

Pièces jointes

  • paulng- sommaire- v1.xlsm
    49.7 KB · Affichages: 9

paulng

XLDnaute Nouveau
Bonjour @paulng ;), @vgendron ;),

Ma p'tite version.
  • Il n'y a plus de formule dans le sommaire.
  • il n'y a plus de bouton Sommaire. Le sommaire se met à jour à l'ouverture du classeur et quand on sélectionne la feuille "Sommaire".

Deux constantes dans le module11 :

Const lesColonnes = ""b4;b5;b6;b7;b8"
On y place les cellules à afficher dans les colonnes 2, 3, 4, ... du sommaire
Si on ne veut que trois champs (par exemple Date contrat; Audit annuel et Audit programmé) dans le sommaire, alors on indiquera pour la constante : Const lesColonnes = "b5;b7;b8"


Const PasLesFeuilles = "Sommaire;Outils;Fiche vierge"
Les feuilles à ignorer dans le sommaire

Les principales modifications sont dans module11.
On a rajouté quelques lignes de code dans le module de ThisWorlbook et de la feuille Sommaire.
Merci Mapomme !
 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 335
Membres
102 865
dernier inscrit
FreyaSalander