Bug aléatoire Copy/Paste-Link (Cellules fusionnées)

Résolu
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 - 28 mai 2007 à 21:49
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 - 3 juin 2007 à 11:12
Bonjour,

J'ai un message d'erreur sur arrivé à la ligne ActiveSheet.Paste Link:=True
de  la macro ci-dessous ; poutant si je ferme la fenêtre d'erreur et que je relance la macro, tout se passe normalement. De plus, il arrive de façon très aléatoire que tout se passe bien (pas de message d'erreur) ...




Sub EnregistrerFiche() ' Module 3
'Enregistre les données saisies dans "Fiche" et crée une nouvelle feuille Fiche au nom du N° de Devis



    Sheets("Fiche").Select ' "Fiche" sélectionnée
    i = Sheets.Count ' compte le nombre de feuilles existantes
    Sheets("Fiche").Copy After:=Sheets(i) ' copie de "Fiche" en dernier ("Fiche(2)")
    Sheets("Fiche").Select ' "Fiche" sélectionnée
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True' "Fiche" reprotégé
    Sheets("Fiche").Visible = False' "Fiche" cachée  : ("Fiche(2)" activée)
    Sheets("Fiche (2)").Select ' sélection confirmée de "Fiche(2)" (copie de "Fiche")
    ActiveSheet.Unprotect ' "Fiche(2)" déprotégée,
    ActiveSheet.Shapes("Enregistrer").Select ' Bouton "Enregistrer" sélectionné,
    Selection.Delete ' et supprimé
    Sheets("Fiche (2)").Name = CStr(Range("A3").Value) ' "Fiche(2)" renommée avec la valeur N° de Devis en "A3"
    Application.Run "CopierFicheAuSommaire" 'Lance la copie des données de la nouvelle Fiche Devis dans le Sommaire




End Sub
' Vers Module 4



Sub CopierFicheAuSommaire() ' Module 4

' Recopie des infos dans le Sommaire à l'enregistrement de la nouvelle Fiche Devis




    ActiveSheet.Unprotect ' Fiche Devis déprotégé
    Rows("1:1").Select ' Sélection de la ligne de recopie dans la Fiche Devis
    Selection.Copy 'copie des infos (presse-papier)
    Sheets("Sommaire").Visible = True' "Sommaire" est visible,
    Sheets("Sommaire").Select ' Sélectionné,
    ActiveSheet.Unprotect ' et déprotégé,
    PremièreLigneVide = Columns(1).Find("").Row ' on y cherche la première ligne vide,
    Rows(PremièreLigneVide).Select ' on la sélectionne,

    True</gras>' et on y colle les données liées à la fiche (presse-papier) !!! PROBLEME AVEC PASTE !!!

    Sheets("Sommaire").Visible = False ' On cache "Sommaire" : la Fiche Devis est réactivée
    Rows("1:1").Select ' La ligne de recopie dans la Fiche Devis est resélectionnée,
    Selection.EntireRow.Hidden = True' et cachée
    Cells.Select ' on sélectionne toutes ses cellules
    Selection.Locked = True' on les verrouille
    Selection.FormulaHidden = False ' mais en les laissant sélectionnables,
    Range("E13").Select ' on met son message en "surbrillance",
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True ' et on active la protection de la Fiche Devis
    Sheets("Sommaire").Visible = True' "Sommaire" est à nouveau vibible
    ActiveSheet.Visible = False' La Feuille Devis (toujours active) est cachée ; "Sommaire" est alors seule visible et deevient active
    Range("A1:A2").Select ' Invite N° de Devis de "Sommaire" en "surbrillance"
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True  ' "Sommaire" reprotégé avec Filtrage autorisé




End Sub
 ' Action terminée, "Sommaire" seul affiché

Plantage au niveau de
ActiveSheet.Paste Link:=True
 


Message d'erreur    "La méthhode Paste de la classe Worksheet a échoué"
Je ne comprend pas où est l'erreur ...
Car après avoir "fermé" l'erreur 1004 ("Fin") et exécuté "BugPaste" qui relance la même macro, cette fois tout se déroule normalement...!

Sub BugPaste() ' Module 7
Sheets("sommaire").Visible = False' Recache la fiche "Sommaire"
Application.Run "CopierFicheAuSommaire" 'Relance la recopie au "Sommaire" qui a planté à ActiveSheet.Paste Link:=True
End Sub' Va au Module 4

J'ai essayé de tout écrire (Module 3 et Modue 4) dans le même module et de supprimer toute cellule fusionnée (*), sans aucune différence de résultat
...

Merci infiniment pour toute aide !

PS : (*)
A propos des cellules fusionnées quelle est la différence et comment choisir entre "Fusionner" et "Centrer sur plusieurs colonnes" ?
Impossible avec le bouton dans la barre d'outils d'Excel s'appelle "fusionner et centrer" : Y a-t-il des paramètres  de macro possibles pour celà (si ça présente un intérêt) ?
Mais peut-être cette question devra-t-elle faire l'objet d'un autre topic...

6 réponses

CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 1
30 mai 2007 à 12:03
Merci à toi MPi , et je suis ton conseil, je vire le bouton Fusionner


PS: je ne coche pas accepter car cette réponse ne concerne pas l'objet du Topic
3
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 1
3 juin 2007 à 11:12
Salut,

J'ai fini par trouver la raison : L'instruction "chercher la première ligne vide dans Sommaire" ne peut pas être placée ENTRE Copy et Paste Link
Le paliatif : Chercher la première ligne vide dans Sommaire (et la sélectionner) AVANT le copier/coller avec liaison ... 

Pour ça :

Dans le module 4, je vire les 5 lignes de code :
    Sheets("Sommaire").Visible = True
' "Sommaire" est visible,
    Sheets("Sommaire").Select ' Sélectionné,
    ActiveSheet.Unprotect ' et déprotégé,
    PremièreLigneVide = Columns(1).Find("").Row
' on y cherche la première ligne vide,
    Rows(PremièreLigneVide).Select
' on la sélectionne,

entre :    
Selection.Copy 'copie des infos (presse-papier)

et     :   ActiveSheet.Paste Link:=True' et on colle les données liées à la fiche (presse-papier)

Puis, dans le Module 3, j'insère en tête de la macro  :
    Sheets("Sommaire").Visible = True
    Sheets("Sommaire").Select
    ActiveSheet.Unprotect ' déprotégé,
    PremièreLigneVide = Columns(1).Find("").Row ' on y cherche la première ligne vide,
    Rows(PremièreLigneVide).Select ' on la sélectionne,
    Sheets("Fiche").Select ' "Fiche" sélectionnée

(avant la première ligne : Sheets("Fiche").Select ' "Fiche" sélectionnée)

Et là, c'est tout bon !   

PS1 : Avec un petit "Application.ScreenUpdating = False
" en tête de chaque module, c'est plus propre et confortable à l'écran pour l'utilisateur...
PS2 : Avis et commentaires pour améliorer encore tout ça bien venus - on doit pouvoir faire beaucoup plus élégant et rapide ! - mais je débute et construit mes codes avec l'enregistreur de macro, les aides et ... un BON FORUM !!!
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
28 mai 2007 à 22:48
Salut,

remplace peut-être (pas sûr, à tester) Paste par PasteSpecial.

Autre possibilité, Range("CellDestination").PasteSpecial Link:=True

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~

( Nouveau forum : Exclusivement Office & VBA )
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
29 mai 2007 à 02:10
La différence entre "Centré sur plusieurs colonnes" et Fusionner, c'est
=> Avec la première méthode tu n'auras pas de problèmes

Donc, un conseil: fais disparaître le bouton Fusionner  ¦¬)

MPi
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 1
29 mai 2007 à 19:28
Salut Mortalino,


Désolant... ça ne marche pas. Plantage identique avec PasteSpécial et agravé avec Range... J'ai bataillé encore toute la journée : sans succès. Je ne vois vraiment pas où est ma bourde.

Salut MPI,
Ben ;  je suis d'accord, mais quelle syntaxe pour "centrer sur plusieurs cellules" ?
le code ci-desous certes centre , mais aussi "fusionne" :

   Range("plagecellules").select
      With selection
       .MergeCells=False
       .HorizontalAlignment = xlCenter
      End with
   Selection.Merge

   Selection.SyntaxeCentrerSurPlusieursColonnes ?
   
J'ai cherché hier soir, après mon post, mais je n'ai pas été foutu de trouver cette syntaxe...

Merci de vos réponses


 
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
30 mai 2007 à 11:57
Inscrit du texte en A1
Le code va centrer le texte dans les colonnes A à E

    Range("A1:E1").Select
    With Selection
        .HorizontalAlignment = xlCenterAcrossSelection
    End With

MPi
0
Rejoignez-nous