Répétition automatique de tableau/ligne

Bonjour tout le monde,

Nouveau sur le forum et stagiaire dans une entreprise j'ai besoin de quelques conseils pour le développement d'un outil Excel.

Pour faire simple, j'ai besoin de créer une fiche d'état des lieux pour des bâtiments. Chaque bâtiment a sa fiche avec ses caractéristiques.

Globalement la fiche d'état des lieux pour un bâtiment c'est un tableau de 2 colonnes et une dizaine de lignes. Le problème c'est que pour chaque projet, le nombre de bâtiment est différent. Dans l'objectif de faire une feuille Excel assez ergonomique j'aimerais une macro où il me suffit de rentrer le nombre de bâtiment à étudier dans une cellule pour que cela me créer le bon nombre de tableaux sur ma feuille Excel, ni trop ni pas assez.

Oui il y a le copier coller et oui je pourrais faire une feuille Excel par bâtiment, mais l'outil est plus complexe que ca.

J'ai donc bel et bien besoin de la fiche état des lieux de tous mes bâtiments sur une même feuille.

Si vous avez des tutos, lien forum ou autres qui pourraient m'aider à réaliser cela je suis preneur.

Cordialement

Bonjour,

Pourquoi pas une simple MEFC ou macro qui masquerai/afficherai le contenu des cellules ou lignes en fonction du nombre de bâtiments inclus dans le projet ?

Mais avant il nous faudrait une trame de votre feuille (anonymisée) afin d'ajuster la macro au plus près du besoin tel qu'avoir la ligne de départ, le nombre de lignes par bâtiment, le nombre de lignes vierges entre chaque bâtiment etc ...

Sans fichier représentatif, voir une feuille avec la situation avant VS la situation après, peu de chance que vous ayez un retour.

Cdlt,

Bonjour Ergotamine,

tout d'abord merci pour votre réponse.

Le problème avec une macro qui masquerait/afficherait les cellules inutiles ou avec une simple MEFC c'est que je ne suis pas sûr que cela soit très compatible avec les nuances de mes différents projets. Je peux passer d'une étude rapide de 2 ou 3 bâtiments à une étude de 30,40 voir 50 bâtiments. Il faut donc que le fichier soit très modulaire et dû peut que je connais je ne suis pas sûr que cela soit la solution la plus adapter.

Mais peut-être que je me trompe ! je vous ai donc joint un simple fichier Excel faisait office de ce que j'avais en tête. Une simple case où l'on vient saisir le nombre des bâtiments et en dessous un exemple très simplifier de tableau d'état des lieux qui se répéterait N fois pour les N bâtiment.

Merci d'avance pour le temps que vous accorderez à me répondre.

Cordialement

22exemple.xlsx (16.16 Ko)

Bonjour,

Non je pense que vous avez raison. Par contre étonnante de mettre les différents tableaux en colonne en non en ligne. Cependant, avec la configuration actuelle de votre fichier, à inclure dans le module de code de votre feuille 1 :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("E2")) Is Nothing And IsNumeric(Range("E2")) Then
    Application.EnableEvents = False
    Range(Cells(5, 5), Cells(9, Application.Max(5, Cells(Columns.Count, 5).End(xlToLeft).Column))).Clear
    Range("A5:C9").Copy
    For I = 1 To Range("E2")
        Cells(5, 1).Offset(, I * 3).PasteSpecial
        Cells(5, 1).Offset(, I * 3 + 1) = "Bâtiment " & I + 1
    Next I
    Application.CutCopyMode = False
    Application.EnableEvents = True
    Columns.AutoFit
End If
End Sub

Ainsi, dès lorsque que vous modifiez une valeur en E2, le nombre de table s'adapter automatiquement.

Cdlt,

Bonjour Ergotamine,

Tout d'abord merci beaucoup pour votre aide !

Vis-à-vis du code que vous m'avait fourni j'arrive bien à le faire marcher pas de problème.

J'aurais cependant 2 petites requêtes à vous demander:

- Je suis assez nul en code, pourriez-vous me faire des commentaires afin de mieux comprendre ce que vous faite à chaque ligne ? De plus vous avez raison, travailler en colonne est une erreur de ma part. Les commentaires m'aideront à passer de colonne en ligne.

- Enfin la valeur saisie correspond au nombre de tableau à ajouter et non pas au nombre de tableau en tout. En gros il y a toujours un tableau trop. Comment faire pour le supprimer ?

Encore merci,

Cdlt

Bonjour,

Je me suis apperçu d'une petite coquille dans mon code sur le nettoyage des plages où j'ai inversé ligne et colonne. J'ai corrigé le tableau+1 et ai commenté le code :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim I As Byte
If Not Application.Intersect(Target, Range("E2")) Is Nothing And IsNumeric(Range("E2")) Then 'Si la valeur en E2 est numérique et seule la valeur change est E2 alors
    Application.EnableEvents = False 'On désactive les procédures évenementielles (évite boucle infinie)
    Range(Cells(5, 5), Cells(9, Application.Max(5, Cells(5, Columns.Count).End(xlToLeft).Column + 1))).Clear 'On nettoie la plage L5C5:L9CMAX où CMAX est la dernière colonne pleine de la ligne 5 + 1
    Range("A5:C9").Copy 'On copie la plage A5:C9
    For I = 1 To Range("E2") - 1 'Pour I = 1 à la valeur de E2-1
        Cells(5, 1).Offset(, I * 3).PasteSpecial 'On colle la plage à partir de la cellule de la cellule L5C1 décalée de 3*I vers la droite
        Cells(5, 1).Offset(, I * 3 + 1) = "Bâtiment " & I + 1 'On inscrit le bâtiment dans la cellule L5C1 décalée de 3*I+1 vers la droite
    Next I 'On boucle sur le I suivant
    Application.CutCopyMode = False 'On vide le presse papier
    Application.EnableEvents = True 'On réactive les procédures évenementielles (si E2 rechange)
    Columns.AutoFit 'On ajuste la largeur des colonnes
End If
End Sub

Et comme en ligne c'est plus simple à coder pour moi (l'habitude je pense ..) :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim I As Byte
If Not Application.Intersect(Target, Range("E2")) Is Nothing And IsNumeric(Range("E2")) Then 'Si la valeur en E2 est numérique et seule la valeur change est E2 alors
    Application.EnableEvents = False 'On désactive les procédures évenementielles (évite boucle infinie)
    Range(Cells(10, 2), Cells(Application.Max(Application.Max(10, Cells(Rows.Count, 2).End(xlUp).Row)), 3)).Clear 'On nettoie la plage L10C2:LMAXC3 où LMAX est la dernière ligne pleine de la colonne 2
    Range("B4:C9").Copy 'On copie la plage B4:C9
    For I = 1 To Range("E2") - 1 'Pour I = 1 à la valeur de E2-1
        Cells(4, 2).Offset(I * 6).PasteSpecial 'On colle la plage à partir de la cellule de la cellule L4C2 décalée de 6*I vers le bas
        Cells(4, 2).Offset(I * 6 + 1) = "Bâtiment " & I + 1 'On inscrit le bâtiment dans la cellule L4C2 décalée de 6*I+1 vers le bas
    Next I 'On boucle sur le I suivant
    Application.CutCopyMode = False 'On vide le presse papier
    Application.EnableEvents = True 'On réactive les procédures évenementielles (si E2 rechange)
End If
End Sub

Je vous laisse adapter à votre fichier si besoin.

Cdlt,

Rechercher des sujets similaires à "repetition automatique tableau ligne"