Visual Basic - Ajout de ligne si condition

Bonjour,

Je bloque sur un truc simple

J'ai besoin de détailler des lignes tels que :
Initialement :
A1 : Nom 1 ¤ B1 : Volume 1
A2 : Nom 2 ¤ B2 : Volume 2
....

Apres retraitement je voudrais obtenir :
Si les volumes > 30, créer des lignes tels que
Volume 1 = 80 Volume 2 = 15

A1 : Nom 1 ¤ B1 : 30
A2 : Nom 1 ¤ B2 : 30
A3 : Nom 1 ¤ B3 : Volume 1 - (B1+B2) = 20
A4 : Nom 2 ¤ B4 : 15

Un truc generique qui peux fonctionner quelque soit le nb de ligne à traiter ou le volume à détailler

Merci d'avance
Configuration: Excel 97 - VB 6.3

9 réponses

  1. Sub Feuil2_Bouton1_Clic()
    Sheets("Feuil1").Select
    Columns("A:B").Select
    Selection.Copy
    Sheets("Feuil2").Select
    Cells(1, 1).Select
    ActiveSheet.Paste

    i = 2
    j = 2
    Do Until i = 20

    If Cells(i, 2).Value > 30 And Cells(i, 2).Value <= 60 Then
    Sheets("feuil2").Select

    Cells(i + 1, 1).Select
    Selection.EntireRow.Insert
    volume1 = Cells(i, 2).Value
    Cells(i, 1).Font.Bold = True
    Cells(i + 1, 1).Font.Bold = True

    Cells(i + 1, 1).Value = Cells(i, 1).Value

    Cells(i, 2).Value = 30
    Cells(i + 1, 2).Value = volume1 - 30

    End If
    If Cells(i, 2).Value > 60 Then
    Cells(i + 1, 1).Select
    Selection.EntireRow.Insert
    Selection.EntireRow.Insert

    volume1 = Cells(i, 2).Value
    Cells(i, 1).Font.Bold = True
    Cells(i + 1, 1).Font.Bold = True
    Cells(i + 2, 1).Font.Bold = True

    Cells(i + 1, 1).Value = Cells(i, 1).Value
    Cells(i + 2, 1).Value = Cells(i, 1).Value

    Cells(i, 2).Value = 30
    Cells(i + 1, 2).Value = 30
    Cells(i + 2, 2).Value = volume1 - (Cells(i + 1, 2).Value + Cells(i, 2).Value)
    End If

    i = i + 1
    Loop
    End Sub
    1. bonjour

      je t creer un code mais il faut que ton volume soit superieur a 80 et non a 30

      pour pouvoir faire 30+30+la difference

      si tu prend pour exemple 80
      tu met 30 en b1
      tu met 30 en B2
      il te reste dc 20 en c2
      la ok
      mais si tu as 40
      tu met 30 en b1
      tu met 30 en b2
      tu met 0 en c2 et en plus ton voulume né plus bon!!!

      voici le code
      i = 2
      j = 2
      Do Until i = 10
      If Cells(i, 2).Value > 80 Then
      Cells(i + 1, 1).Select
      Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
      Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
      volume1 = Cells(i, 2).Value
      Cells(i + 1, 1).Value = Cells(i, 1).Value
      Cells(i + 2, 1).Value = Cells(i, 1).Value

      Cells(i, 2).Value = 30
      Cells(i + 1, 2).Value = 30
      Cells(i + 2, 2).Value = volume1 - (Cells(i + 1, 2).Value + Cells(i, 2).Value)

      End If
      i = i + 1
      Loop
      1. tiens je l ai un peu modifier pour que ce mette en gras les ligne modifier par le programme

        i = 2
        j = 2
        Do Until i = 10
        If Cells(i, 2).Value > 80 Then
        Cells(i + 1, 1).Select
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        volume1 = Cells(i, 2).Value
        Cells(i, 1).Font.Bold = True
        Cells(i + 1, 1).Font.Bold = True
        Cells(i + 2, 1).Font.Bold = True

        Cells(i + 1, 1).Value = Cells(i, 1).Value
        Cells(i + 2, 1).Value = Cells(i, 1).Value

        Cells(i, 2).Value = 30
        Cells(i + 1, 2).Value = 30
        Cells(i + 2, 2).Value = volume1 - (Cells(i + 1, 2).Value + Cells(i, 2).Value)

        End If
        i = i + 1
        Loop
        1. Merci mais je comprend pas vraiment ton code et surtout son résultat:
          Je reformule mon pb :
          J'ai actuellement dans la Feuille 1 :
          A1 : X ¤ B1 : 80
          A2 : Y ¤ B2 : 15
          ......

          Je voudrais faire une macro pour avoir en résultat en Feuille 2 :
          A1 : X ¤ B1 : 30
          A2 : X ¤ B2 : 30
          A3 : X ¤ B3 : 20
          A4 : Y ¤ B4 : 15
          ....

          En gros le client X me demande 80 pallettes, on n'en livre que 30 par camions
          donc il faut faire 3 camions d'où détaillé la commande sur 3 lignes dans ce cas si.

          J'esperes que c'est plus clair

          Merci d'avance
          1. le code que je t donné fais ce que tu demande sauf que c la feuille qui est modifié tu ne m'avais pas dis que c t sur une autre feuille
            je vais modifié le code!!!

            petite question c tjs 30 le max ?
            1. Oui dans cet exemple c'est 30 le max
              apres je retravaillerais le code selon mes besoins.
              1. Bonjour,

                Merci pour le code.
                Par contre j'ai une erreur : rond rouge croix blanche : 400

                Tu l'as?