Création d'un tableau avec nombre de lignes variables

Bonjour à tous !

Je viens ici vous demander un peu d'aide car mes compétences en VBA trouvent leur limites avec un projet que je mène pour le travail.

En effet, j'ai pour projet de créer un tableur à destination de mes clients dans lequel il vont devoir renseigner une liste de lieux.

Afin de faciliter au maximum la saisie de leur données et éviter les erreurs, je souhaite rendre mon tableau dynamique.

L'idée serait de leur permettre de saisir dans une cellule le nombre de lieux à renseigner, ce qui entraînerait la création du bon nombre de lignes dans le tableau juste en dessous.

J'ai donc fait quelques recherches sur ce merveilleux forum et je pense avoir une piste solide concernant mon souhait.

Cependant j'éprouve des difficultés à adapter le code à mon fichier.

Voici le code que j'ai trouvé :

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lo As ListObject
Dim Indx As Long
Dim Message As String, Style As VbMsgBoxStyle, Answer As VbMsgBoxResult, Title As String
    If Target.Address = "$D$8" Then
        Set lo = Me.ListObjects(1)
        With lo
            If .InsertRowRange Is Nothing Then
                Message = "Vous allez supprimer les données de la table." & vbCrLf
                Message = Message & "Veuillez confirmer votre souhait."
                Style = vbYesNo + vbQuestion
                Title = "Réinitialisation table ?"
                Answer = MsgBox(Message, Style, Title)
                If Answer = vbYes Then .DataBodyRange.Delete
            End If
            If Not IsEmpty(Target) Then
                If Target.Value = 1 Then
                    .InsertRowRange.Cells(1).Value = 1
                Else
                    .Resize lo.Range.Resize(Target.Value + 1)
                    For Indx = 1 To .ListRows.Count
                        .ListRows(Indx).Range.Cells(1) = Indx
                    Next Indx
                End If
            End If
        End With
    End If
End Sub

C'est vraiment du super boulot (je suis désolé, je n'ai plus le nom de l'auteur mais peut-être se reconnaîtra t'il ^^)

Et voilà, en fait le fichier dans lequel ce code était inscrit fonctionne super bien et le tableau "exemple" marche pile poil comme j'aimerai. Seulement, impossible de l'adapter à mon fichier.

Sachant que dans ma feuille j'aurais 2 tableaux distincts et que je ne souhaite utiliser ce code que pour l'un des deux.

Quelqu'un aurait-il donc une solution pour m'aider à reprendre ce code et m'indiquer comment l'adapter à un tableau en particulier ? Ou au moins cibler un endroit où insérer les lignes supplémentaires ?

D'avance merci pour votre aide

A plus !

Sam.

Bonjour,

Le tableau fait référence à un tableau structuré, désigné dans VBA par l'objet ListObjects.

Dans ton code, on fait référence à son index, en l’occurrence le 1er tableau structuré : ListObjects(1)

On peut aussi utiliser le nom du tableau : ListObjects("MonTableau")

Une version commentée du code (avec peut être quelques approximations à certains passages) :

Option Explicit 'Oblige la déclaration de toutes les variables utilisées

Private Sub Worksheet_Change(ByVal Target As Range) 'Macro qui se déclenche lors d'un changement sur la feuille en question
Dim lo As ListObject 'Variable de type tableau structuré
Dim Indx As Long 'Variable de type nombre entier
Dim Message As String, Style As VbMsgBoxStyle, Answer As VbMsgBoxResult, Title As String 'Variables texte (String) utilisées pour l'affichage du message
    If Target.Address = "$D$8" Then 'Si la cellule modifiée est D8, alors...
        Set lo = Me.ListObjects(1) 'On affecte le 1er tableau structuré à la variable Io
        With lo 'Avec ce tableau
            If .InsertRowRange Is Nothing Then 'Si le tableau comporte des données
                Message = "Vous allez supprimer les données de la table." & vbCrLf 'Ajout du texte du message
                Message = Message & "Veuillez confirmer votre souhait."
                Style = vbYesNo + vbQuestion 'Ajout des boutons/picto affichés
                Title = "Réinitialisation table ?" 'Ajout du titre
                Answer = MsgBox(Message, Style, Title) 'Affichage du message
                If Answer = vbYes Then .DataBodyRange.Delete 'Si oui, on supprime les données existantes
            End If
            If Not IsEmpty(Target) Then 'Si la cellule D8 n'est pas vide
                If Target.Value = 1 Then 'Si la cellule D8 = 1
                    .InsertRowRange.Cells(1).Value = 1 'On ajoute une ligne
                Else
                    .Resize lo.Range.Resize(Target.Value + 1)
                    For Indx = 1 To .ListRows.Count 'Sinon on ajoute autant de lignes que nécessaires
                        .ListRows(Indx).Range.Cells(1) = Indx
                    Next Indx
                End If
            End If
        End With
    End If
End Sub

Whaouuu... Ca c'est de la réponse ! Merci beaucoup Pedro !

Effectivement c'est beaucoup plus clair avec tes commentaires ^^

Et le fait de savoir comment "attribuer" un tableau à cette commande réponds parfaitement à ma question.

Encore un grand merci d'avoir pris le temps !

A plus

Bonjour,

Je connais cette procédure (ou du moins je reconnais mon écriture !...).

Il suffit de remplacer :

Set lo = Me.ListObjects(1)

par :

Set lo = Range("NomTableau").Listobject

NomTableau est le nom de ton tableau dans la feuille de calcul.

Sinon, InserRowRange = nothing si le tableau comporte des données.

Cdlt.

Salut Jean-Eric !

Oui effectivement j'ai retrouvé ton post ^^

Merci pour l'astuce en tout cas, je suis ravi de pouvoir bénéficier de votre aide si précieuse !

Rechercher des sujets similaires à "creation tableau nombre lignes variables"