CerberusPau
Messages postés377Date d'inscriptionlundi 3 avril 2006StatutMembreDernière intervention22 août 2018
-
28 mai 2007 à 21:49
CerberusPau
Messages postés377Date d'inscriptionlundi 3 avril 2006StatutMembreDernière intervention22 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...
CerberusPau
Messages postés377Date d'inscriptionlundi 3 avril 2006StatutMembreDernière intervention22 août 20181 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 !!!
CerberusPau
Messages postés377Date d'inscriptionlundi 3 avril 2006StatutMembreDernière intervention22 août 20181 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...