copier coller partiel

  • Initiateur de la discussion Edouard
  • Date de début
E

Edouard

Guest
Bonsoir le forum

J’ai besoin de réaliser un ' copier coller ' de la valeur des cellules de la plage (A5 :V20) en A50. Valeur des cellules qui ne possèdent pas de formules. Tout en sélectionnant la plage entière sans recopier les formules ; Sans avoir à déprotéger la feuille.
Avec tous mes essais cela me parait mission impossible mais peut être que quelqu’un a une idée. Même s’il fallait reconstruire la feuille.

Merci d’avance.
A+
[file name=CopierColler.zip size=45438]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/CopierColler.zip[/file]
 

Pièces jointes

  • CopierColler.zip
    6 KB · Affichages: 39
  • CopierColler.zip
    6 KB · Affichages: 46
  • CopierColler.zip
    6 KB · Affichages: 42

myDearFriend!

XLDnaute Barbatruc
Bonsoir Edouard,

Comme je te le disais dans mon précédent message, si tu veux de l'aide, il va falloir que tu en dises un peu plus...
A toi d'indiquer ce qui ne marche pas et dans quelle configuration ça ne marche pas...

Du style, je fais ça, puis ça, et voilà ce que j'obtiens au lieu de...

N'ayant aucune idée de ce que les utilisateurs sont sensé faire dans ton classeur, j'espère que tu comprends qu'il est très difficile de passer son temps à cliquer de tous les côtés pour chercher une quelconque erreur...

Cordialement,
 
E

Edouard

Guest
Bonsoir Didier et le forum

Effectivement quand on a la ' tête dans le guidon ' on ne pense plus à son entourage.

Le fichier ci-joint s’ouvre automatiquement sur une page ' accueil ' très édulcorée pour les besoins des 50 K. Un clic sur le drapeau ouvre la feuille ' notice '.
Les soucis commencent avec la feuille ' Niveau 1 ' .
Niveau 2 et Niveau 3 sont semblables.

J’ai recopié tes codes qui permettent de faire un copier coller d’une plage de cellules avec des cellules protégées, sans pour autant déprotéger la feuille ni copier les formules qui s’y trouvent (ton classeur : source 2).

Exécution : je sélectionne par exemple la plage C5 : V6 de la feuille Niveau 1, je clic sur la zone de texte collage partiel (au dessus de date de naissance) pour lancer la macro 'CopierColler ' et là au lieu d’avoir le message : ' dans quel classeur ouvert voulez vous réaliser le collage ' tout ce bloque.

Si un autre classeur semblable et vide, était ouvert à la même page, on aurait le message ' Dans ce classeur actif, choisissez maintenant l’onglet et la plage de réception '
Ce qui fonctionne très bien dans ton exemple source 2 mais pas ici.

J’ai laissé toutes ces macros car il semble y avoir une interaction entre elles.
Merci de suivre le fil.
A+
[file name=partiel2.zip size=49842]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/partiel2.zip[/file]
 

Pièces jointes

  • partiel2.zip
    48.7 KB · Affichages: 29

myDearFriend!

XLDnaute Barbatruc
Bonsoir Edouard, le Forum.

Tout d'abord, bravo pour ces explications fort claires cette fois !

En fait, ton problème semble très simple à régler, et sauf erreur de ma part point de conflit avec tes macros là... En fait, tu as bien copié le Userform (qu'il convenait de renommé 'usfCible') dans ton classeur mais... tu as tout bonnement oublié de copier le code qui l'accompagne ! ;)

Et oui, le module du Userform contient du code VBA lui aussi, code indispensable puisqu'il permet la gestion des évènements liés à ce dernier.

Pour schématiser, dans ton module de code général Module3, la procédure CopierColler() :[ol][li]Mémorise (copie) les données sélectionnées.[/li]
[li]Affiche le Userform 'usfCible' dont le rôle est de permettre à l'utilisateur de désigner le classeur, la feuille et la plage cible (*).[/li]
[li]Procède au 'collage' partiel des données dans la cible ainsi désignée.[/li][/ol](*) Lors de l'affichage du usfCible, c'est le code VBA lié à ce Userform qui prend la relève, traite les instructions de l'utilisateur, puis redonne la main à la procédure principale à la fermeture de ce dernier...

Tu trouveras ci-joint ton classeur modifié en conséquence
(Attention : j'ai dû supprimer l'onglet 'Niveau 3' pour être en dessous des 50 Ko autorisé en pièce jointe).

Cordialement, [file name=partiel3.zip size=44795]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/partiel3.zip[/file]

Message édité par: myDearFriend!, à: 09/05/2005 21:59
 

Pièces jointes

  • partiel3.zip
    43.7 KB · Affichages: 20
E

Edouard

Guest
Bonjour Didier

Ok ça marche.
J'avais bien vu le changement du nom de l' Userform en usfCible mais je ne savais pas le modifier .maintenant c'est bon.
Par contre j'étais loin de me douter qu'il y avait aussi du code dans cette userform !

Un détail encore c'est vitesse d'execution de source 2 par rapport à partiel 3. Dans le premier le collage est quasi instatané dans le second c'est au goutte à goutte.
Merci à +
 

myDearFriend!

XLDnaute Barbatruc
Bonsoir Edouard,

Je viens de regarder. Désolé, je n'ai pas remarqué de différence notable dans le traitement du collage entre le niveau 2 et le 3...
Toutefois, pour tenter d'accélérer un peu la procédure, tu peux essayer de remplacer la Sub CopierColler() par celle-ci (j'ai mis en gras les lignes rajoutées, le reste ne change pas) :

Sub CopierColler()
Dim TabTemp As Variant
Dim
L As Long
Dim
C As Integer
Dim
Dest As Range, CellCible As Range
      'Charge les données de la sélection dans un tableau variant temporaire
      TabTemp = Selection.Value
      'Choix de la destination
      usfCible.Show
      'Récupère l'adresse choisie
      On Error GoTo Fin
      Set Dest = Range(DebDest)
      On Error GoTo 0
      Application.ScreenUpdating = False
      Application.Calculation = xlCalculationManual
      'Traitement du 'Collage' partiel
      For L = 1 To UBound(TabTemp, 1)
            For C = 1 To UBound(TabTemp, 2)
                  Set CellCible = Dest.Offset(L - 1, C - 1)
                  'Seulement si aucune formule en cible
                  If Not CellCible.HasFormula Then
                        CellCible.Value = TabTemp(L, C)
                  End If
            Next C
      Next L
      Application.Calculation = xlCalculationAutomatic
      ActiveSheet.Calculate
      Application.ScreenUpdating = True
Exit Sub
Fin:
      MsgBox 'Abandon du collage partiel. ', vbOKOnly + vbExclamation, 'Copier/coller'
End Sub

Je te souhaite bon courage pour la suite...

Cordialement,
 
E

Edouard

Guest
Bravo.
Comme tu as pu t'en rendre compte je ne ne conais pas grand chose en macro je travaille par similitude et tatonnement mais là tu lui lui a mis un super tonus à la 'macro' .Le collage est devenu instantané.

Les macro qui transforment les Minuscules en majuscules et vice versa
doivent contribuées au ralentissement

Encore merci je devrais pouvoir maintenant me débrouiller tout seul :p
 
E

Edouard

Guest
Bonsoir Didier et le Forum

Je pensais ne plus avoir besoin d’aide mais j’ai écrit trop tôt …

Après avoir rentré à nouveau toutes les macros que j’utilisais auparavant dans cette appli, sauf bien entendu celle que tu n’aimes pas, celle qui joue au magicien et fait disparaître les barres d’outils.
Je me retrouve avec un blocage.
Si je lance un ' copier coller partiel ' avec ta macro, sans avoir ouvert au préalable un classeur identique et vide, tout se passe bien, avec les messages qu’il convient.

Par contre dés qu’un classeur semblable est ouvert pour recevoir le collage, et après avoir pointé la feuille et la cellule de réception, dés le clic sur ' coller ' tout se bloque.

Rappel : le classeur s’ouvre obligatoirement sur la feuille d’accueil, un clic sur le drapeau envoie à la feuille notice, puis sélection des notes avec la feuille niveau 1.

Bon week-end ; si tu trouves le temps de me ' dépatouiller ' je pars avec mon club à Bordeaux
:( [file name=Partiel4.zip size=46024]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Partiel4.zip[/file]
 

Pièces jointes

  • Partiel4.zip
    44.9 KB · Affichages: 18

myDearFriend!

XLDnaute Barbatruc
Bonsoir Edouard,

Bon Edouard, je vais essayer de t'expliquer ce qui se passe...

- Tu as recopié mon 'Module3' d'origine dans un module nommé CopierColler : ce n'est déjà pas une bonne idée de nommer ton module du même nom que la procédure qu'il contient. Ce n'est pas là ton problème mais, d'une manière générale, il vaut mieux éviter tout conflit de nom dans le code et les objets VBA....

- Tu as recopié l'ensemble du code du module, mais tu en a supprimé l'entête. Dans cet entête apparaissaient dans l'ordre :[ol][li]L'intruction 'Option Explicit' : là, ce n'est pas non plus une bonne idée de supprimer cette ligne (surtout si tu n'as pas vraiment fini le développement de ton application).[/li]
[li]Le nom de l'auteur de cette procédure (moi lol !) : là, effectivement, la suppression n'est pas bloquante non plus, mais je t'informe que ce n'est pas correct vis-à-vis de l'auteur original et ça ne se fait pas ! D'autant que dans le module de code du userform, tu en fais tout autant, mais en laissant simplement le titre du sujet ![/li]
[li]En supprimant cet entête de module, tu as bien sûr supprimé également la ligne :
Public DebDest As String
Là, par contre, tu trouveras l'origine de tes soucis...[/li][/ol]Je te souhaite bon courage pour la suite, car cette fois, j'abandonne le suivi de ce fil....
 
E

Edouard

Guest
Bonjour Didier

Merci pour tes derniers conseils que j'ai respecté ce qui fait que mon appli fonctionne bien;

Désolé pour ce que tu penses etre une indélicatesse et qui pourrait en etre effectivement une si je l'avais fait intentionnellement .
j'ai tout simplement recopier ton dernier post, sans réfléchir, post oû tu as réécrit le code du module 3 pour que la macro soit plus rapide .
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 336
Messages
2 087 389
Membres
103 534
dernier inscrit
Kalamymustapha