Coment contrôler une cellule

Pit

XLDnaute Nouveau
Bonjour,
Je cherche à faire des contôles et des calculs entre cellules lors de la saisie utilisateur, mais je ne sais comment faire.
Par exemple quand la cellule (i:1) est modifiée, je veux appliquer une formule de calcul sur la cellule (i:2).
Je pense que c'est du B A BA, mais je débute !!!
Merci de votre aide.
 

Gorfael

XLDnaute Barbatruc
Re : Coment contrôler une cellule

Pit à dit:
Bonjour,
Je cherche à faire des contôles et des calculs entre cellules lors de la saisie utilisateur, mais je ne sais comment faire.
Par exemple quand la cellule (i:1) est modifiée, je veux appliquer une formule de calcul sur la cellule (i:2).
Je pense que c'est du B A BA, mais je débute !!!
Merci de votre aide.
Salut
un peu plus de précision ne serait pas un luxe.
si dans I2, tu mets une formule commençant par "=" et incluant le terme I1 tu afficheras un résultat fonction de I1.
Donc, qu'est-ce que tu veux faire exactement

A+
 

Pit

XLDnaute Nouveau
Re : Coment contrôler une cellule

En fait j'ai plusieurs besoins :
Il s'agit d'un fichier des services fréquentés par des salariés. Le fichier gère l'historique avec des cellules de date début et fin.
1) En cas de changement de service, je dois vérifier qu'une date début est toujours égale à fin précédente + 1 jour.
2) lors de la saisie des dates début et fin (format jj/mm/aaaa) je veux calculer AAAAMM de ces dates dans des cellules masquées.
J'ai d'autres contôles à mettre en place, mais avec ces deux exemples je pourai extrapoler.
Merci pour votre aide
En fait j'aimerai le faire en macro, mais je ne sais pas comment on detecte un évenement sur une cellule.
 
Dernière édition:

Gorfael

XLDnaute Barbatruc
Re : Coment contrôler une cellule

Pit à dit:
En fait j'ai plusieurs besoins :
Il s'agit d'un fichier des services fréquentés par des salariés. Le fichier gère l'historique avec des cellules de date début et fin.
1) En cas de changement de service, je dois vérifier qu'une date début est toujours égale à fin précédente + 1 jour.
2) lors de la saisie des dates début et fin (format jj/mm/aaaa) je veux calculer AAAAMM de ces dates dans des cellules masquées.
J'ai d'autres contôles à mettre en place, mais avec ces deux exemples je pourai extrapoler.
Merci pour votre aide
En fait j'aimerai le faire en macro, mais je ne sais pas comment on detecte un évenement sur une cellule.
Re...
On peut le faire, mais expliquer sans support est assez compliqué.
Donc, le mieux serait que tu crées une copie de ton fichier, que tu ne laisses que 1 ou 2 lignes avec un exemple significatif de ce que tu veux avoir
On pourra te faire une macro sur mesure, avec des explications pour le code ce qui te permettra de la modifier.

Si tu as une page par service, il faut que tu laisses deux feuilles avec deux noms bidons et un changement de service pour les 2, avec un fonctionnement correct pour un et incorrect pour l'autre en précisant ce qui est mauvais (ou bon) et pourquoi.

T'as de quoi t'amuser :).

avec un exemple comme ça, on peut généralement te faire ta macro, qui est souvent utilisable sans retouche, ou avec très peu de modifs.

A+
 

Pit

XLDnaute Nouveau
Re : Coment contrôler une cellule

Votre proposition est sympa, mais je souhaitais le faire moi même.
j'ai principalement besoin de savoir comment on detecte qu'un cellule a été mise à jour. je pensais écrire des macros dans "Private Sub Worksheet", mais le pb c'est que je n'arrive pas à détecter les saisies dans les cellules.
 

Gorfael

XLDnaute Barbatruc
Re : Coment contrôler une cellule

Pit à dit:
Votre proposition est sympa, mais je souhaitais le faire moi même.
j'ai principalement besoin de savoir comment on detecte qu'un cellule a été mise à jour. je pensais écrire des macros dans "Private Sub Worksheet", mais le pb c'est que je n'arrive pas à détecter les saisies dans les cellules.
Re...
plusieurs solutions possibles
passage en VBE
dans la fenêtre VBA - project, il y a les feuilles du classeurs
tu double-clic sur celle que tu veux surveiller
Fenêtre de droite (où on entre le code des macros)
en haut, case de gauche, avec la zone de liste déroulante (Général) tu sélectionnes Worksheet
Case de droite, tu sélectionne Change

tu vas avoir 2 macros de créée :
Worksheet_Change : elle est lancée par une modification dans la feuille
Worksheet_SelectionChange : elle est lancée par une modification de la sélection dans la feuille

Private Sub Worksheet_Change(Byval Target as range)
dim Str_Test as String '
str_test=target.address(0,0)
end sub

tu mets un point d'arrêt sur le titre de la macro (tu cliques sur la barre grise à gauche de private Sub..., un point marron apparait sur cette barre

tu retourne sur ta feuille
tu vas sur la cellule B2, et tu double-cliques dessus pour passer en édition. tu sorts en validant l'édition par enter => Excel détecte un changement et met le pointeur de macro sur la ligne de titre et attend.
le pointeur de macro est représenté par un surlignage jaune s'il n'y a pas eut de modification de couleur dans windows.

Tu mets ta souris sur Str_Test (pas ke dim str_test, le second)
avec F8, tu fais avancer le pointeur sur la ligne suivante (il saute Dim... qui est une déclaration et non une instruction)

la valeur de str_test apparaît dans une info-bulle
ou sinon, Menu Affichage>>fenêtre variables locales

tu remets le focus sur la fenêtre de code en cliquant dedans, et tu refais F8
Normalement ton curseur est sur End Sub
la valeur de Str_Test = "B2" : adresse de target qui est une variable système de type Range qui est une copie de la cellule modifiée, en lecture seule, mais qui contient toutes les propriétés de la cellule qu'elle représente :
adresse, valeur, format, etc.

tu peux faire la même chose avec selectionchange

A+

PS 2h50, je crois que c'est fini pour moi pour ce soir, je te souhaite une bonne nuit
 

Pit

XLDnaute Nouveau
Re : Coment contrôler une cellule

Bjr Gorfael,

Ton aide m'a permis d'avance et de commencer à structurer ma macro. Je me suis couché à 4 heures !!!!
J'arrive donc maintenant à détecter une modification dans une cellule, à savoir laquelle c'est, et à conaitre sa valeur.
Encore un petit tuyau STP, peux tu me donner une formule exemple qui me permette de mettre à jour la cellule voisine de celle qui vient d'être mouvementée.

Merci d'avance et bonne journée ;)
 

Pierrot93

XLDnaute Barbatruc
Re : Coment contrôler une cellule

Bonjour Pit, Gorfael, le forum

pour la cellule voisine, essaies target.offset(1,2)

ou 1 représente le décalage en nombre de lignes, 2 en nombre de colonnes par rapport à target la cellule selectionnée ou changée.

Bon courage et bon dimanche
@+
 

Gorfael

XLDnaute Barbatruc
Re : Coment contrôler une cellule

Pit à dit:
Bjr Gorfael,

Ton aide m'a permis d'avance et de commencer à structurer ma macro. Je me suis couché à 4 heures !!!!
J'arrive donc maintenant à détecter une modification dans une cellule, à savoir laquelle c'est, et à conaitre sa valeur.
Encore un petit tuyau STP, peux tu me donner une formule exemple qui me permette de mettre à jour la cellule voisine de celle qui vient d'être mouvementée.

Merci d'avance et bonne journée ;)
Salut Pit, Pierrot93 et les autres
Pour déigner une cellule, comme en formule, il y a plusieurs instructions.

Range ("A1") désigne la cellule ligne 1 colonne A. Ou pour être plus précis la cellule à l'adresse $A$1 mais pour que ça reste lisible dans le reste je continuerai en enlevant les $.
Dans une boucle, on peut utiliser avec un X servant de compteur de lignes:
Range("A" & x) déigne Ax avec x nombre long
Range("A1:B5") pour désigner la plage A1:B5
Range("A" & x & ":B" & y) désigne la plage Ax:By

Cells(1,2) désigne la cellule 1re ligne 2ème colonne (B1)

ensuite l'adressage relatif :
ce que t'a donné Pierrot93 :
Range("A1").OffSett(1,2) : cellule à 1 ligne et 2 colonne de la cellule A1 = C2

Pour désigner la valeur d'une cellule, la propriété est value
Range("A1").value = valeur contenue dans la cellule A1. Mais comme c'est la propriété par défaut, on n'est pas obligé de la mettre
Range("A1") = 12 est équivalent à Range("A1").Value = 12

Attention : Excel est fait par des américains, converti en d'autres langues.
Donc le format des dates en VBA est le format américain, quelque soit l'option régionale (petit casse-tête qui m'a faire perdre des cheveux :) ).
Donc si tu compares des cellules d'une feuille, le format est cellule de l'option régionale, mais si tu fixe une valeur date dans ton code, il faut faire attention
Sub test()
Range("A1") = #1/12/2006#
End Sub
donne sous Excel :A1 = 12/01/2006 Des fois ça aide pas a trouver ton bonheur ;)

A+
 

Discussions similaires

Réponses
13
Affichages
733
Réponses
5
Affichages
320

Statistiques des forums

Discussions
312 489
Messages
2 088 855
Membres
103 976
dernier inscrit
kaizertv2001@gmailcom