VBA ? ajout de ligne selon critere

Bonjour,

est il possible (certainement plus avec du VBA que des formules) de recopier tout ou partie d'un tableau, en inserant par endrois des ligne suivant un nombre indiqué en bout de chaque ligne ?

par avance, merci

Bonjour,

dépose un fichier exemple avec le avant et le après stp, ainsi que des explications complètes.

eric

bonjour eriiic,

ok, je fais ça des que possible

Merci

Bonjour,

Voici un fichier exemple de ce que j'ai et de ce que je souhaiterais, si possible, obtenir

par avance MERCI .

23exemple.xlsx (13.09 Ko)

Bonjour,

C'est la feuille exacte ? ou bien tu as ajouté des lignes au-dessus et il n'y a en réalité qu'une seule ligne de titre en ligne 1 ?

Idem pour la colonne A vide. Réellement présente ?

eric

Bonjour eriiic,

non, ce n'est pas la feuille exacte

le tableau que j'obtiens à l'exportation contient des des colonnes inutiles et les titres de colonne, je les ai modifié

cela peut avoir une incidence ?

Si tu veux ne rien à avoir à reprendre met une copie exacte du fichier au moment où tu veux lancer cette macro (qcq lignes comme tu as fait c'est suffisant)

dans la mesure ou la présentation de base risque de changer, je pense que je serais obligé de retravailler a chaque fois la mise en forme et donc arriver a un résultat proche de celui que j'ai transmi

Tiens, j'ai dû oublier de valider ma réponse...

Je remet

eric

39classeur1.xlsm (23.89 Ko)

alors la ... moi je dis respect MONSIEUR eriiic

c'est parfait

merci


crois tu que j'ai le droit d'abuser en demandant s'il est possible que dans une des 4 cases "montant" il y a un zéro,

il ne le compte pas ?

Tu veux dire que si une des 4 cellule a 0 on efface complètement la ligne ?

Essaie en remplaçant :

If Cells(lig, col) <> "" Then

par :

If Cells(lig, col) <> 0 Then

eric

non, en fait les montants se repertissent entre F, G, H et I

on peux donc avoir des montant dans une ou plusieurs cellule

lors de mon exportation de donnée, quand une cellule n'a pas de montant, il met "0"

avec la macro, si j'efface les "0" ça fonctionne, mais si je les laisses, la macro considère que c'est un montant

et donc duplique la ligne.

je peu sans problème effacer les "0", mais je voulais juste savoir (pour ma culture perso) si y'a moyen de lui dire que si y'a un 0, c'est comme si c’était vide

tu as testé en modifiant ce que je t'ai dit ?

ok, je testerais ça, si je peux, dans le week end, sinon Lundi ...

en tout cas, encore merci a toi et bon week end

Hello eriiic,

eriiic a écrit :

Tu veux dire que si une des 4 cellule a 0 on efface complètement la ligne ?

Essaie en remplaçant :

If Cells(lig, col) <> "" Then

par :

If Cells(lig, col) <> 0 Then

eric

ça marche super !!!!

encore un grand merci ....

re bonjour ...

pardon de ré-ouvrir ce poste, mais depuis hier je cherche par moi même à apporter un petit plus a l’excellent macro d'ériiic mais je sèche ... mais connaissance en VBA son proche du NUL....

rappel :

dans le tableau exemple, la macro d'eriiic regarde pour un meme numero de facture quelles sont les lignes contenant 2 montant en F, G, H et J et duplique ces lignes pour ne laisser qu'un montant par ligne.

je voudrais en plus :

pourvoir, pour un meme numero de facture, rajouter une ligne ne recopiant que le numero de la facture, la date et le total HT

et que sur les lignes precedentes le total ht soit effacer.

Merci

Bonjour,

essaie avec :

Sub dupliquerLig()
    Dim lig As Long, col As Long, nblig As Long, montant As Double
    Application.ScreenUpdating = False
    For lig = Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1
        nblig = Application.CountA(Cells(lig, "F").Resize(1, 4))
        If nblig > 1 Then
            For col = 9 To 6 Step -1
                If Cells(lig, col) <> 0 Then
                    montant = Cells(lig, col)
                    Rows(lig).Copy
                    Rows(lig + 1).Insert Shift:=xlDown
                    Cells(lig + 1, "F").Resize(1, 4).ClearContents
                    Cells(lig + 1, col) = montant
                    Cells(lig + 1, "D") = ""
                End If
            Next col
        End If
        Cells(lig, "F").Resize(1, 4).ClearContents
    Next lig
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
End Sub

eric

c'est presque ça ...

avec ce code, a chaque changement de libellé (en J) il me duplique la ligne pour ne laisser que le montant HT

moi je voudrais qu'il n'y ai qu'une ligne total HT pa numero de facture

Edit ... je joint le fichier ... voir feuil1 (3)

12classeur1.xlsm (28.10 Ko)

Bonjour,

Je ne vois pas que tu aies mis le dernier code proposé.

Donc le ce que j'ai avec ta macro est faux.

Cependant comme pour moi il y a avait autant de factures que de lignes, le montant HT apparaissait plusieurs fois. Voici une autre proposition avec le montant HT en haut (c'est plus simple) :

Sub dupliquerLig()
    Dim lig As Long, col As Long, nblig As Long, montant As Double
    Application.ScreenUpdating = False
    For lig = Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1
        nblig = Application.CountA(Cells(lig, "F").Resize(1, 4))
        If nblig > 1 Then
            For col = 9 To 6 Step -1
                If Cells(lig, col) <> 0 Then
                    montant = Cells(lig, col)
                    Rows(lig).Copy
                    Rows(lig + 1).Insert Shift:=xlDown
                    Cells(lig + 1, "F").Resize(1, 4).ClearContents
                    Cells(lig + 1, col) = montant
                    Cells(lig + 1, "D") = ""
                End If
            Next col
            If lig <> 2 Then Rows(lig).Delete
        Else
            Cells(lig, "D") = ""
        End If
        If lig = 2 Then
            Cells(lig, "F").Resize(1, 5).ClearContents
        End If
    Next lig
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
End Sub

eric

eric,

en effet, je n'avais pas sauvegardé avec ton précédent code ... milles excuses.

cependant le tout dernier me convient parfaitement.

encore Merci.

Benoit

Rechercher des sujets similaires à "vba ajout ligne critere"