Microsoft 365 Appliquer un coefficient sur une plage de cellules

Carine13c

XLDnaute Nouveau
Bonjour
Je souhaite appliquer un coefficient dans un tableur avec des prix qui va, par exemple de b17 à p26.
Le coefficient lui serait dans une cellule fixe, mais il serait à changer tout les mois, je souhaiterai connaitre le moyen de l'appliquer à toute la section B17 : p26, sans passer par une formule, ni un collage spécial, je suppose qu'une macro serait le plus adapté, mais je ne sais absolument comment la mettre en place
 
Dernière édition:

danielco

XLDnaute Accro
Bonjour
Je souhaite appliquer un coefficient dans un tableur avec des prix qui va, par exemple de b17 à p26.
Le coefficient lui serait dans une cellule fixe, mais il serait à changer tout les mois, je souhaiterai connaitre le moyen de l'appliquer à toute la section B17 : p26, sans passer par une formule, ni un collage spécial, je suppose qu'une macro serait le plus adapté, mais je ne sais absolument comment la mettre en place
Bonjour,
Avec le coefficient en A1 :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim C As Range
  If Target.Address = "$A$1" And IsNumeric(Target) Then
    For Each C In [B17:P26]
      C = C * Target
    Next C
  End If
End Sub
Pour l'installer, fais un clic droit sur l'onglet de la feuille et clique sur "Visualiser le code3. Colle le code dans la partie droite de la fenêtre qui s'ouvre. Ferme cette fenêtre et enregistre le classeur avec le type "Classeur Excel prenant en charge les macros"
Daniel
 
Dernière édition:

cp4

XLDnaute Barbatruc
Bonjour @Carine13c :), @xUpsilon ;), @danielco ;),

@Carine13c : une manipulation sous excel (voir démo). Mettre le coefficient dans une cellule, faire une copier de cette cellule; ensuite sélectionner la plage, puis collage spécial et choisir multiplier et enfin ok
coefficient.gif

Bonne journée.
 

Carine13c

XLDnaute Nouveau
Bonjour,
Avec le coefficient en A1 :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim C As Range
  If Target.Address = "$A$1" And IsNumeric(Target) Then
    For Each C In [B17:P26]
      C = C * Target
    Next C
  End If
End Sub
Pour l'installer, fais un clic droit sur l'onglet de la feuille et clique sur "Visualiser le code3. Colle le code dans la partie droite de la fenêtre qui s'ouvre. Ferme cette fenêtre et enregistre le classeur avec le type "Classeur Excel prenant en charge les macros"
Daniel
Bonjour Danielco,
merci pour ces explications, je vais tenter de les appliquer et vous dis si j'ai réussi :)
 

Carine13c

XLDnaute Nouveau
Bonjour @Carine13c :), @xUpsilon ;), @danielco ;),

@Carine13c : une manipulation sous excel (voir démo). Mettre le coefficient dans une cellule, faire une copier de cette cellule; ensuite sélectionner la plage, puis collage spécial et choisir multiplier et enfin ok
Regarde la pièce jointe 1154722
Bonne journée.
Bonjour
Je vous remercie pour votre temps, mais j'ai tenté cette option, mais ce n'est pas adapté à mon besoin, car les données d'origine qui permettent la base de calcul doivent être tjs les même, il n'y a que le coefficient qui changera tous les mois
 

danielco

XLDnaute Accro
Bonjour
Je vous remercie pour votre temps, mais j'ai tenté cette option, mais ce n'est pas adapté à mon besoin, car les données d'origine qui permettent la base de calcul doivent être tjs les même, il n'y a que le coefficient qui changera tous les mois
La macro fera exactement ce que fait le collage spécial. Est-ce que tu veux dire que, si par exemple, B17 = 5 au départ et que tu appliques le coefficient 2 (donc B17=10), si tu mets ensuite le coefficient 3, tu t'attends à avoir 15 en B17 ?
 

cp4

XLDnaute Barbatruc
Bonjour
Je vous remercie pour votre temps, mais j'ai tenté cette option, mais ce n'est pas adapté à mon besoin, car les données d'origine qui permettent la base de calcul doivent être tjs les même, il n'y a que le coefficient qui changera tous les mois
Un petit fichier aurait facilité la compréhension de ta demande. Tu as bien fait une capture de ta feuille pour illustrer ton problème. Pourquoi donc n'as-tu pas joint ton fichier?
A+

edit: si j'ai bien compris la demande, mets ce bout de code dans la module de la feuille (clic-droit ensuite 'visualiser le code' ou bien dans le VBE doule-clic sur la feuille concernée).
VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$11" Then
        Call appliquer_coefficient
    End If
End Sub

Et cette macro dans un module standard
Code:
Option Explicit

Sub appliquer_coefficient()
   Dim tb, Coeff As Range, i As Integer, j As Integer
   Set Coeff = ActiveSheet.Range("A11")
   tb = ActiveSheet.Range("A5").CurrentRegion
   For i = 1 To UBound(tb, 1)
      For j = 1 To UBound(tb, 2)
         tb(i, j) = tb(i, j) * Coeff
      Next j
   Next i
   ActiveSheet.Range("A13").Resize(UBound(tb), UBound(tb, 2)) = tb
   ActiveSheet.Range("A13").CurrentRegion.NumberFormat = "0.00"
Set Coeff = Nothing
End Sub
Dès que tu changes le coefficient la plage se met à jour.

Bonne soirée.
 
Dernière édition:

cp4

XLDnaute Barbatruc
@mapomme ;) bonsoir

@Carine13c : code ci-dessous au cas où saisie coefficient nul ou non numérique
VB:
Option Explicit

Sub appliquer_coefficient()
   Dim tb, Coeff As Range, i As Integer, j As Integer
   Set Coeff = ActiveSheet.Range("A11")
   tb = ActiveSheet.Range("A5").CurrentRegion
   If IsNumeric(Coeff) And Coeff.Value <> 0 Then
      For i = 1 To UBound(tb, 1)
         For j = 1 To UBound(tb, 2)
            tb(i, j) = tb(i, j) * Coeff
         Next j
      Next i
      ActiveSheet.Range("A13").Resize(UBound(tb), UBound(tb, 2)) = tb
      ActiveSheet.Range("A13").CurrentRegion.NumberFormat = "0.00"
   Else
      MsgBox "saisir une valeur numérique différente de zéro"
      Coeff.Select
   End If
   Set Coeff = Nothing
End Sub
 

Discussions similaires