question de Visual Basic - Programmation
Marsh Posté le 01-08-2001 à 13:38:25
Le plus simple (ne sachant pas comment est construit ton tableau ni comment sont stockée les données) c'est d'intercepter soit l'événement keypress soit le changement de focus. Là encore ça dépand de ce que tu veux faire.
Mais il y a peut être d'autre solutions
Marsh Posté le 01-08-2001 à 13:44:46
en fait je vais prendre un cas tt simple
on met un "1" ds la case A1
puis je replace le "1" par un "2"
puis j'amerais lancer une fonction (qui lance un MsgBox par exemple) mais le message ce lance UNIQUEMEMT si il voit que ds la case "A1" il y a un "2". Si il y a encore un "1" pas de changement donc le message ne s affiche pas.
j espere que j ai ete assez clair? meci pour les elements de reponse
Marsh Posté le 01-08-2001 à 13:54:30
Si ta donnée initiale n'est pas stockée en dur je ne voit qu'un seul moyen c'est d'intercepter l'événement keypress; qd l'utilisateur prend le focus sur une case et presse une touche tu interceptes le tout etpeux donc controler s'il change le contenu ou pas.
Si ta donnée est stockée en dur y'a pas de pb il suffit de comparer en temps et en heure
Marsh Posté le 01-08-2001 à 14:04:29
en fait je bosse pour une boite et je dois faire un devis pour des client et tt ca
si par exemple on change le nom d un client pendant le devis(faute d orthographe) il fo que j'alerte la personne pour qu elle resauve le tout voila pour te mettre dans le bain
je pense que de comparez avec le temps semple etre une bonne idee, les donnees du client SONT sauvegarder ds un fichier excel mais pas par exemple le nom qui a ete modifier.
pourrait tu te dire comment faire avec l'heure?
Merci mille fois
Marsh Posté le 01-08-2001 à 17:11:05
Tu peut peut etre essayer la procedure "sub Worsheet_change(byval Target as change)"
appliquée a ta feuille de calcul
pour ce faire tu dois aller dans l'explorateur de projet puis trouver ta feuille puis dans le code selectioner "Worksheet" et "change" avec les ascenseurs
au final chaque fois que tu change quelque chose dans la feuille la procédure est déclenchée
Marsh Posté le 01-08-2001 à 19:04:07
cool pas mal meme tres bien je te dit merci. Mais si veux appliquer cette méthode uniquement a quelque case de la feuille excel et pas a toute la feuille tu fais comment?
encore merci ca avance.
Marsh Posté le 02-08-2001 à 16:45:59
Une solution est de copîer a l'ouverture du classeur ta zone a surveiller
dans une autre feuille exemple:
DANS CODE FEUIL1:
Private Sub Worksheet_Change(ByVal Target As Range)
modifie = False
For i = 0 To 5 ' pour tester la zone A1:A6 de feuil1
If Range("A1" ).Offset(i) <> Sheets("feuil2" ).Range("a1" ).Offset(i) Then
modifie = True
MsgBox ("la cellule " & Range("A1" ).Offset(i).Address & " a changee" )
Sheets("feuil2" ).Range("a1" ).Offset(i) = Range("A1" ).Offset(i) 'enregistre les nouveaux changements
End If
Next
End Sub
DANS CODE THISWORKBOOK:
Private Sub Workbook_Open()
' a l'ouverture du classeur
Sheets("feuil1" ).Range("a1:a6" ).Copy
Sheets("feuil2" ).Range("a1" ).PasteSpecial
End Sub
Marsh Posté le 02-08-2001 à 17:06:38
HOU LALA mais c est tout bon ca merci poup le tuyau je te test puis je te dis si ca marche
merci tout plein
Marsh Posté le 02-08-2001 à 17:17:34
en fait apres reflexion c bon mais ca reponds pas a ce que je veux.
j explique les etapes de mon probleme
1: j ouvre la feuille excel
2: je modifie une case en question , je sauve
3: je remodifie la meme case
4: je veux fermer la fueille
5: un message dois venir puisque j ai modifier la case et pas encore sauver
dans ta methode ca compare le texte a l ouverture et moi je veux savoir si on a modifier une case Apres l'ouverture
il doit exister une commande qui dit :
Si la case A1 a changer INDICE = TRUE
Et qd je ve fermer la feuille on test la valeur de INDICE si c'est TRUE on envoie le message et si c'est FALSE on dit rien
Cette commande existe t-elle? ou n importe quelle autre commande quite a magouiller?
Encore Merci
Marsh Posté le 03-08-2001 à 14:36:15
SI J'AI BIEN COMPRIS CE QUE TU VEUX ALORS:
si tu veut seulement regarder s'il y a des changements a la fermeture du classeur tu rajoute la procédure Workbook_BeforeClose et tu met dedans le code de Worksheet_Change
la procedure Worksheet_Change permet bien de verifier les changements apres l'ouverture car tout changement dans feuil1 est automatiquement mis a jour dans feuil2 par:
Sheets("feuil2" ).Range("a1" ).Offset(i) = Range("A1" ).Offset(i)(i) 'enregistre les nouveaux changements
si tu veut u message seulement a la fermeture tu supprime msgbox dans Worksheet_change
Marsh Posté le 03-08-2001 à 14:42:18
je te rassure tu as bien compris
ca devrait marcher...enfin je veux dire c'est ce que je veux faire. Je le test et je te tient au courrant
en tout cas merci Beaucoup pour ton aide
Marsh Posté le 03-08-2001 à 16:47:44
jujugoldman a écrit a écrit : je te rassure tu as bien compris ca devrait marcher...enfin je veux dire c'est ce que je veux faire. Je le test et je te tient au courrant en tout cas merci Beaucoup pour ton aide |
En faite pour que cela fonctione il faut remplacer ces 2 lignes dans Worksheet_change:
MsgBox ("la cellule " & Range("A1" ).Offset(i).Address & " a changee" )
Sheets("feuil2" ).Range("a1" ).Offset(i) = Range("A1" ).Offset
par :reponse=MsgBox ("la cellule " & Range("A1" ).Offset(i).Address & " a changee Prendre en compte?",4)
if reponse =vbYes then Sheets("feuil2" ).Range("a1" ).Offset(i) = Range("A1" ).Offset(i) 'enregistre les nouveaux changements
Marsh Posté le 01-08-2001 à 13:20:07
quelle est la commande qui permet de voir si le contenu d'une case excel a changer ?