piloulac
Messages postés21Date d'inscriptiondimanche 10 juin 2007StatutMembreDernière intervention28 décembre 2008 17 déc. 2008 à 01:05
Dans l'arborescence "Microsoft Excel Objets" de ton projet ;
dans le module de la feuille ou tu veux tester ta cellule ;
dans la section "Worksheet",
colle ce code :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.ActiveWindow.ActiveCell.Row = 1 And _
Application.ActiveWindow.ActiveCell.Column = 1 Then
If Application.ActiveWindow.ActiveCell.Formula <> "" Then
UserForm1.Show
End If
End If
End Sub
p4uline
Messages postés6Date d'inscriptionmercredi 6 février 2008StatutMembreDernière intervention29 janvier 2009 17 déc. 2008 à 08:27
Bonjour, et merci pour vos réponse
" Pour commencer qu'entends tu par pleine ? Est-ce "non vide" ? "
C'est le changement d'état que je veux détecter, de vide à non-vide then apparition de l'userform
piloulac : imaginons que je veuille faire apparaitre un userform seulement quand une case de la colonne H change, comment puis je faire pour modifier ton code?
Merci d'avance
VaZy
Vous n’avez pas trouvé la réponse que vous recherchez ?
piloulac
Messages postés21Date d'inscriptiondimanche 10 juin 2007StatutMembreDernière intervention28 décembre 2008 17 déc. 2008 à 11:29
Ce code teste aussi bien le passage de vide à nonvide que le passage de nonvide à nonvide différent.
Inconvénient : le test ne fonctionne que si on valide la cellule en colonne H par la touche Entrée. Si on utilise la souris pour sortir de la cellule testée ça ne marche pas et même ça occasionne des erreurs.
A copier dans un Module Worksheet
Private AncienneSaisie
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
''Ici, on enregistre la valeur actuelle
AncienneSaisie = Application.ActiveWindow.ActiveCell.Text
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Lgn
''ceci marche seulement si on valide par "Entrée"
''le contenu d'une cellule dans la colonne H
If Application.ActiveWindow.ActiveCell.Column = 8 Then
Lgn = Application.ActiveWindow.ActiveCell.Row
Lgn = Lgn - 1
If Lgn = 0 Then Exit Sub
If ActiveSheet.Cells(Lgn, 8).Formula <> AncienneSaisie Then
UserForm1.Show
End If
End If
End Sub
p4uline
Messages postés6Date d'inscriptionmercredi 6 février 2008StatutMembreDernière intervention29 janvier 2009 17 déc. 2008 à 13:05
Etant donné que le fichier va etre remplie par un grand nombre de personnes, il est certain que toutes les personnes ne vont pas appuyer sur entree pour sortir de la case, c'est donc une solution que je ne peux envisager, il n'y a aucun autre moyen de le faire?
piloulac
Messages postés21Date d'inscriptiondimanche 10 juin 2007StatutMembreDernière intervention28 décembre 2008 17 déc. 2008 à 17:44
OK Compris ton problème.
Ca devrait marcher.
après avoir créé un feuille nommée "compare" dans ton classeur
copie dans un Module Worksheet :
Private AncienneSaisie
Private LgnCours
'''Créer une feuille nommée "compare" dans votre classeur
'''Travaillez sur données contenues en colonne H de la "Feuil1"
''' Cette "Feuil1" doit être active
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'' si on est pas en colonne H, on fait rien
If ActiveCell.Column <> 8 Then Exit Sub
'''sinon :
''on copie la colonne H vers feuille compare
Application.ActiveSheet.Columns(8).Copy
ThisWorkbook.Worksheets("compare").Cells(1, 1).PasteSpecial
Application.CutCopyMode = False
''Ici, on enregistre la valeur de la cellule en cours
AncienneSaisie = ActiveCell.Text
''Ici, on récupère l'index de ligne en cours
LgnCours = ActiveCell.Row
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
''si la cellule était vide
If AncienneSaisie = "" Then
''et qu'elle l'est encore alors on fait rien
If ActiveSheet.Cells(LgnCours, 8).Text = "" Then Exit Sub
'''sinon, on affiche.
UserForm1.Show
End If
''si la cellule créée est identique à l'initiale, on fait rien
If ActiveSheet.Cells(LgnCours, 8).Text = Sheets("compare").Cells(LgnCours, 1).Text Then Exit Sub
'''sinon, on affiche.
UserForm1.Show
End Sub