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

    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. 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,

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

                Tu l'as?