Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

Carine13c

XLDnaute Nouveau
Bonjour Danielco,
merci pour ces explications, je vais tenter de les appliquer et vous dis si j'ai réussi
 

Carine13c

XLDnaute Nouveau
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
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
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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…