Macro pour copier / coller - Valeur

alexanbat

XLDnaute Junior
Bonjour,

Dans l'un de mes fichiers je souhaite faire un "copier/coller - valeur" recurrent de deux cellules. Dans le fichier sources toutes ces cellules calculent un =recherchev() a partir d'un autre onglet.

Je souhaiterais des lors qu'un statut apparait ("completed") dans une cellule defini, je puisse activer via un bouton poussoir le fameux "copier /coller - valeur" pour figer les cellules en question.

Il n'est pas possible de faire cette prouesse via une formule quelconque. La seule solution est de passer par une macro. Or je ne ne maitrise pas du tout le sujet.

J'ai mis un piece jointe un echantillon de mon fichier.


Merci pour le coup de main !!
AL
 

Pièces jointes

  • Copier coller - valeur par macro.xlsx
    87.6 KB · Affichages: 121

Modeste

XLDnaute Barbatruc
Re : Macro pour copier / coller - Valeur

Bonjour alexanbat,

Personne aurais une idee du comment faire ??
As-tu posé la question à l'enregistreur de macros?

La vraie question est: "dans quelle mesure cette macro te permettrait-elle de gagner du temps!?" Pour autant que je sache, la mise à jour d'une cellule par formule ne provoque pas d'événement qui permettrait de déclencher la macro. ... donc, soit tu dois sélectionner les cellules concernées avant de cliquer sur le bouton (mais alors, tu auras aussi vite fait de faire ton collage spécial "à la main" :confused:), soit tous les x tu cliques sur le bouton et la macro "scanne" toute la colonne, à la recherche du mot "Completed" et fait le collage spécial (mais si tu as plusieurs milliers de lignes ...)

Une autre solution serait de capturer l'événement qui se produit quand tu encodes les dates et/ou le "X" dans la 3e ligne de chaque petit tableau, mais il faudrait que tu nous en dises un peu plus.
 

alexanbat

XLDnaute Junior
Re : Macro pour copier / coller - Valeur

[Bonjour Modeste,

J'ai essaye avec l'enregistreur de macro en passant par des filtres. Lorsque j'arrive a l'action de "Copier/ Coller valeur" dans la zone selectionnee pour le faire en masse. Excel me dit que cela n'est pas possible car les cellules ne sont pas de la meme taille et/ou du meme format. De ce fait impossible d'aller plus loin...

A ta question : "Dans quelle mesure cette macro te permettrait-elle de gagner du temps!?"
Celle-ci pourrait m'aider a effectuer une manoeuvre qui s'avere dans le fond simple mais qui peut etre longue et compliquee lorsque que l'on a un fichier de plusieurs milliers de lignes !!!


Je ne sais pas ce que tu entends pas "capturer l'evenement". Mais l'enchainement des faits est le suivant :

Si "date de debut realisee" (3e ligne) et "date de fin realisee" (3e ligne) <> " " (par saisie manuelle)
et si
"X" mentionne (par saisie manuelle)

Alors le statut apparait comme "completed" (automatique par le biais d'une formule)

Alors "date de debut planifiee" et "date de fin planifiee" (1ere ligne) = Appliquer "COPIER/COLLER - Valeur" sur ces 2 cellules.
 

Modeste

XLDnaute Barbatruc
Re : Macro pour copier / coller - Valeur

Bonsoir,

Ce que j'avais en tête: si tu saisis manuellement le 'X' en colonne H après t'être assuré que les dates de début et fin de réalisation aient bien été encodées, on peut demander à Excel de faire le copier-coller "valeurs et formats des nombres" au moment précis où le fameux 'X' est encodé.
Le changement de valeur dans une cellule est un événement (pas du genre qui nous rendrait célèbre, toi ou moi ;), mais un événement pour la feuille de calcul). On peut donc, par macro, dire à Excel: "je profite de cet événement pour réaliser telle ou telle action"
Avec ton bouton, c'est au clic sur ledit bouton qu'un événement survient (dont on peut lâchement profiter aussi) et donc ce que je dis c'est "plutôt que saisir une donnée, puis cliquer sur un bouton (avec le risque d'oublier), faisons une seule manipulation" (la mention "Completed" pouvant être ajoutée par la même occasion)

Avec le système que tu envisageais, en dehors du fait qu'Excel proteste, tu es obligé de penser à cliquer sur ton bouton ... à heures fixes, avant d'aller dormir, chaque fois que tu as encodé 3 'X', ou Dieu sait quelle autre occasion.
Il me semble (mais j'insiste sur le semble!) qu'on peut automatiser, de manière plus "souple"
J'essaierai de te faire un petit exemple ... un peu plus tard (mais si tu me lis avant, dis-nous déjà si ça t'intéresse ou si j'ai compris de travers :confused:)

Edit: le ventre plein, je m'y suis remis et propose donc une petite illustration en pièce jointe. En colonne H et dans la dernière ligne de chaque petit tableau, double clique sur un 'X' existant ou saisis-le au clavier (après avoir pris soin de mémoriser les dates) puis, au moment où tu as validé, vérifie si le résultat pour les 2 dates du même petit tableau est correct ... et dis-nous si ça te convient.
 

Pièces jointes

  • Copier coller - valeur (alexanbat).xlsm
    89.9 KB · Affichages: 113
Dernière édition:

alexanbat

XLDnaute Junior
Re : Macro pour copier / coller - Valeur

Bonjour,

Tout a d'abord desole de ne pas avoir repondu plus tot... Je suis sous la vague avec le taff...
En tout cas ce que tu me proposes, reponds parfaitement a mes attentes et ca marche bien. J'obtiens ce que je veux d'un point de vue resultat. C'est cool.

Par contre je ne comprends vraiment pas comme tu as fait !! J'ai cherche comme tu avais pu faire. Mais j'ai rien trouve. J'ai pas trouve de macro enregistree dans le fichier ou autre. Comment tu as fait pour faire comprendre a Excel "l'evemenent" du "X" ?????? :confused:

Un grand merci pour ton aide et la solution.

AL
 

sadness78

XLDnaute Junior
Re : Macro pour copier / coller - Valeur

Bonjour alexanbat, Modeste

La macro de Modeste se trouve sur la feuille2 "CBS_Gantt chart" qui est la suivante :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Target.Column <> 8 Then Exit Sub
    If (Target.Row + 1) Mod 4 = 0 And UCase(Target) = "X" Then
        Target.Offset(-2, -3).Resize(1, 2).Copy
        Target.Offset(-2, -3).Resize(1, 2).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
        Application.CutCopyMode = False
    End If
End Sub

Merci à Modeste pour ce code qui peux toujours servir, juste une petite question à quoi fait référence le "Mod 4"

Cordialement,

Sad
 

Modeste

XLDnaute Barbatruc
Re : Macro pour copier / coller - Valeur

Bonsoir le fil,

@alexanbat: pour compléter les infos données par sadness78, il ne reste qu'à te dire comment rendre ce code visible: dans ce cas-ci, le plus simple est le clic droit sur l'onglet de la feuille "CBS_Gantt chart" et, dans le menu contextuel, choisir de "Visualiser le code" (la fenêtre du Visal Basic Editor va s'afficher: c'est là qu'on écrit les macros)
Quand quelqu'un rédige un bout de code -à moins qu'il ne s'agisse d'un expert- il convient de tester, pour vérifier si certains cas de figure pourraient survenir, qui n'ont pas été prévus. Viendra ensuite (peut-être) un moment où tu songeras à des améliorations possibles ... en cherchant un peu à droite ou à gauche (mais seulement quand tu pourras sortir de dessous la vague!) vois ce que tu arrives à comprendre et n'hésite pas à revenir, si tu as des questions ... nous, on ne bouge pas! ;)

@sadness78: merci d'avoir pris le relais pour les explications :)
Pour ta question, Mod est un opérateur qui renvoie le reste de la division d'un nombre par un autre.
Dans le cas présent, comme chaque petit tableau fait 4 lignes (3 lignes pour les données + une petite ligne faisant office de "séparation"), il faut arriver à repérer les lignes dont le numéro serait un multiple de 4. Le premier 'X' est en ligne 11. Si on écrit "(Target.Row + 1) Mod 4 = 0", on évalue l'équivalent de "le reste de la division de 12 (ligne 11 + 1) par 4 donne-t-il 0?". Si la réponse est oui, 12 est bien un multiple de 4.
Si ce n'est pas trop clair, tu peux illustrer en tapant, dans une cellule de la feuille de calcul directement
Code:
=MOD(LIGNE();4)
à recopier vers le bas, sur autant de lignes que tu le souhaites (mais une vingtaine devraient suffire :rolleyes:)

Bonne soirée à tout le monde,
 

Discussions similaires

Statistiques des forums

Discussions
312 228
Messages
2 086 420
Membres
103 205
dernier inscrit
zch