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


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 28
    Par défaut insertion de ligne
    Bonjour le forum,

    J'essai de créer un script afin d'insérer une ligne vide a chaque fois que Cells(i, 2) <> Cells(i + 1, 2)

    L'objectif est d'insérer la ligne vide entre i et i +1 et c'est là que ça coince. Je ne sais pas comment écrire cette condition. est ce que quelqu'un peut m'orienter?

    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Add_empty_row()
     
    Dim i As Long
     
    For i = 2 To 67
     
     
    If Cells(i, 2) <> Cells(i + 1, 2) Then
    Selection.EntireRow.Insert
    End If
    Next
     
     
    End Sub

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Par défaut
    testes si ca te convient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Rows(i + 1 & ":" & i + 1).Insert Shift:=xlDown

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 28
    Par défaut
    Salut EmmanuelleC,

    Merci pour ta suggestion,
    La modification du code ne résouds malheureusement pas le problème. Désormais au lieu d'insérer les lignes vides au centre de la feuille de calcul, le script insère un bloc de 65 lignes vides dès que la condition est respectée pour la 1ère fois et omet d'analyser les lignes suivantes...

    Je ne sais pas pourquoi 65 lignes; peut-être car 67 (=dernière ligne) - 2(=première ligne) = 65

    La macro devrait insérer au total 31 lignes vides. 31 lignes vides, isolées les unes des autres

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Par défaut
    heu ben oui, faut adapter le code pour tenir compte de la ligne ajoutée
    il trouve la premiere ligne différente en i (mettre 10, por l'exemple), donc il slectionne la ligne i+1 (11) et insere une ligne au dessus (donc entre la ligne 10 et l'ancienne ligne 11).
    Tu passes au i suivant (i = 11 donc) et pouf, mécaniquement, tu atterris sur la ligne vide que tu viens d'ajouter
    Ligne vide qui est bien différente de la ligne suivante (qui est pleine) et hop, ca boucle

    Une solution c'est dans le if de faire i=i+1
    Ou alors tu testes que ca soit différent ET non vide
    Ou tu compares I avec i-1 et tu rajoute la ligne au dessus de i au lieu de l'ajouter en dessous

    (et fait attention au i écrit en dur, ca peut te jouer des blagues, surtout pour un script qui ajoute des lignes au milieu, parce que du coup, 67 pré insersion et 67 post insertion, c'est pas la meme chose)

  5. #5
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Bonjour,

    Je propose un code quie remonte les lignes du bas vers le haut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For i = Cells(Rows.Count, 2).End(xlUp).Row To 2 Step -1
        If Cells(i, 2) <> Cells(i - 1, 2) And Cells(i - 1, 2) <> Empty Then
            Cells(i, 2).EntireRow.Insert shift:=xlShiftDown
        End If
    Next

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 28
    Par défaut
    @ EmmanuelleC:

    Merci pour l'explication et la suggestion. Ca marche désormais comme il faut. J'ai donc ajouté la condition i = i +1 et élargi l'univers à 200

    Voici le nouveau code:

    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
    Sub Add_empty_row_forum()
    
    Dim i As Long
    
    For i = 2 To 200
    
    
    If Cells(i, 2) <> Cells(i + 1, 2) Then
    Rows(i + 1 & ":" & i + 1).Insert shift:=xlDown
    i = i + 1
    
    End If
    Next
    
    
    End Sub
    J'ai élargi l'univers jusqu'à la 200ième ligne pour être certain que toutes les données sont prises en compte.
    Cependant définir l'univers de la sorte n'est pas très pratique/fiable. Je dois me familiariser avec l'exécution du code du bas vers le haut...

    @ aalex_38:

    Merci aalex_38, ton code marche très bien. Les solution du bas vers le haut me semble plus solides; je devrais rédiger le code de la sorte...

    Question: est ce que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = Cells(Rows.Count, 2).End(xlUp).Row To 2 Step -1
    signifie que le code analyse la colonne 2 et s'arrête à la ligne 2 (omet la ligne 1 qui contient les titres)?

    Afin de ne pas avoit de ligne vide en dessous du titre j'ai ajouté un "And" qui contient le titre de la colonne 2

    Voici ce que ça donne:

    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 Add_empty_row_from_bottom()
     
    Dim i As Long
     
     
    For i = Cells(Rows.Count, 2).End(xlUp).Row To 2 Step -1
        
        If Cells(i, 2) <> Cells(i - 1, 2) And Cells(i - 1, 2) <> Empty And Cells(i - 1, 2) <> "Fund ID" Then
            Cells(i, 2).EntireRow.Insert shift:=xlShiftDown
            
        End If
        
    Next
    
    End Sub

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

Discussions similaires

  1. INSERT multi-lignes avec valeurs connues
    Par herve91 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2006, 23h13
  2. [VB 6.0 + sql server] pb insertion de lignes trop nombreuses
    Par flores dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 30/10/2006, 16h29
  3. insert plusieur lignes
    Par allstar dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/10/2006, 15h46
  4. echec d'insertion de ligne dans une table
    Par foblar dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 20/07/2006, 10h13
  5. [Tableaux] Insertion dynamique ligne dans un tableau
    Par masseur dans le forum Langage
    Réponses: 12
    Dernier message: 28/03/2006, 14h53

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