Bug aléatoire Copy/Paste-Link (Cellules fusionnées) [Résolu]

Signaler
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018
-
CerberusPau
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018
-
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

Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018

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
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018

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 !!!
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
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 )
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
16
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
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018

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


 
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
16
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