Copier / coller ligne suivant résultat.

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

DAVID-44-

XLDnaute Occasionnel
Bonjour,
j'ai créé une macro afin de copier/coller, suivant un résultat, une ligne dans la feuille "STOCK".
Malheureusement, j'ai deux soucis. J'aimerais que cette macro fonctionne sur toutes les lignes (9 à 19; 24 à 34; 39 à 49; etc).
le deuxième souci est que je souhaiterais que cette macro ne fonctionne pas si le résultat dans la colonne "M" n'est pas supérieur à zéro.
Au cas où, si vous avez une autre solution pour le résultat souhaité, je suis preneur...
Merci beaucoup de votre aide.
 

Pièces jointes

Bonjour DAVID-44-,
VB:
Sub copier_coller_ligne_suivant_calcul()
Dim i&
For i = Range("G" & Rows.Count).End(xlUp).Row To 9 Step -1
    If Val(Cells(i, 7)) - Val(Cells(i, 5)) > 0 Then
        Rows(i + 1).Insert
        Rows(i).Copy Rows(i + 1)
        Cells(i + 1, 5) = ""
        Cells(i + 1, 7) = Val(Cells(i, 7)) - Val(Cells(i, 5))
    End If
Next
End Sub
A+
 
Une solution plus élaborée pour éviter d'insérer de nouveau des lignes si on relance la macro :
VB:
Sub copier_coller_ligne_suivant_calcul()
Dim dercol%, i&, sup As Boolean, j%
dercol = ActiveSheet.UsedRange.Column + ActiveSheet.UsedRange.Columns.Count - 1
Application.ScreenUpdating = False
For i = Range("G" & Rows.Count).End(xlUp).Row To 9 Step -1
    If Val(Cells(i, 7)) - Val(Cells(i, 5)) > 0 And Cells(i, 5) > 0 Then
        Rows(i + 1).Insert 'insère une ligne
        Rows(i).Copy Rows(i + 1)
        Cells(i + 1, 5) = ""
        Cells(i + 1, 7) = Val(Cells(i, 7)) - Val(Cells(i, 5))
        sup = True
        For j = 1 To dercol
            If Cells(i + 1, j) <> Cells(i + 2, j) Then sup = False: Exit For
        Next
        If sup Then Rows(i + 1).Delete 'supprime la ligne insérée
    End If
Next
End Sub
 

Pièces jointes

Vous êtes génial!
Merci beaucoup.
Juste une dernière question, quand le calcul est composé avec des chiffres avec des virgules, le résultat est arrondi. Est-il possible d'avoir le bon résultat pas arrondi, mais avec la virgule ?

Aussi est-il possible dans le résultat de la ligne "ajoutée" de supprimer les annotations dans les cellules "F" ?

Merci encore.
 
Dernière édition:
Fichier (2) avec la macro complétée :
VB:
Sub copier_coller_ligne_suivant_calcul()
Dim dercol%, i&, v#, sup As Boolean, j%
dercol = ActiveSheet.UsedRange.Column + ActiveSheet.UsedRange.Columns.Count - 1
Application.ScreenUpdating = False
For i = Range("G" & Rows.Count).End(xlUp).Row To 9 Step -1
    v = Val(Replace(Cells(i, 7), ",", ".")) - Val(Replace(Cells(i, 5), ",", "."))
    If v > 0 And Cells(i, 5) > 0 Then
        Rows(i + 1).Insert 'insère une ligne
        Rows(i).Copy Rows(i + 1)
        Cells(i + 1, 6).Validation.Delete 'supprime la liste de validation
        Cells(i + 1, 5) = ""
        Cells(i + 1, 7) = v
        sup = True
        For j = 1 To dercol
            If Cells(i + 1, j) <> Cells(i + 2, j) Then sup = False: Exit For
        Next
        If sup Then Rows(i + 1).Delete 'supprime la ligne insérée
    End If
Next
End Sub
En colonne F les "annotations" sont en fait des listes de validation.
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
14
Affichages
569
Réponses
9
Affichages
581
Retour