Microsoft 365 VBA - Ajout automatique ligne dans compil

MarionP85

XLDnaute Nouveau
Bonjour à tous,

Alors voilà, je travaille sur un fichier de compilation où j'ai une centaine d'onglets (ces feuilles sont des feuilles copiés d'un enregistrement modèle donc avec la même structure)
Je suis novice en macro mais j'ai envie d'apprendre. J'ai créé un petit module qui me permettra lors de l'ajout d'une feuille de la renommer par la cellule B2 et de supprimer la valeur de la cellule B8. J'aimerais par ailleurs que sur ma 1ere feuille j'ai un récapitulatif des observations.
Donc je voulais vous demander si c'était possible de créer une macro (si possible à la suite de celle déjà créé) que lorsque j'ajoute un onglet je puisse avoir sur ma 1ere feuille une ligne qui s'ajoute avec le N° de la VSC (B2), observation 1 (D5), etc...
Ci joint mon fichier afin de vous donner une idée. N'hésitez pas à me dire si mes explications ne sont pas clairs

En vous souhaitant une très bonne journée.
Bien cordialement,
 

Pièces jointes

  • Compil VSC - conducteur NBT v.xlsm
    111 KB · Affichages: 19
Solution
Bonjour Marion,
Un essai en PJ. A la suite de votre macro :
VB:
' Synthèse infos
Sheets("Resultats").Activate
With Sheets("Resultats")
    Range("A5:V1000").ClearContents         ' Efface matrice synthèse
    Ligne = 5                               ' Première ligne
    For Each F In Worksheets                ' Pour toutes les feuilles
        If F.Name <> "Resultats" Then       ' Hormis résultats
            .Cells(Ligne, "A") = F.Name     ' Range nom de la feuille
            Colonne = 2                     ' Première colonne de rangement : B
            For L = 5 To 11 Step 2          ' Pour les lignes d'observations ( stap car une ligne sur deux, cellules fusionnées )
                For C = 4 To 10             ' Pour outes les...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Marion,
Un essai en PJ. A la suite de votre macro :
VB:
' Synthèse infos
Sheets("Resultats").Activate
With Sheets("Resultats")
    Range("A5:V1000").ClearContents         ' Efface matrice synthèse
    Ligne = 5                               ' Première ligne
    For Each F In Worksheets                ' Pour toutes les feuilles
        If F.Name <> "Resultats" Then       ' Hormis résultats
            .Cells(Ligne, "A") = F.Name     ' Range nom de la feuille
            Colonne = 2                     ' Première colonne de rangement : B
            For L = 5 To 11 Step 2          ' Pour les lignes d'observations ( stap car une ligne sur deux, cellules fusionnées )
                For C = 4 To 10             ' Pour outes les colonnes
                    .Cells(Ligne, Colonne) = Sheets(F.Name).Cells(L, C) ' Copier coller infos
                    Colonne = Colonne + 1   ' On passe à la colonne suivante
                Next C
            Next L
            Ligne = Ligne + 1               ' prochaine ligne de rangement
        End If
    Next F
End With
 

Pièces jointes

  • Compil VSC - conducteur NBT v (1).xlsm
    107.7 KB · Affichages: 3

MarionP85

XLDnaute Nouveau
Bonjour,

Tout d'abord merci beaucoup ! J'ai un petit soucis lors de l’exécution j'ai un message d'erreur : "Erreur d'execution '9' L'indice n'appartient pas à la sélection" sur la ligne Sheets("Resultats").Activate
J'imagine que l'indice correspond à "Resultats" mais je ne vois pas du tout le problème...

Bien cordialement,
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
J'ai oublié un détail : sur votre fichier la feuille s'appelle "Resultats " avec un espace.
Sur mon fichier j'ai supprimé cet espace car c'est source d'erreur.
Donc je pense que cela vient de là.
Changer soit Sheets("Resultats").Activate en Sheets("Resultats ").Activate
soit renommer votre feuille en supprimant l'espace.
Perso la seconde solution me semble plus propre, car on peut chercher longtemps une erreur du à un espace invisible.
 

MarionP85

XLDnaute Nouveau
Re,
J'ai oublié un détail : sur votre fichier la feuille s'appelle "Resultats " avec un espace.
Sur mon fichier j'ai supprimé cet espace car c'est source d'erreur.
Donc je pense que cela vient de là.
Changer soit Sheets("Resultats").Activate en Sheets("Resultats ").Activate
soit renommer votre feuille en supprimant l'espace.
Perso la seconde solution me semble plus propre, car on peut chercher longtemps une erreur du à un espace invisible.
Merci beaucoup, c'était cela en effet super tout fonctionne et j'ai réussi à l'adapter pour un autre fichier c'est genial !! Et si jamais, je voulais par exemple sur un autre fichier (tout en prenant l'exemple de celui ci) au lieu d'avoir mes observations sur la même ligne faire plusieurs lignes avec le même numéro de VSC avec une observation/ligne ? Comment pourrais-je adapter ce code ci ?
Je vous remercie pour votre temps accordé.

Bien cordialement,
 

MarionP85

XLDnaute Nouveau
Re,
La ligne d'écriture est gérée par la variable "Ligne" , je sais ce n'est pas très original.
A vous de gérer ce N° de ligne en faisant Ligne=Ligne+1 quand vous en avez besoin.
Re,
vraiment désolé je me sens tellement bête, j'ai fait cela :
VB:
' Synthèse infos
Sheets("Resultats").Activate
With Sheets("Resultats")
    Range("A5:V1000").ClearContents         ' Efface matrice synthèse
    Ligne = 5                               ' Première ligne
    For Each F In Worksheets                ' Pour toutes les feuilles
        If F.Name <> "Resultats" Then       ' Hormis résultats
            .Cells(Ligne, "A") = F.Name     ' Range nom de la feuille
            Colonne = 2                     ' Première colonne de rangement : B
            For L = 5 To 11 Step 2          ' Pour les lignes d'observations ( stap car une ligne sur deux, cellules fusionnées )
                For C = 4 To 10             ' Pour outes les colonnes
                    .Cells(Ligne, Colonne) = Sheets(F.Name).Cells(L, C) ' Copier coller infos
                    Colonne = Colonne + 1   ' On passe à la colonne suivante
                Next C
                 .Cells(Ligne, "A") = F.Name
                Ligne = Ligne + 1
            Next L
            Ligne = Ligne + 1               ' prochaine ligne de rangement
        End If
    Next F

Ca me met bien à la ligne avec mon numéro de VSC cependant la 2e observation reste décalée sur la droite par rapport à la 1ere, elle ne se met pas directement en dessous. Je suppose que c'est au moment du " For C = 4 To 10 " que ça se décale de 6 colonnes et donc lui dire d'aller directement à la ligne mais je ne vois pas du tout comment faire..
Je vous remercie encore une fois

Bien cordialement,
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Sans fichier test et sans directive précise, difficile de vous aider.

Il vous faut gérer Ligne et Colonne, la cellule écrite est .Cells(Ligne, Colonne).
Dans votre code à chaque écriture vous faites ensuite un Colonne = Colonne + 1 donc vous changer de colonne.

Comme vous n'avez que 6 valeurs à inscrire, supprimer le FOR ce sera plus simple :
VB:
' Remplacez :
    For C = 4 To 10             ' Pour toutes les colonnes
        .Cells(Ligne, Colonne) = Sheets(F.Name).Cells(L, C) ' Copier coller infos
        Colonne = Colonne + 1   ' On passe à la colonne suivante
    Next C
' Par
    .Cells(Ligne, Colonne) = Sheets(F.Name).Cells(L, 4)
    .Cells(Ligne, Colonne) = Sheets(F.Name).Cells(L, 5)
    .Cells(Ligne, Colonne) = Sheets(F.Name).Cells(L, 6)
    .Cells(Ligne, Colonne) = Sheets(F.Name).Cells(L, 7)
    .Cells(Ligne, Colonne) = Sheets(F.Name).Cells(L, 8)
    .Cells(Ligne, Colonne) = Sheets(F.Name).Cells(L, 9)
    .Cells(Ligne, Colonne) = Sheets(F.Name).Cells(L, 10)

' Et insérer :
    Colonne = Colonne + 1  et/ou    Ligne= Ligne+ 1
' Où vous voulez.
Ca ne fait que quelques lignes en plus mais c'est plus souple à l'emploi.
 

MarionP85

XLDnaute Nouveau
Merci beaucoup, désolé. Nous pouvons rester sur le même fichier pour l'exemple, les observations 2 et 3 sont bien sur la ligne d'en dessous dans ma feuille 1 mais sont encore décalés...

Bien cordialement,
 

Pièces jointes

  • Compil VSC - conducteur NBT v (1).xlsm
    117.2 KB · Affichages: 4

sylvanu

XLDnaute Barbatruc
Supporter XLD
Rien compris.
Pourriez vous mettre l'attendu. Décalés par rapport à quoi ?
mais sont encore décalés

Une idée peut être farfelue, mais si vous voulez tout décaler d'une ligne, pourquoi ne pas les aligner à gauche, vous gagneriez en lisibilité ?
1618348623369.png
 

MarionP85

XLDnaute Nouveau
Rien compris.
Pourriez vous mettre l'attendu. Décalés par rapport à quoi ?


Une idée peut être farfelue, mais si vous voulez tout décaler d'une ligne, pourquoi ne pas les aligner à gauche, vous gagneriez en lisibilité ?
Regarde la pièce jointe 1102114
Bonjour, c'est exactement ce rendu là que je souhaite. Les observations d'une même VSC les unes en dessous les autres...
Je n'ai cependant pas réussi à l'appliquer.

Bonne journée à vous,
Bien cordialement.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
:) On finit par se comprendre.
Un essai en PJ.
Pour augmenter encore un peu la lisibilité :
1- Je ne mets que les observations, si une observation est vide elle n'est pas affichée.
2- J'ai mis quelques couleurs pour les transistions entre pages.
Les couleurs sont programmables via la ligne :
VB:
Vert = RGB(230, 255, 230): Jaune = RGB(255, 255, 200)
 

Pièces jointes

  • Compil VSC - conducteur NBT v (4).xlsm
    135.7 KB · Affichages: 3

MarionP85

XLDnaute Nouveau
Bonjour,
:) On finit par se comprendre.
Un essai en PJ.
Pour augmenter encore un peu la lisibilité :
1- Je ne mets que les observations, si une observation est vide elle n'est pas affichée.
2- J'ai mis quelques couleurs pour les transistions entre pages.
Les couleurs sont programmables via la ligne :
VB:
Vert = RGB(230, 255, 230): Jaune = RGB(255, 255, 200)
Re, c'est exactement ça qu'il me fallait je l'ai adapté à un autre fichier ca tourne niquel ! super l'idée des couleurs. Je vous remercie pour votre aide et votre patience !!
Dernière petite question qui n'a pas de rapport avec mon fichier mais plutôt votre expérience. Est-ce que vous compilez vos codes dans un classeur où est-ce que vous faites tout de "tête" ? Juste pour mon information, vous n'êtes pas obligé de répondre.

En vous souhaitant une agréable journée :)
Bien cordialement,

Marion
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
😂🤣😅
Il serait impossible de "compiler" tous les codes et de les réutiliser in extenso. Ce serait trop simple.
Un langage, c'est un peu comme une langue étrangère, on apprends petit à petit, et quand on sait pas on utilise un dictionnaire pour trouver un mot : Google, MS, et toutes ses lectures ....
 

Statistiques des forums

Discussions
314 658
Messages
2 111 621
Membres
111 235
dernier inscrit
Morgane SANCHEZ