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

  • Votes
  • Date
  • Date décroissante
  1. Bonjour,

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

    Tu l'as?
    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. Oui dans cet exemple c'est 30 le max
        apres je retravaillerais le code selon mes besoins.
        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. 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. 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. 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