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 lignes de façon variable [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Par défaut Insertion de lignes de façon variable
    Bonjour,

    J'ai un fichier de plusieurs milliers de lignes dans lequel sur une colonne figure un chiffre allant de 2 à 4 ou alors est vide. Mon but : Si la cellule est vide on ne fait rien, si la cellule contient "2", alors je veux insérer une ligne (dans le but futur de dupliquer une fois les infos), si la cellule contient "3", je dois insérer 2 lignes afin de dupliquer deux fois les infos, et ainsi de suite. Comment inclure dans mon programme cette notion : si la cellule G(x) est vide, alors tu ne fais rien, si ce n'est pas vide, insère moi x ligne, x étant le nombre indiqué en G(x) - 1. Comme je suis nul pour expliquer ma problématique, ci joint un fichier comprenant les données telles que je les ai et un onglet avec le résultat voulu.
    Je vous remercie d'avance pour votre aide et vous souhaite un bon après-midi.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Je penses que ce post devrait t'aider.
    A toi de nous dire

    http://www.developpez.net/forums/d12...cellule-ligne/

  3. #3
    Membre éclairé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Par défaut
    Bonjour Jérôme,

    J'imagine que c'est quelque chose du genre qu'il me faut, mais étant une chèvre en VBA, je suis incapable de l'adapter...

    Pour dupliquer les valeurs, je m'arrangerai autrement, mais si quelqu'un pouvait m'écrire le code juste pour insérer ces fameuses x lignes, je lui en serai très reconnaissant.
    D'avance merci !

  4. #4
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Voici un début de solution (un peu à l'arraché )
    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
    Sub Test()
    Dim DerLig As Long
        Application.ScreenUpdating = False
        With Worksheets("Données de départ")
            DerLig = .Range("A" & .Rows.Count).End(xlUp).Row
            For i = DerLig To 2 Step -1
                Set c = .Range("G" & i)
                If Not IsEmpty(c) Then
                    If IsNumeric(c) Then
                        c.Offset(0, -3).Value = c.Offset(0, -3).Value / c.Value
                        c.Offset(0, -2).Value = c.Offset(0, -2).Value / c.Value
                        c.Offset(0, -1).Value = c.Offset(0, -1).Value / c.Value
                        Set MaPlage = .Range(.Cells(i, "A"), .Cells(i, "F"))
                        For j = 1 To c.Value - 1
                            .Range("G" & i).EntireRow.Insert
                            .Range(.Cells(i, "A"), .Cells(i, "F")) = MaPlage.Value
                        Next j
                        c.ClearContents
                    End If
                End If
            Next
        End With
        Application.ScreenUpdating = True
    End Sub
    Cordialement.

  5. #5
    Membre éclairé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Par défaut
    Merci gFZT82, c'est exactement ce que je cherchais à faire !
    Problème résolu !

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 258
    Par défaut
    salut
    Déjà, il faudrait savoir ce qui déclenche l'ajout des lignes:
    1/ A chaque changement de valeur (mais pas recommandé)
    2/ A partir d'un bouton
    3/ à la sortie du fichier
    ...

    Ensuite, tu vas créer une boucle qui va commencer à la premiere ligne que tu veux (Exemple ici 2 car la premiere ligne est une entete) et qui va finir à la derniere ligne renseignée par la fonction cells(60000,5).end(xlup).row. (qu'il faudra revoir à chaque ligne ajoutée.

    et à chaque fois qu'il rencontre une case non vide, il va rajouter n-1 ligne par la fonction insert.

    Astuces:
    1/Comme il y plusieurs milliers de ligne, faire patienter l'utilistaeur par un message de travail par exemple
    2/ luis signaler que le travail est terminé par un message de fin
    3/ Si l'évenement déclencheur est activé plusieurs fois, il va falloir faire un test pour vérifier si les lignes ont déjà été créées. ou supprimer le nombre de redondance demandées

    Ca devrait donc commencer par
    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
    sub ajout_ligne()
    for i=2 to cells(60000,5).end(xlup).row 'i est le n° de ligne
          if cells(i,6)>1 then    'si le nombre de redondance est >1 noté en colonne 6
                for k=1 to cells(i,7)-1                  
                      rows(i & ":" & i).insertrow
                      for j=1 to 5 'On va copier les valeurs de cellules col 1 à 5
                              cells(i+1,j)=cells(i,j)
                      next
                      k=k+1
                next
                cells(i,6)="" 'On vide la valeur de redondance
          end if
    next
    msgbox("Terminé!")
    end sub
    A tester et corriger
    surtout que la macro n'ira pas au bout du tableau puisque des lignes auront été insérées
    A toi de corriger mais c'est une bonne base

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

Discussions similaires

  1. Insertion de lignes en fonction du numéro de lignes comme variable
    Par Rachi dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 13/12/2012, 11h18
  2. Insertion de lignes avec emplacement variable
    Par Rachi dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/12/2012, 15h03
  3. Formulaire avec nombre de lignes de saisie variable
    Par NadègeG dans le forum Langage
    Réponses: 9
    Dernier message: 03/10/2006, 08h10
  4. [Tableaux] Insertion dynamique ligne dans un tableau
    Par masseur dans le forum Langage
    Réponses: 12
    Dernier message: 28/03/2006, 14h53
  5. Réponses: 2
    Dernier message: 14/05/2004, 14h32

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