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 :

Macro: Pb sur un code insertion de ligne


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Par défaut Macro: Pb sur un code insertion de ligne
    Bonjour a tous,

    Je souhaite inserer des lignes sous conditions ;
    si la cellule G7 est vide, inserer une ligne en dessous en y copiant la plage A7:E7
    Si la cellule G7 n'est pas vide, inserer 2 lignes en dessous en y copiant la plage A7:E7

    Le tableau:
    DATE CHQ REF DESCRIPTION INV'S PD BANKED NET OF VAT
    xxxxx xxxx xxxxxxx x x Non vide
    aaaaa aa a aaa a Vide
    cc ccc c c c Non vide

    Le resultat souhaite:

    DATE CHQ REF DESCRIPTION INV'S PD BANKED NET OF VAT VAT
    xxxxx xxxx xxxxxxx x x Non vide
    xxxxx xxxx xxxxxxx x x
    xxxxx xxxx xxxxxxx x x
    aaaaa aa a aaa a Vide
    aaaaa aa a aaa a
    cc ccc c c c Non vide
    cc ccc c c c
    cc ccc c c c


    Une des solutions que j'ai trouve pour realiser la commande: (pas terrible)


    Inserer une ligne entre chaque sans condition particuliere

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Range("A50").Select
    Do Until ActiveCell.Row = 1
          'Insert blank row.
    ActiveCell.EntireRow.Insert Shift:=xlDown
          'Move up one row.
    ActiveCell.Offset(-1, 0).Select
    Loop
    et ensuite faire une condition simple si la cellule n'est pas vide (je n'arrive pas a faire avec Else. et en plus je n'ai pas reussi a copier les cellules par la suite.)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim f As Integer
       For f = Cells(50, 1).End(xlUp).Row To 1 Step -1
    If Cells(f, 7).Value <> "" Then Cells(f + 1, 1).EntireRow.Insert
    Next f
    Le but est d'inserer une ligne en dessous a la condition que la cellule de la ligne superieure colonne 7 n est pas vide.

    Le code fonctionne correctement mais je souhaite faire un copier coller de la plage A(x-1):E(x-1) dans la nouvelle ligne inserer.

    Ensuite j'aurais juste a creer une condition qui rempli les plages encore vide par la oplage de la cellule superieure.


    Le truc peut paraitre complexe pour vous. Perso, je debute et je galere pas mal. Alors, si quelqu'un reussit a completer mon code ou alors a en creer un pour obtenir le tableau souhaite ca serait vraiment cool.

    Merci d'avance a vous tous.

    Monteninho

  2. #2
    Membre éprouvé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Par défaut
    Je souhaite inserer des lignes sous conditions ;
    si la cellule G7 est vide, inserer une ligne en dessous en y copiant la plage A7:E7
    Si la cellule G7 n'est pas vide, inserer 2 lignes en dessous en y copiant la plage A7:E7
    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
     
    Dim i as Integer
     
    'Si Cell vide insérer en dessous en copiant A:E
    i=7 'modifier selon la ligne à traiter (boucler dessus si nécessaire)
     
    If Range("G" & i) = empty then
        Range("G" & i+1).insert
        Range("G" & i+1 & ":E" & i+1) = range("G" & i & ":E" & i).value
    end if
     
    'Si cell <> vide, 2 lignes en dessous en y copiant la plage A:E
    If Range("G" & i) <> empty then
        Range("G" & i+1).insert
        Range("G" & i+1 & ":E" & i+1) = range("G" & i & ":E" & i).value
        Range("G" & i+1).insert
        Range("G" & i+1 & ":E" & i+1) = range("G" & i & ":E" & i).value
    End if
    (non testé)

  3. #3
    Membre chevronné Avatar de mordrhim
    Inscrit en
    Avril 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2007
    Messages : 270
    Par défaut
    une petite question :
    - as tu dans ton tableau une clef ? une colonne dont la cellule ne sera JAMAIS vide,si tu as une autre information dans la ligne ?

    si oui on considere que PremiereLigne est la premiere ligne de données de ton tableau. et que ta clef est sur la colonne A ^^
    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
    Sub trouvefin()
     
        Dim PremiereLigne As Integer, iAs Double
     
        PremiereLigne = 6
        i = PremiereLigne
        While Range("A" & i) <> Empty
            If Cells(i, 7) <> Empty Then
                Rows(i + 1).Insert Shift:=xlDown
                For k = 1 To 5
                    Cells(i + 1, k) = Cells(i, k)
                Next
                i = i + 1
            End If
            Rows(i + 1).Insert Shift:=xlDown
            For k = 1 To 5
                Cells(i + 1, k) = Cells(i, k)
            Next
            i = i + 2
        Wend
    End Sub

  4. #4
    Membre averti
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Par défaut
    Merci Commodore Psy,

    Je tente ca de suite,
    Je te dis quoi dans 10 minutes

    Encore meerci

  5. #5
    Membre averti
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Par défaut
    Desole Mordrhim,

    Mais le reste du tableau est tres variable, il n'ya reellement que cette colonne, qui ne repond que par vide ou non

    Mais je regarde ton code de plus pres pour voir si ca m'offrirai pas une autres possibilite.

    Les idees des autres sont toujours bonne a prendre

    Merci du coup de main

  6. #6
    Membre averti
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Par défaut
    Desole Commodor,

    Mais ca ne convient pas, en fait
    ton code insere une cellule en dessous de la cellule vide. et j'ai besoin d'une ligne entiere.
    Ensuite, il n efait pas la 2nd partie avec la cellule non vide.

    j'essaie de mon cote de modifier ca, car c'est mieux code que mom mic mac.

    Merci.

  7. #7
    Membre éprouvé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Par défaut
    essaie ceci

    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
     
    Dim i as Integer
     
    'Si Cell vide insérer en dessous en copiant A:E
    i=7 'modifier selon la ligne à traiter (boucler dessus si nécessaire)
     
    If Range("G" & i) = empty then
        Rows(i+1).insert
        Range("G" & i+1 & ":E" & i+1) = range("G" & i & ":E" & i).value
    end if
     
    'Si cell <> vide, 2 lignes en dessous en y copiant la plage A:E
    If Range("G" & i) <> empty then
        Rows(i+1).insert
        Range("G" & i+1 & ":E" & i+1) = range("G" & i & ":E" & i).value
        Rows(i+1).insert
        Range("G" & i+1 & ":E" & i+1) = range("G" & i & ":E" & i).value
    End if
    Est-tu sûr que la cellule est non-vide ? (qu'elle ne contient pas un espace par exemple)

  8. #8
    Membre averti
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Par défaut
    Oui, car en fait c une cellule de TVA.
    donc lors de la saisie sur Excel,
    On ne remplie pas cette cellule si il n'y a pas de TVA.
    Mais bon il est possible que qulqu'un y ajoute un espace.
    Dans ce cas, la condition, peu etre change par >0.00, je pense.

    J'essaie ton code
    Encore merci

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    N'oublie pas que si tu insères deux lignes en dessous de la ligne testée, la ligne suivante que tu testes à son tour se trouve trois lignes plus bas... N'est-ce pas le pb ? Tu dois incrémenter ton N° de ligne en conséquence...
    A tout hasard

  10. #10
    Membre averti
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Par défaut
    Desole Commodor,

    voila le resultat de la deuxieme tentative en piece jointe avec le code
    En fait, a l'origine je copie un tableau en feuille1 que je recupere d'un autre service.
    En feuille2, avec une macro je souhait le mettre en forme pour l'inserer dans un autre tableau.
    je fais ca tous les jours en manuel pour 50 lignes des fois.
    le code est pas tres synthetique mais il est bon, jusqu'a l'insertion des lignes en condition.

    le resultat a obtenir est en feuille 3
    La macro c Folder
    Au fait les 2 codes sont dans des macro a part, Insert et test.


    Merci pour tout
    Fichiers attachés Fichiers attachés

  11. #11
    Membre averti
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Par défaut
    Tout a fait ouskelnor,

    J'ai rencontre ce pb donc je les contourner autrement.
    comme je debute, incrementer est un autre monde pour moi

    Merci

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Incrémenter ? C'est ajouter une valeur à une valeur...
    Dans ta boucle, si tu mets
    tu incrémentes ton N° de ligne
    Mais souvent on incrémente n'importe quoi sans savoir qu'on incrémente

  13. #13
    Membre éprouvé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Par défaut
    le code que je t'ai mis marche, il ne reste plus qu'à le mettre dans une boucle.
    (conseil: boucle while)

    j'ai juste apporté une modification (étourderie de ma part )

    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
    Dim i as Integer
     
    'Si Cell vide insérer en dessous en copiant A:E
    i=7 'modifier selon la ligne à traiter (boucler dessus si nécessaire)
     
    If Range("G" & i) = empty then
        Rows(i+1).insert
        Range("A" & i+1 & ":E" & i+1) = range("A" & i & ":E" & i).value
    end if
     
    'Si cell <> vide, 2 lignes en dessous en y copiant la plage A:E
    If Range("G" & i) <> empty then
        Rows(i+1).insert
        Range("A" & i+1 & ":E" & i+1) = range("A" & i & ":E" & i).value
        Rows(i+1).insert
        Range("A" & i+1 & ":E" & i+1) = range("A" & i & ":E" & i).value
    End if
    en gras les modifs

  14. #14
    Membre averti
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Par défaut
    Grand merci a toi commodor,

    mais peut tu me montrer la boucle parce que g test2 des trucs comme ca mais je galere grave.
    En plus, si il faut incrementer comme expliaue ouskel nor, je vais me perdre la dedans.

    merci a toi pour le temps consacre

  15. #15
    Membre éprouvé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Par défaut
    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
    Dim i as Integer
    Dim derniere_ligne as Integer
    
    'Si Cell vide insérer en dessous en copiant A:E
    i=7 'premiere ligne
    derniere_ligne=inputbox("derniere ligne ?") 'un peu barbare mais bon...
    
    While (i<derniere_ligne)
    
    If Range("G" & i) = empty then
        Rows(i+1).insert
        Range("A" & i+1 & ":E" & i+1) = range("A" & i & ":E" & i).value
        i=i+2
        derniere_ligne=derniere_ligne+1
    end if
     
    'Si cell <> vide, 2 lignes en dessous en y copiant la plage A:E
    If Range("G" & i) <> empty then
        Rows(i+1).insert
        Range("A" & i+1 & ":E" & i+1) = range("A" & i & ":E" & i).value
        Rows(i+1).insert
        Range("A" & i+1 & ":E" & i+1) = range("A" & i & ":E" & i).value
        i=i+3
        derniere_ligne=derniere_ligne+2
    End if
     
    Wend
    @all> relisez-moi svp, je fais ça très rapidement, j'ai aussi du boulot en parallèle

  16. #16
    Membre averti
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Par défaut
    Respect a toi commodor,

    tu viens de faire en quelques lignes mon plus gros pB

    Thanks for all

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

Discussions similaires

  1. [OpenOffice] Macro insertion de ligne et copier coller calc
    Par Adamantium dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 10/07/2008, 15h20
  2. Une macro à faire sur une ligne précise
    Par JPDU92 dans le forum VBA Word
    Réponses: 5
    Dernier message: 31/01/2008, 12h13
  3. Macro: Insertion de ligne par condition
    Par Monteninho dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/08/2007, 14h48
  4. Problème sur macro (2 exécutions de code)
    Par Tsuna78 dans le forum Access
    Réponses: 2
    Dernier message: 19/03/2007, 20h24
  5. [IE]Erreur javascript sur un code de 2 lignes...
    Par narnou dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 11/05/2006, 17h20

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