Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Création automatique de ligne

RMV

XLDnaute Nouveau
Bonjour à tous,

j'ai déjà trouvé pas mal de réponses à mes questions ici et je remercie tous les contributeurs.
Cela dit, je bloque sur un sujet et je n'ai rien trouvé qui puisse m'aider (en tout cas à la portée de ma compréhension). Voic donc mon problème :
j'ai un fichier avec 2 onglets. L'onglet 1 sert de modèle de base pour une structure vierge à compléter dans l'onglet 2.
Le modèle de l'onglet 1 comprend des cellules nommées qui permettent la création automatique de ligne quand la cellule au-dessus est remplie. Et ça fonctionne !
Le principe de l'onglet 2 est, à l'aide d'un bouton et d'une macro, de recopier la structure de base de l'onglet 1 et de l'insérer au-dessus de la structure précédente.
Pour conserver la création automatique de lignes, j'ai réussi à automatiser la création de nouveaux noms de cellules pour les repères.
Par contre, je ne sais pas ajouter ces noms dans la macro qui gère la création des lignes. J'ai bien essayé avec une boucle mais Excel me sort des erreurs 1004, 424 et une autre que j'ai oubliée...

Voici où j'en suis :

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim x As Integer
Dim NbChantiers As Integer
NbChantiers = Range("A1").Value
Dim Install As String


'ajout ligne INSTALL
    
    If ((Range("INSTALL").Offset(-1) <> "") Or (Range("INSTALL").Offset(-1, 3) <> "")) Then
        ' ajoute une ligne - la ligne s'insère au dessus
        Application.EnableEvents = False ' pour ne pas se mordre la queue
        Range("INSTALL").EntireRow.Insert
        Application.EnableEvents = True
    End If

'ajout ligne INSTALL en boucle
 
    For x = 1 To NbChantiers - 1
    Install = "INSTALL" & x
    ' teste si la cellule juste au dessus est remplie
        If ((ThisWorksheet.Range(Install).Offset(-1) <> "") Or (ThisWorksheet.Range(Install).Offset(-1, 3) <> "")) Then
            ' ajoute une ligne - la ligne s'insère au dessus
            Application.EnableEvents = False ' pour ne pas se mordre la queue
            Range(Install).EntireRow.Insert
            Application.EnableEvents = True
        End If
    Next
End Sub

J'ajoute que cette macro est enregistrée dans l'objet feuille et non dans un module.

Merci d'avance pour l'aide que vous pourrez m'apporter.
 

RMV

XLDnaute Nouveau
Merci Alain !
Je n'ai pas vraiment compris la subtilité de l'objet Me (que je ne connaissais pas - en même temps je ne fais pas de programmation) mais ça fonctionne nickel.
 

AtTheOne

XLDnaute Accro
Supporter XLD
Re
Me dans un module de classe (comme le code d'une feuille, de ThisWorkbook, Un Userform ... désigne l'objet parent (la feuille elle même, le classeur, le Userform ...)

ThisWorksheet n'existe pas contrairement à ThisWorkbook (sauf si tu as baptisé un objet ThisWorksheet, mais là ...)

Amicalement
Alain
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…