XL 2016 Remplir un tableau en fonction de la valeur d'une cellule

xamenod

XLDnaute Junior
Bonsoir,
A l'aide d'une macro, je désire remplir les cellules d'un tableau en colonne I en regard de la valeur de la cellule D5.
Je joint un fichier avec des explications plus claires.
Merci pour votre aide.
Bon weekend.

1610825065182.png
 

Pièces jointes

  • test.xlsm
    14.9 KB · Affichages: 16

soan

XLDnaute Barbatruc
Inactif
Bonsoir xamenod,

ton fichier en retour. :)

formule en i5 (déjà tirée vers le bas jusqu'en i8) :


=SI(D$5=H5;E$5;"")

je te laisse tester en choisissant successivement
les 4 valeurs A, B, C, D, de la liste déroulante.

bon weekend à toi aussi. 🍀


soan
 

Pièces jointes

  • test.xlsm
    13.9 KB · Affichages: 3

xamenod

XLDnaute Junior
Bonsoir Soan,
Merci pour ton retour. J'ai envisagé cette solution.
J'ai une macro qui fait le boulot mais qui est un peu longue.
Cela fait if range(d5) =À then
Range i5 = Range e5
If range(d5) =B then
Range i6 = range e5
Etc
J'écris avec mon téléphone, d'où les erreurs dans l'exemple de la macro. J'ai dans la liste de roulante une trantaine de choix. Je cherche à remplacer la longue instruction par une macro plus efficace et plus courte pour l'intégrer à un ensemble d'exécutions. Merci de ton aide.
Bonne soirée.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @xamenod,

Un essai dans le fichier joint via macro dans le module associé à la feuille.
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Range("d5"), Target) Is Nothing Then Range("e5").ClearContents: Application.EnableEvents = True: Exit Sub
If Not Intersect(Range("e5"), Target) Is Nothing Then
   Application.EnableEvents = False
   Cells(Application.Match(Range("d5").Value, Range("h:h"), 0), "i") = Range("e5")
   Range("d5:e5").ClearContents
   Application.EnableEvents = True
End If
Application.EnableEvents = True
End Sub
 

Pièces jointes

  • xamenod- test- v1.xlsm
    16.5 KB · Affichages: 3

xamenod

XLDnaute Junior
Bonsoir ma pomme,
Merci pour ta réponse. Cela fonctionne.
S'il y a une valeur dans une cellule de la colonne I, j'ai besoin de l'additionner avec la nouvelle valeur en e5.
Merci pour ton aide.
Bonsoir @xamenod,

Un essai dans le fichier joint via macro dans le module associé à la feuille.
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Range("d5"), Target) Is Nothing Then Range("e5").ClearContents: Application.EnableEvents = True: Exit Sub
If Not Intersect(Range("e5"), Target) Is Nothing Then
   Application.EnableEvents = False
   Cells(Application.Match(Range("d5").Value, Range("h:h"), 0), "i") = Range("e5")
   Range("d5:e5").ClearContents
   Application.EnableEvents = True
End If
Application.EnableEvents = True
End Sub
Bonsoir @xamenod,

Un essai dans le fichier joint via macro dans le module associé à la feuille.
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Range("d5"), Target) Is Nothing Then Range("e5").ClearContents: Application.EnableEvents = True: Exit Sub
If Not Intersect(Range("e5"), Target) Is Nothing Then
   Application.EnableEvents = False
   Cells(Application.Match(Range("d5").Value, Range("h:h"), 0), "i") = Range("e5")
   Range("d5:e5").ClearContents
   Application.EnableEvents = True
End If
Application.EnableEvents = True
End Sub
Bonsoir Ma pomme.
J'ai trouvé comment additionner la nouvelle valeur avec celle déjà en I.
Merci beaucoup.
Bon week-end.
Henry.
 

soan

XLDnaute Barbatruc
Inactif
Bonjour @xamenod, mapomme, le fil,

bon week-end, et désolé pour le retard de ma réponse, Henry. :oops:

en D5 : « A » ; met des nombres en E5 ; ils seront additionnés en i5 ;
si tu veux annuler un nombre qui a déjà été additionné, saisis-le en
négatif, par exemple -5 ; il sera alors retranché de la somme, car
total + (-5) = total - 5.




si tu changes D5, alors E5 est effacé ; puis les nombres que tu saisis
en E5 sont additionnés dans la bonne case de la colonne i, selon D5.

si tu mets d'autres cases sous H8:i8, elles seront prises en compte.

si tu saisis une valeur non numérique en E5, elle sera ignorée ;
si tu effaces D5 ou E5, il n'y aura aucun effet en colonne i.




SI tes données en colonne H sont toujours les mêmes que celles de
ta colonne R, dans le même ordre, alors tu peux construire ta liste
de D5 avec tes données de la colonne H ; utilise une plage nommée
pour prendre en compte l'extension de la liste, si ajouts ultérieurs ;
plage actuelle : H5:i8 ; supprime la colonne R devenue inutile.




code VBA du module de Feuil1 :

VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
    If .CountLarge > 1 Then Exit Sub
    If .Address = "$D$5" Then .Offset(, 1).ClearContents: Exit Sub
    If .Address <> "$E$5" Then Exit Sub
    Dim chn$: chn = .Offset(, -1)
    If IsEmpty(.Value) Or chn = "" Then Exit Sub
    If Not IsNumeric(.Value) Then Exit Sub
    Dim cel As Range, dlg&, lig%
    dlg = Cells(Rows.Count, 8).End(3).Row: If dlg < 5 Then Exit Sub
    Set cel = Range("H5:H" & dlg).Find(chn, , -4163, 1, 1)
    If cel Is Nothing Then Exit Sub
    lig = cel.Row: Cells(lig, 9) = Cells(lig, 9) + .Value
  End With
End Sub

si besoin, tu peux demander une adaptation.
à te lire pour avoir ton avis. ;)


soan
 

Pièces jointes

  • test.xlsm
    17.2 KB · Affichages: 2

xamenod

XLDnaute Junior
B
Bonjour @xamenod, mapomme, le fil,

bon week-end, et désolé pour le retard de ma réponse, Henry. :oops:

en D5 : « A » ; met des nombres en E5 ; ils seront additionnés en i5 ;
si tu veux annuler un nombre qui a déjà été additionné, saisis-le en
négatif, par exemple -5 ; il sera alors retranché de la somme, car
total + (-5) = total - 5.




si tu changes D5, alors E5 est effacé ; puis les nombres que tu saisis
en E5 sont additionnés dans la bonne case de la colonne i, selon D5.

si tu mets d'autres cases sous H8:i8, elles seront prises en compte.

si tu saisis une valeur non numérique en E5, elle sera ignorée ;
si tu effaces D5 ou E5, il n'y aura aucun effet en colonne i.




SI tes données en colonne H sont toujours les mêmes que celles de
ta colonne R, dans le même ordre, alors tu peux construire ta liste
de D5 avec tes données de la colonne H ; utilise une plage nommée
pour prendre en compte l'extension de la liste, si ajouts ultérieurs ;
plage actuelle : H5:i8 ; supprime la colonne R devenue inutile.




code VBA du module de Feuil1 :

VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
    If .CountLarge > 1 Then Exit Sub
    If .Address = "$D$5" Then .Offset(, 1).ClearContents: Exit Sub
    If .Address <> "$E$5" Then Exit Sub
    Dim chn$: chn = .Offset(, -1)
    If IsEmpty(.Value) Or chn = "" Then Exit Sub
    If Not IsNumeric(.Value) Then Exit Sub
    Dim cel As Range, dlg&, lig%
    dlg = Cells(Rows.Count, 8).End(3).Row: If dlg < 5 Then Exit Sub
    Set cel = Range("H5:H" & dlg).Find(chn, , -4163, 1, 1)
    If cel Is Nothing Then Exit Sub
    lig = cel.Row: Cells(lig, 9) = Cells(lig, 9) + .Value
  End With
End Sub

si besoin, tu peux demander une adaptation.
à te lire pour avoir ton avis. ;)


soan
Bonjour Soan, merci beaucoup pour ton code, il fonctionne parfaitement.
Je te souhaite une bonne soirée. Henry.
 

Discussions similaires