Code pour détecter un changement à l'intérieur d'une cellule excel

Résolu
cs_jordinette Messages postés 134 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 5 avril 2007 - 3 mars 2005 à 08:55
cs_jordinette Messages postés 134 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 5 avril 2007 - 3 mars 2005 à 17:01
Bonjour à tous!
Je dois manipuler deux classeur Excel avec une macro, si une cellule de la colonne B est modifier dans le classeur 1 je dois insérer une nouvelle ligne dans le classeur 2. Insérer une ligne ce n'est pas difficile, mais je n'arrive pas a trouver comment détecter la modification d'une cellule dans une colonne bien précise.
Merci d'avance pour votre aide.
Bonne journée
Jordinette

4 réponses

mrdep1978 Messages postés 402 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 7 juin 2009 7
3 mars 2005 à 12:30
Tu ne dois pas avoir de code dans le classeur 2.
Depuis ton classeur 1, tu as :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim li_Ligne As Integer
'Si on saisit dans la colonne 3
If Target.Column = 3 Then
'Bloque le rafraichissement de l'écran pendant qu'on joue avec les "Activate"
Application.ScreenUpdating = False
With Workbooks("Classeur2")
'Sélectionne le classeur "Classeur2" -> nécessaire pour utiliser "Selection"
.Activate
'Détermine la ligne suivante
li_Ligne = Selection.Row + 1
'Selectionne une cellule de la ligne en prévision du déclenchement suivant
.ActiveSheet.Cells(li_Ligne, 1).Activate
'Resélectionne le classeur actuel
Me.Activate
'Rafraichit l'écran
Application.ScreenUpdating = True
'Ecrit "a" dans cette fameuse ligne, colonne 1
.ActiveSheet.Cells(li_Ligne, 1).Value = "a" & li_Ligne
'Ecrit "b" dans cette fameuse ligne, colonne 2
.ActiveSheet.Cells(li_Ligne, 2).Value = "b" & li_Ligne
End With
End If
End Sub


Le seul problème est de trouver dans quel classeur tu dois écrire (ici, Classeur2)
3
mrdep1978 Messages postés 402 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 7 juin 2009 7
3 mars 2005 à 10:18
Tu dois utiliser soit :
- l'événement Change de l'objet Worksheet de la feuille dans laquelle tu saisis.
Il passe en paramètre la cellule modifiée (Target) Target.Column te renvoie le numéro de colonne de la cellule.
- l'événement SheetChange de l'objet Workbook (dans ThisWorkbook). Il récupère les modifications dans toutes les feuilles du classeur et passe en paramètre la feuille (Sh) et la cellule (Target) modifiées.
0
cs_jordinette Messages postés 134 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 5 avril 2007
3 mars 2005 à 11:57
Euh oki! merci pour ton aide!
Mais comment je relie les deux classeurs car en VBa j'ai pas réussie a faire un module commun à tout les classeurs ouvert? car j'ai réussie a faire une détection de changement à l'interieur d'une cellule, mais j'arrive po a faire k'une varible Changement, ke je met à True lorsqu'il ya un changement, soit vue par l'autre classeur. Genre:
classeur1.changement = true

sur le classeur2 mettre:
if changement = true then
"ajouter une ligne sous la cellule active"
end if

j'espère que c'est compréhensible.
Bonne journée
Jordinette
0
cs_jordinette Messages postés 134 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 5 avril 2007
3 mars 2005 à 17:01
Merci pour ton aide.j'en ai encore pour quelques heures de galères visiblement, tout ça parce que VBA ne pe po généré un module global et que lon pe po préciser le classeur de l'éventement à suivre... c'est relou vive VB tout court!
bonne soirée
Jordinette
0
Rejoignez-nous