XL 2019 Diviser les valeurs des lignes d'une plage par un nombre à partir d'une cellule

Bidexcel

XLDnaute Nouveau
Bonjour le forum,
je viens vous exposer mon projet.
J'ai un tableau sous forme d'une matrice (A1:JA56)
  • Des Symboles sur la première colonne
  • Des dates sur la première ligne
  • et dans la matrice des nombres
Je voudrais à l'aide d'une macro
  1. Pour chaque ligne de la première colonne (PALZ...…SVOZ) de la matrice
  2. Repérer la date de l'opération (sur la colonne JE) sur la première ligne de la matrice (A1:JA1)
  3. Ensuite diviser toutes les nombres pour par le coefficient à de la deuxième colonne jusqu'à la date l'opération.
Par exemple pour le symbole PALZ, la macro va fractionner toutes les valeurs de la avant la date du 03/11/2017 (plage B2:HL2) par le coef correspondant (ici 2 sur la colonne JD)

NB le bouton MULTIPLIER pourra servir de retour aux valeurs initiales avant le split
 

Pièces jointes

  • Split test.xlsx
    76.3 KB · Affichages: 15
Dernière édition:

job75

XLDnaute Barbatruc
Bonsoir Bidexcel, gbinforme,

Une autre solution très voisine car elle utilise aussi un tableau VBA :
VB:
Sub Diviser()
Macro 1
End Sub

Sub Multiplier()
Macro 0
End Sub

Sub Macro(operation As Byte)
Dim ncol%, tablo, i&, coef&, dat As Variant, j%, x$
ncol = 265 'colonnes A à JE
With Feuil1.UsedRange
    tablo = .Resize(, ncol) 'matrice, plus rapide
    For i = 2 To UBound(tablo)
        coef = Int(Val(tablo(i, ncol - 1)))
        If coef < 1 Then coef = 1
        dat = tablo(i, ncol)
        If IsDate(dat) Then dat = CDate(dat) Else dat = -1
        For j = 2 To ncol - 4
            If tablo(1, j) <= dat Then
                x = CStr(tablo(i, j))
                If IsNumeric(x) Then If operation Then tablo(i, j) = x / coef Else tablo(i, j) = x * coef
            Else
                Exit For
            End If
    Next j, i
    '---restitution---
    If .Parent.FilterMode Then .Parent.ShowAllData 'si la feuille est filtrée
    .Resize(, ncol - 4) = tablo
End With
End Sub
A+
 

Pièces jointes

  • Split test(1).xlsm
    85 KB · Affichages: 9

Bidexcel

XLDnaute Nouveau
Rebonjour à tous je reviens encore pour demander votre aide.:confused:
Pour raison de mise en forme et avoir plus de données à droite de la matrice, j'ai dû réadapter mon fichier. J'ai dû mettre les date et coef de split en début de la matrice.
J'ai essayé de réadapter le code en fonction de mon nouveau tableau mais je me plante car ne comprenant pas quel variable du code changer.
Je demande une dernière fois votre aide.
 

Pièces jointes

  • split-test-22.xlsx
    78 KB · Affichages: 7

gbinforme

XLDnaute Occasionnel
Bonsoir Bidexcel,

Voici ton classeur en .xlsm car en .xlsx les macros ne fonctionnent pas.

En voyant les fonds orange, je me demande si l'on doit aussi agir sur la date de la colonne A en première ligne.
 

Pièces jointes

  • split-test-22.xlsm
    87.5 KB · Affichages: 5

job75

XLDnaute Barbatruc
Bonsoir Bidexcel, gbinforme,

L'adaptation de mon code est facile, il est ici placé dans le module de la feuille :
VB:
Private Sub CommandButton1_Click() 'Diviser
Macro 1
End Sub

Private Sub CommandButton2_Click() 'Multiplier
Macro 0
End Sub

Sub Macro(operation As Byte)
Dim ncol%, tablo, i&, coef&, dat As Variant, j%, x$
ncol = 263 'colonnes A à JC
With Me.UsedRange
    tablo = .Resize(, ncol) 'matrice, plus rapide
    For i = 2 To UBound(tablo)
        coef = Int(Val(tablo(i, 2)))
        If coef < 1 Then coef = 1
        dat = tablo(i, 1)
        If IsDate(dat) Then dat = CDate(dat) Else dat = -1
        For j = 4 To ncol
            If tablo(1, j) < dat Then
                x = CStr(tablo(i, j))
                If IsNumeric(x) Then If operation Then tablo(i, j) = x / coef Else tablo(i, j) = x * coef
            Else
                Exit For
            End If
    Next j, i
    '---restitution---
    If Me.FilterMode Then Me.ShowAllData 'si la feuille est filtrée
    .Resize(, ncol) = tablo
End With
End Sub
A+
 

Pièces jointes

  • split-test-22(1).xlsm
    86.1 KB · Affichages: 3

Discussions similaires

Haut Bas