IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Insertion de ligne en fonction d'une variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut Insertion de ligne en fonction d'une variable
    Bonjour à tous,
    J'ai un tableau dans lequel je voudrais inserer des ligne vides en fonction d'un nombre indiqué dans l'une des colonnes

    Nom : Tableau d'origine.png
Affichages : 154
Taille : 11,2 Ko
    En colonne no4 (Number of CWP) j'ai des chiffres, sous chacune des lignes je souhaiterais inserer autant de lignes que le nombre indiqué dans cette colonne.
    Pour chacune des lignes inserées je souhaiterais les numéroter de 1 au nombre de ligne insérées comme ci-dessous

    Nom : Tableau Final.png
Affichages : 148
Taille : 7,9 Ko
    Merci d'avance pour vos conseils et votre support

    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Salut, voici qui fait le job:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Sub InsertRows()
        Dim rng As Range
        Dim i As Long
        Dim num As Long
        Dim arr() As Variant
        Dim j As Long
        Dim ws As Worksheet
     
        'Définir la feuille de travail
        Set ws = ThisWorkbook.Sheets("Feuil1")
     
        ' Définir la plage comme colonne D
        Set rng = ws.Range("D2:D" & ws.Cells(Rows.Count, "D").End(xlUp).Row)
     
        Application.ScreenUpdating = False
     
        ' Parcourir la plage à l'envers
        For i = rng.Rows.Count To 1 Step -1
            ' Obtenir le nombre de lignes à insérer
            num = rng.Cells(i, 1).Value
     
            ' Insérer les lignes et numéroter en colonne A
            If num > 0 Then
                rng.Cells(i + 1, 1).Resize(num).EntireRow.Insert
                ReDim arr(1 To num)
                For j = 1 To num
                    arr(j) = j
                Next j
                Range("A" & rng.Cells(i, 1).Row + 1 & ":A" & rng.Cells(i, 1).Row + num).Value = Application.Transpose(arr)
            End If
        Next i
        Application.ScreenUpdating = True
    End Sub

  3. #3
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 508
    Par défaut
    Salut,
    Avec l'utilisation d'un tableau structuré, bien entendu tu doit insérer le tableau structuré et le nommer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Public Sub InsertRows()    Dim MonTableau As ListObject
        ' // Adaptez le nom de la feuille ainsi que le nom du tableau
        Set MonTableau = Feui1.Range("MonTableau").ListObject
     
        Dim TotalRows As Long
        TotalRows = MonTableau.ListRows.Count
     
        Dim RowItemIndex As Long
        For RowItemIndex = TotalRows To 1 Step -1
            Dim RowItem As ListRow
            Set RowItem = MonTableau.ListRows(RowItemIndex)
     
            Dim insertedRowNumber As Long
            insertedRowNumber = CLng(RowItem.Range(MonTableau.ListColumns.Item("Number of CWP").Index).Value)
            If insertedRowNumber > 0 Then
                Dim Counter As Long
                For Counter = 1 To insertedRowNumber
                    Dim NewRow As ListRow
                    Set NewRow = MonTableau.ListRows.Add(RowItem.Index + Counter)
                    NewRow.Range(MonTableau.ListColumns.Item("Items").Index).Value = Counter
                    Set NewRow = Nothing
                Next Counter
            End If
            Set RowItem = Nothing
        Next RowItemIndex
    End Sub

  4. #4
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut
    Bonjour,
    Franc ton code fonctionne parfaitement et fait le job, merci
    Jean-Paul
    Il doit manquer quelquechose voici une capture du code que j'ai adapté mais qui me dit MonTableau=Nothing

    Nom : Error_Tableau is Nothing.png
Affichages : 120
Taille : 11,8 Ko

    Nom : Error_Tableau.png
Affichages : 126
Taille : 4,5 Ko

    Je serai intéressé de voir comment corriger cela

    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  5. #5
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Salut, j'ai testé avec un tableau structuré et ça fonctionne parfaitement.
    Est-ce que le nom de ton listobject est bien "Tableau" et pas autre chose ?

  6. #6
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 508
    Par défaut
    Re,
    As-tu créé un tableau et nommé selon les besoins ?
    • Sélectionnes la totalité des données que tu veux dans le tableau :

    Pièce jointe 647809
    • Ensuite menu: Acceuil/Styles/Mettre sous forme d'un tableau
    • Sélectionner le format du tableau
    • Bien vérifier que Mon tableau comporte des en-têtes soit coché.
    • Dans l'onglet création de tableau renommer le tableau "MonTableau", ou autre nom à convenance.

    Pièce jointe 647810
    • Dans la fonction InsertRow bien vérifier que le nom du tableau et de la feuille sont bons.


    Dans mon exemple la feuille et la feuille 1 et le tableau se nomme "MonTableau"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Set MonTableau = Feuil1.Range("MonTableau").ListObject

  7. #7
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 508
    Par défaut
    re,
    Petit complément :

    Je te conseille vivement de créer un Pattern Factory pour initialiser les tables de ton projet. cela t'évitera en cas de changement de nom du tableau ou de la feuille, de devoir te peler tout le code pour remplacer les noms...
    Exemple :

    • Tu crée un module "Factory"
    • Tu insère cette fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Function InitTableActivityBus() As ListObject
        Static Item As ListObject
        If Item Is Nothing Then
            ' // Adapter le nom de la feuille et du tableau ci-dessous
            Set Item = ThisWorkbook.Worksheets.Item("Mafeuille").Range("MonTableau").ListObject
        End If
        Set InitTableActivityBus = Item
    End Function
    • Ensuite ailleurs dans le code tu peux initialiser le tableau facilement, exemple dans la procédure InsertRows :

    Pièce jointe 647812

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Supprimer des lignes en fonction d'une variable en VBA
    Par JohnKel dans le forum Excel
    Réponses: 4
    Dernier message: 12/06/2015, 09h31
  2. Réponses: 3
    Dernier message: 28/10/2014, 14h15
  3. Compter le nombre de lignes en fonction d'une variable.
    Par sumakali31 dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 11/04/2012, 18h13
  4. [XL-2007] Sélectionner ligne en fonction d'une variable
    Par Micdewe dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 12/01/2011, 08h37
  5. Réponses: 11
    Dernier message: 10/03/2007, 02h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo