Excel : remplissage automatique d'une cellule lors de la modification d'une aute

Résolu
cs_Toxik13 Messages postés 15 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 4 janvier 2007 - 22 mai 2006 à 16:29
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 - 24 mai 2006 à 21:43
Je me suis inventé un cas concret pour vous expliquer mon probleme; imaginons une tombolat.

Dans la colone A il y aurait les prénom,

dans la colone B le nombre de tickets venduse

et dans la colone C la date de modification du nombre de ticket vendu

Je voudrais que lorsque l'on modifie la valeur du nombre de tickets vendus d'une ligne, par exemeple B5, la valeur de C5 soit remplacer par la date du jour.

8 réponses

valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
22 mai 2006 à 19:31
Salut,
 Private SubWorksheet_Change(ByVal Target As Range)

  ' On travaille sur toute la colonne B

  ' Et on vérifie que la cellule qui change se trouve bien dans la colonne B

  Dim MyRange As Range: Set MyRange = ActiveSheet.Range("B:B")

  If IsCellInRange(Target, "B:B") = True Then

    ' A toi de mettre en forme la date en fonction de ce que tu veux

    Target.Offset(0, 1).Value = Date

  End If

End Sub

' Ce code est à mettre dans un module
 
FunctionIsCellInRange(Rng As Range, RangeName As String) As Boolean

  On Error Resume Next

  IsCellInRange = _

      Not (Application.Intersect(Rng, Range(RangeName)) Is Nothing)

End Function

Si t'as des questions n'hésites pas

Cordialement, Jean-Paul  
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
3
cs_Toxik13 Messages postés 15 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 4 janvier 2007
23 mai 2006 à 10:34
Ca y est j'ai réussi, j'ai modifié un peu ton code

Dim MyRange As Range: Set MyRange = ActiveSheet.Range(
"B:B")
 

If
IsCellInRange(Target, "B:B") = True Then

par

Dim MyRange As Range: Set MyRange = ActiveSheet.Range(
"B:B")
 

If
IsCellInRange(Target, MyRange) = True Then

et aussi la fonction car je n'ai pas complétement compris le fonctionnement de la tienne

Function IsCellInRange( CelluleAs Range, ZoneAs Range) As Boolean

IsCellInRange = False
    
If Not Intersect(Cellule, Zone) Is Nothing Then IsCellInRange = True

End Function

Merci beaucoup pour ton aide
3
cs_Toxik13 Messages postés 15 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 4 janvier 2007
22 mai 2006 à 20:41
Ok merci, je regardes ça demain.
0
cs_Toxik13 Messages postés 15 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 4 janvier 2007
23 mai 2006 à 09:54
Tu peux m'expliquer le fonctionnement de la fonction ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kalobit Messages postés 169 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 7 avril 2008 2
23 mai 2006 à 12:09
salut,

la fonction utilisée par valtrase teste si les deux ranges ont une intersection

comme il s'agit d'un coté d'une cellule et de l'autre d'une plage, si il y a intersection alors la cellule est forcément dans la plage.

is nothing permet de tester la valeur retournée par intersect.

On aurrai pu utiliser aussi union de la manière suivante

if  union (range(cell),range(zone)).address = range(zone).address then
        IsCellInRange = true
else
    IsCellInRange = false
end if

voilà,

++++

[mailto:K@lobit K@lobit] < Ne pas clicker ici
Mon Site < Mais ici
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
23 mai 2006 à 19:10
Re,
Rien à rajouter à Kalobit.
Fait des essais avec l'autre fonction c'est toujours bon de se creuser les méninges.
Fais du pas à pas (F8) et regardes les valeurs.
Si qqch te chagrine n'hésites pas à demander.
Juste une question tu as changé le code pour le comprendre ou parcequ'il ne tournait pas ?

Cordialement, Jean-Paul  
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0
cs_Toxik13 Messages postés 15 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 4 janvier 2007
24 mai 2006 à 00:26
Ca ne marchait pas, pour IsCellInRange = _ je ne comprend pas :)

et IsCellInRange(Rng As Range, As String
)

j'ai mis <gras>Zone As Range car il smeble que RangeName doit un nom interdit à l'utilisation, et en Range car intersect ne marche pas entre RAnge et String

enfin c'est ce que j'ai cru comprendre
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
24 mai 2006 à 21:43
Re, tu aurais pu changer le String en Range dans la fonction ce qui te permet de travailler sur une plage et pas sur une valeur String (qui représente une plage)
donc :
FunctionIsCellInRange(Rng As Range, RangeName As Range) As Boolean


 
On Error Resume Next

 
IsCellInRange = _

     
Not
(Application.Intersect(Rng, RangeName) Is Nothing)

End Function

Cordialement, Jean-Paul  
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0
Rejoignez-nous