Code qui ne fonctionne pas.

Hulk

XLDnaute Barbatruc
[ Hello les couches-tard :D ]

J'ai encore un petit souci avec un code qui m'empêche d'aller dormir sur mes deux oreilles :D

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...

Une aide me serait bien utile svp :D

Très grand merci !

cdt, Hulk.
 

Pièces jointes

  • Test.xls
    25 KB · Affichages: 63
  • Test.xls
    25 KB · Affichages: 66
  • Test.xls
    25 KB · Affichages: 65

James007

XLDnaute Barbatruc
Re : Code qui ne fonctionne pas.

Bonjour,

Pas de besoin de bouton ...
Code:
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 +
 

vbacrumble

XLDnaute Accro
Re : Code qui ne fonctionne pas.

Bonjour Hulk, James007, le forum

Une petite question du matin:

J'ai voulu joué au malin :D

et résultat Plouf, le bec dans l'eau

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 ?
 

Hulk

XLDnaute Barbatruc
Re : Code qui ne fonctionne pas.

Hello,

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
Si quelqu'un a la gentillesse de m'aider...

Par avance grand merci !

Cdt, Hulk.
 

ngogoisidore

XLDnaute Occasionnel
Re : Code qui ne fonctionne pas.

Bonjour Hulk, vbacrumble, James007,

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 :) ...

@+
 

Hulk

XLDnaute Barbatruc
Re : Code qui ne fonctionne pas.

Salut Isidore,

Tu veux dire comme ça
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
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
Cdt, Hulk.
 

ngogoisidore

XLDnaute Occasionnel
Re : Code qui ne fonctionne pas.

Re,

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 ?

@+
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 686
Messages
2 090 949
Membres
104 705
dernier inscrit
Mike72