Copier la valeur d'une cellule qui calcule automatiquement dans une autre cellule

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Re : Copier la valeur d'une cellule qui calcule automatiquement dans une autre cellul

Bonjour

Afin d'être le plus précis possible, je vous ai mis en fichier joint mon fichier de travail.

Il fonctionne correctement, cependant il est très lent à remplir.

En effet dès qu'on insère des heures par stagiaire comme on est dans une procédure du type
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

TOUT EST RECALCULE EN PERMANENCE, ce qui devient vite pénible.

C'est pourquoi je souhaitais que les calculs effectués en AO ne le soient qu'en fonction des lignes remplis.

EX : Je remplis J4,K4 ....les calculs s'effectuent en AO4 et que comme la valeur en AO4 change : le TAUX D'ABSENTÉISME en AP4 se calcule.

TOUT cela sans l'ensemble des calculs automatiques de la feuille ne s'effectuent...

Tout cela afin de réduire les délais de saisie.


J'espère avoir été plus clair 😀

Cordialement et Merci d'avance

Pascal
 

Pièces jointes

Re : Copier la valeur d'une cellule qui calcule automatiquement dans une autre cellul

Une précision ... à quoi sert ceci (une cellule égale à elle-même)? :

Code:
Else
    If Range("AN5").Value <> Range("AN4").Value Then
        Range("[COLOR="Red"]AN5[/COLOR]").Value = Range("[COLOR="Red"]AN5[/COLOR]").Value
    End If
End If

Cordialement
 
Re : Copier la valeur d'une cellule qui calcule automatiquement dans une autre cellul

Bonsoir

Par defaut, lorsqu'une durée théorique est indiquée en AN4 et qu'une valeur d'heure est fournie en M5 par exemple, alors AN5 prend automatiquement la valeur d'AN4. En écrivant que AN4 =AN4 je force pour que la valeur prise en compte soit celle entrée manuellement et non celle de AN4. En effet certains stagiaires peuvent avoir un total d'heure différent des autres.

Voilà; une petite idée pour optimiser le code pour que ca tourne plus vite ? 😕

Merci d'avance.

Pascal
 
Re : Copier la valeur d'une cellule qui calcule automatiquement dans une autre cellul

Bonjour,

Si j'ai bien suivi (?) tu peux te servir de Target passé en paramètre.
Target est la référence de la cellule ayant été modifiée, déjà tu pourras alléger ton programme en te servant de .offset(ligne,colonne) plutôt que d'avoir 10-20 fois la même chose.

Et tu as Application.EnableEvents = False qui te permet d'interdire les autres évènements. A voir où le placer dans ton programme, sans doute au tout début puisque tu modifies ANx et que tu ne le testes jamais en 1er test...
Ne pas oublier de rétablir avec =true avant de quitter la procédure

eric
 
Dernière édition:
Re : Copier la valeur d'une cellule qui calcule automatiquement dans une autre cellul

Bonsoir eriiiic

Ta solution me semble vraiment intéressante, mais étant une bille en programmation, peux-tu illustrer tes propos basés sur mon fichier en considérant les lignes 4, 5, 6.

Merci d'avance 😉

Pascal
 
Re : Copier la valeur d'une cellule qui calcule automatiquement dans une autre cellul

Je pars de :
Code:
    If Range("AO5").Value = 0 Or Range("AO5").Value = "" Then
        Range("AN5").Value = 0
    Else
        If Range("AN5").Value = 0 Or Range("AN5").Value = "" Then
            Range("AN5").Value = Range("AN4").Value
        Else
            If Range("AN5").Value <> Range("AN4").Value Then
                Range("AN5").Value = Range("AN5").Value
            End If
        End If
    End If
Je suppose que tu le lances suite à une modif de AO5
Apparemment AN5 est relative, et AN4 absolu (???)
De plus tu utilises l'evenement SelectionChange alors que j'ai l'impression que c'est plus Change qui t'interesse.

Voici ce que ça donnerait (je n'ai pas contrôlé la logique de ton code, je doute aussi de l'utilité de Range("AN5").Value = Range("AN5").Value...) :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("AO4:AO19")) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    If Target.Value = 0 Or Target.Value = "" Then
        Target.Offset(0, -1).Value = 0
    Else
        If Target.Offset(0, -1).Value = 0 Or Target.Offset(0, -1).Value = "" Then
            Target.Offset(0, -1).Value = Range("AN4").Value
        Else
            If Target.Offset(0, -1).Value <> Range("AN4").Value Then
                Target.Offset(0, -1).Value = Target.Offset(0, -1).Value
            End If
        End If
    End If
    Application.EnableEvents = True
End Sub
Je te laisse tester ...
eric
 
Dernière édition:
Re : Copier la valeur d'une cellule qui calcule automatiquement dans une autre cellul

Bonjour le forum, Bonjour Éric

J'ai testé ta solution qui effectivement optimise la vitesse, mais cela ne marche pas. 🙁

En effet, si je mets une valeur en AM 4, le calcul s'effectue en AO4 (normal) correspondant au nombre d'heures réelles effectuées par le stagiaire N°1.

J'indique en AN4, le Nombre d'heures réelles prévues pour la quinzaine.

Je mets une valeur en AM 5 pour le Stagiaire 2.
Ce qui se passe dans mon fichier (mal optimisé).
1 - Le Calcul s'effectue en AO5 et
2 - La Valeur de AO4 est copiée en AO5.

Avec le code proposé, aucune valeur en AO5 n'est copiée.

Pour résumer : Quand une valeur varie en AO de manière automatique RIEN ne se passe en AN.
En revanche, quand je mets une valeur manuellement (J'écrase donc la formule d'addition des cellules de la ligne), là, ça marche....

Ma demande reste donc la même depuis l'ouverture de la discussion : 😀
Quand une valeur inscrite dans une cellule (AM5 par exemple) fait variée de manière automatique un processus de calcul dans une cellule (AO5) alors, le fait que cette valeur automatique change (en AO5) ALORS une action est déclenchée sur une autre cellule (dans mon exemple, fichier joint, la valeur inscrite en AN4 est copiée en AN5).

Merci d'avance pour votre patience

Cordialement

Pascal
 

Pièces jointes

Re : Copier la valeur d'une cellule qui calcule automatiquement dans une autre cellul

Bonjour,

Regarde ceci ...

- cela a l'air de fonctionner comme le tien
- les cellules coloriées ont été nommées
- cela fonctionne en ajoutant ou supprimant des lignes de stagiaires (il faut qu'un nom ou autre chose soit écrit dans la colonne Stagiaires)
- dans la partie "saisie des heures", si tu effaces ou mets à 0 une seule cellule, cela fonctionne mais, pour le moment, si tu sélectionnes plusieurs cellules à effacer, ce n'est pas traité (à voir quand le reste sera vérifié)
- normalement, tu devrais pouvoir traiter les autres mois par copie de la feuille, en corrigeant pour chaque mois, la référence des zones de saisie nommées

Nota : le petit Sub Relance() doit être utilisé pendant ta mise au point dans le cas ou tu constates qu'il ne se passe rien. En effet, si tu es sorti après Application.EnableEvents = False et avant Application.EnableEvents = True les événements ne sont plus détectés...

Cordialement
 

Pièces jointes

Re : Copier la valeur d'une cellule qui calcule automatiquement dans une autre cellul

ATTENTION ! : ce que j'ai donné plus haut fonctionne ainsi parce que le calcul des cellules "intéressantes" est produit par la saisie de valeurs dans une autre cellule. Si c'était le résultat d'un autre calcul, cela ne se déclencherait pas. Si, par exemple, tu mets dans l'une des cellules de saisie := 5+alea() et que tu fais calculer par F9, la cellule change mais il ne se passe rien d'autre.

Cordialement
 
Re : Copier la valeur d'une cellule qui calcule automatiquement dans une autre cellul

Re

mécano41, vraiment TOP le travail.

Je rencontre juste un p'tit problème.

J'ai inséré un onglet avant l'onglet Septembre et la Erreur.
Cela me semble logique car cela décale le pointage indiqué dans le module.

Comment modifie t'on le pointage ? 😀

Code:
With Worksheets(1)
    NbStagiaires = .Range(.Range("A1").Offset(.Range("Lign1Stag").Row - 1, .Range("Lign1Stag").Column - 1), .Range("A1").Offset(65535, .Range("Lign1Stag").Column - 1).End(xlUp)).Rows.Count

Je pense que cela me servira pour programmer les autres mois.

Encore Merci 🙂

Pascal
 

Pièces jointes

Re : Copier la valeur d'une cellule qui calcule automatiquement dans une autre cellul

Bonjour,

J'ai apporté quelques modifs pour faciliter la création des nouvelles feuilles :

- j'ai laissé un minimum de code dans chaque feuille et j'ai transféré le reste dans le module1
- j'ai pris en compte le nom de feuille que je passe en paramètre dans les appels de Sub (je passe également la Cible)

Pour créer la feuille d'un autre mois, il faut :

- faire un clic droit sur l'onglet du mois à copier
- faire Déplacer ou copier
- cocher Créer copie puis OK
- changer le nom de l'onglet dans la copie (on pourrait le faire en auto après saisie du nom de mois dans la feuille...)
- écrire en A4 le nom du mois ; le nom en haut des quinzaines et les dates se changent automatiquement
- ne pas oublier de corriger la définition de la zone bleue de la deuxième quinzaine (Insertion/Nom/Définir) et ta formule de la colonne CC - cela pourrait se faire en auto mais il faut tenir compte des années bissextiles etc ...

Vérifie bien ...

Je n'ai pas encore fait le traitement de l'effacement de plusieurs cellules simultanément dans les zones de saisie des heures ; regarde si c'est vraiment indispensable ...

Cordialement
 

Pièces jointes

Re : Copier la valeur d'une cellule qui calcule automatiquement dans une autre cellul

Là je dis carrément : BRAVO

Merci d'avoir consacré du temps à mon problème.

Vraiment .... Heu....MERCI (les mots me manquent) 😀

Cordialement

Pascal

NB : Pour ce qui est d'effacer en lot les cellules, pour moi cela ne me semble pas indispensable...
En revanche, je sais forcément qu'une assistante en éprouvera fortement le besoin....🙄
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour