Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
J'ai encore un petit souci avec un code qui m'empêche d'aller dormir sur mes deux oreilles 😀
Pourquoi ce code ne joue pas ?
Code:
Private Sub BntOk_Click()
With Sheets("Feuil1").Select
If Not Application.Intersect(Target, Range("E1")) Is Nothing Then
If Target.Value = "" Then
Range("A65536").End(xlUp) = ""
Else
Range("A65536").End(xlUp).Offset(1, 0).Value = Range("E1")
End If
End If
If Not Application.Intersect(Target, Range("F1")) Is Nothing Then
If Target.Value = "" Then
Range("B65536").End(xlUp) = ""
Else
Range("B65536").End(xlUp).Offset(1, 0).Value = Range("F1")
End If
End If
End With
End Sub
Il devrait ajouter les valeurs de E1 et F1 dans les colonnes A et B, mais non...
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$1" And Not IsEmpty(Target) Then Range("A65536").End(xlUp).Offset(1, 0).Value = Target.Value
If Target.Address = "$F$1" And Not IsEmpty(Target) Then Range("B65536").End(xlUp).Offset(1, 0).Value = Target.Value
End Sub
A +
Pourquoi le code ci-dessous fonctionne trés trés mal
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, rr As Range
Set r = Range("A65536").End(xlUp).Offset(1, 0)
Set rr = r.Offset(, 1)
r = _
IIf(Target.Address = "$E$1" And Not IsEmpty(Target), _
Target.Value, vbNullString)
rr = _
IIf(Target.Address = "$F$1" And Not IsEmpty(Target), _
Target.Value, vbNullString)
End Sub
Alors que la proposition de James fonctionne impeccablement ?
Hm rien à faire je n'arrive pas à affecter l'une ou l'autre macro à un bouton sur la feuille !
Elles sont censées affecter les valeurs E1 et F1 aux colonnes A et B.
La première de James, fonctionne, mais pas avec le bouton...
Code:
If Target.Address = "$E$1" And Not IsEmpty(Target) Then Range("A65536").End(xlUp).Offset(1, 0).Value = Target.Value
If Target.Address = "$F$1" And Not IsEmpty(Target) Then Range("B65536").End(xlUp).Offset(1, 0).Value = Target.Value
ou
Code:
Private Sub BntOk_Click()
With Sheets("Feuil1")
If Not Application.Intersect(Target, Range("E1")) Is Nothing Then
If Target.Value = "" Then
Range("A65536").End(xlUp) = ""
End If
Else
Range("A65536").End(xlUp).Offset(1, 0).Value = Range("E1")
End If
If Not Application.Intersect(Target, Range("F1")) Is Nothing Then
If Target.Value = "" Then
Range("B65536").End(xlUp) = ""
End If
Else
Range("B65536").End(xlUp).Offset(1, 0).Value = Range("F1")
End If
End With
End Sub
Hulk, si tu veux placer le code de James007 dans ton évènement BntOk_Click, il faut remplacer Target par ActiveCell. En effet, Target est un paramètre de l'évènement Worksheet_Change (mais pas de BntOk_Click), qui contient la plage qui vient d'être changée.
La raison pour laquelle ta surcharge d'évènement Worksheet_Change marche mal, vbacrumble, c'est parce que cette procédure est exécutée à chaque fois qu'une cellule est changée dans la feuille, et qu'à l'intérieur même de cette procédure tu changes systématiquement des cellules (les ranges r et rr) : ceci provoque indéfiniment l'évènement Worksheet_Change. En d'autres termes, cette procédure "s'auto-appelle" jusqu'à la fin des temps 🙂 ...
If ActiveCell.Address = "$E$1" And Not IsEmpty(ActiveCell) Then Range("A65536").End(xlUp).Offset(1, 0).Value = ActiveCell.Value
If ActiveCell.Address = "$F$1" And Not IsEmpty(ActiveCell) Then Range("B65536").End(xlUp).Offset(1, 0).Value = ActiveCell.Value
Parce que ça ne joue pas.
J'ai aussi essayé comme ça, mais idem..
Code:
If ActiveCell.Address = "$F$1" And Not IsEmpty(Target) Then Range("A65536").End(xlUp).Offset(1, 0).Value = ActiveCell.Value
If ActiveCell.Address = "$F$1" And Not IsEmpty(Target) Then Range("B65536").End(xlUp).Offset(1, 0).Value = ActiveCell.Value
Et aussi
Code:
If ActiveCell.Address = [E1] And Not IsEmpty(ActiveCell) Then Range("A65536").End(xlUp).Offset(1, 0).Value = ActiveCell.Value
If ActiveCell.Address = [F1] And Not IsEmpty(ActiveCell) Then Range("B65536").End(xlUp).Offset(1, 0).Value = ActiveCell.Value
vbacrumble, c'est surtout les r = ... et rr = ... qui posent le problème.
Ce sont ces affectations des valeurs contenues dans les ranges r et rr qui provoquent l'évènement Worksheet_Change, et pas trop le fait que le valeurs affectées soient le fruit de l'instruction IIF. (Edit: mais c'est vrai que IIF, par définition, est destinée à être affectée, donc, c'est bien le choix de IIF qui force à faire une affectation à chaque passage dans l'évènement Worksheet_Change. Autant pour moi ! 🙂)
Hulk, chez moi, ta première solution :
Code:
If ActiveCell.Address = "$E$1" And Not IsEmpty(ActiveCell) Then Range("A65536").End(xlUp).Offset(1, 0).Value = ActiveCell.Value
If ActiveCell.Address = "$F$1" And Not IsEmpty(ActiveCell) Then Range("B65536").End(xlUp).Offset(1, 0).Value = ActiveCell.Value
"joue" 🙂.
Bien sur, ça ne fait pas exactement la même chose que quand on utilise Worksheet_Change, puisque l'action est produite au moment où le bouton est enfoncé et non, lorsqu'une valeur est changée.
Pour que cela marche, il faut que la cellule active soit E1 ou F1, et que tu presses ton bouton. Dans ce cas, l'une des ces valeurs est ajoutée respectivement à la colonne A ou la colonne B.
Ce n'est peut-être pas exactement ce que tu veux ?
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD