Excel : remplissage automatique d'une cellule lors de la modification d'une aute [Résolu]

Signaler
Messages postés
15
Date d'inscription
lundi 22 mai 2006
Statut
Membre
Dernière intervention
4 janvier 2007
-
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
-
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

Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
4
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é
Messages postés
15
Date d'inscription
lundi 22 mai 2006
Statut
Membre
Dernière intervention
4 janvier 2007

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
Messages postés
15
Date d'inscription
lundi 22 mai 2006
Statut
Membre
Dernière intervention
4 janvier 2007

Ok merci, je regardes ça demain.
Messages postés
15
Date d'inscription
lundi 22 mai 2006
Statut
Membre
Dernière intervention
4 janvier 2007

Tu peux m'expliquer le fonctionnement de la fonction ?
Messages postés
169
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
7 avril 2008
2
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
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
4
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é
Messages postés
15
Date d'inscription
lundi 22 mai 2006
Statut
Membre
Dernière intervention
4 janvier 2007

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
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
4
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é