Sheets.Move qui fait tout crasher

Bonjour la compagnie !

J'aimerais par VBA enregistrer sous uniquement un onglet.

D'après les aides de Microsoft, la méthode .Move est idéale:

image

J'espère ensuite sauvegarder sous mon nouveau classeur.

[...code...]

FeuilOriginal.Delete

Dim fichier As String
On Error Resume Next
ChDir "Bibliothèques\Documents"
fichier = Application.GetSaveAsFilename( _
fileFilter:="Excel Files (*.xls), *.xls")

FeuilExport.Move
ActiveWorkbook.SaveAs fichier
ActiveWorkbook.Close

Seulement, a la ligne .move Excel plante totalement je ne peux même pas stoper l'éxectution du programme.

ma variable FeuilExport est corretement utilisée car je l'utilise tout le long du programme sans problèmes

Une idée ?

A+

un petit up

Si jamais vous avez d'autre proposition qui aboutirais au même résultat je prend

Bonjour,

Plantage normal. Vous cherchez à exporter une variable ??

Que cherchez vous à faire ?

Cordialement

Bonjour,

D'ailleurs en général je fais un .copy, qui ouvre un nouveau fichier avec juste l'onglet en question. Ça fonctionne super bien.

Bonjour les gars,

Merci de vos réponses.

En fait je souhaite déplacer un onglet dans un nouveau classeur et l'utilisateur pourras choisir ou sauvegarder ce dernier.

Pour la partie sauvegarde je dois savoir faire (merci JoyeuxNoel)

Pour juste déplacer l'onglet et qu'il ne soit plus dans le classeur original c'est plus délicat.

Par curiosité pourquoi .move fait planter Excel ?

JoyeuxNoel un simple .copy à résolu mon problème merci ! C'étais si simple...

Bonjour

Pour juste déplacer l'onglet et qu'il ne soit plus dans le classeur original c'est plus délicat.

Alors c'est SHEETS(nom de votre feuille).MOVE

COPY conserve la feuille dans votre classeur original

Se pose surement la question du nom de votre feuille par rapport à la variable

Crdlt

Du coup j'ai résolu le problème en utilisant:

feuilexport est ma variable de type worksheet qui fonctionne dans toute ma macro.

feuilexport.copy fonctionne et j'ai rajouté une ligne juste après feuilexport.delete

Mais curieusement feuilexport.move fait totalement crash excel (excel ne répond pas) sans avoir aucuns msg d'erreur... !

Dans votre code votre variable est déclarée comme ceci ?

Set feuilexport = worksheets(nom de votre feuille)

Il faudrait voir le code pour comprendre

    Sheets("1Cav").Copy After:=Sheets(Sheets.Count)
    Sheets("1Cav (2)").Name = NomPiece & "."
    Set FeuilExport = Sheets(NomPiece & ".")

En effet je déclare ma variable de cette façon

Tout fonctionne maintenant en faisant

FeuilExport.copy

FeuilExport.delete

Activeworkbook.save

Pourquoi vous utilisez un point derrière le nom de votre feuille ?

Vous devriez avoir plutot ceci

Sheets("1Cav").Copy After:=Sheets(Sheets.Count)
Sheets("1Cav (2)").Name = NomPiece
Set FeuilExport = Sheets(NomPiece)

Voici le programme qui plantais.

C'est vraiment pas curiosité que je cherchais a comprendre pourquoi .move ne fonctionne pas.

Maintenat que la macro est fonctionnelle tu n'est pas obligé de passé du temps sur ce problème @Dan

Voici un fichier bidon à ouvrir avec la macro pour la faire fonctionner:

1ait-moulinette-v42.zip (22.00 Octets)

Le point c'est parce que dans la macro en fait un onglet avec la variable NomPiece existe déja c'est juste pour différencier les 2 onglets, c'est pas très malin mais ca fonctionne quand même ^^ J'aurais pu le nommer NomPiece & "Bis" ou NomPiece & "2" c'est vraiment juste pour les différencier

Je regarderai les deux fichiers par curiosité

Mais de base, ne jamais mettre un point.
Il faut laisser le point pour définir l'extension d'un fichier.

Dans votre cas, mettez plutot un souligné --> _ ou un trait - ou comme vous dites un "Bis"

Si Move plantait cela peut être parce qu'excel voit ceci --> "feuilexport..move"

Sinon j'aurais plutot fait ceci :

Sheets("1Cav").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = nompiece
Set feuilexport = Sheets(nompiece)
feuilexport.Move

J'ai remplacé par:

Sheets("1Cav").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = nompiece & "2"
Set feuilexport = Sheets(nompiece) & "2"
feuilexport.Move

et quelques modifs dans le prog et ça fonctionne ^^'

J'avais pas pensé que le point pouvais poser problèmes comme quoi des fois faut pas grand chose...

:)

Aaaaaah stop stop j'ai répondu trops vite j'ai déja un autre problème

J'ai bien mon onglet déplacé dans un autre classeur j'ouvre la boite de dialogue pour sauvegarder et au moment de sauvegarder tout plante ! je joint les nouvelles version de programme... ça crash quand j'appuie ici:

image

Dans votre fichier au début du code export, vous définissez des variables venant des cellules N3 à N8. Elles viennent d'où car là je n'ai rien

Plus bas dans le code, j'ai ceci --> Set FeuilOriginal = ActiveSheet
Cela doit correspondre à la feuille Accueil ?

En gros que fait le programme:

1) La procédure lancement permet de déterminer quelle programme utiliser entre DFQ et Rapport2020

2) Le programme choisi précédemment Extrait des valeurs et les place dans un nouvel onglet crée"NomPiece"

3) Des calculs sont effectués dans l'onglet "NomPiece"

4) La macro Export s'éxécute à la fin de tout ca, Elle viens prendre des valeurs dans "NomPiece" et d'autres qui sont temporairement dans "Acceuil"

définissez des variables venant des cellules N3 à N8

Set FeuilOriginal = ActiveSheet

Donc dans la macro Export, ma FeuilOriginal est en fait l'onglet "NomPiece" et un onglet "NomPiece2" est crée qui sera la feuilexport.

5) Le transfert de donnée terminé je veux exporter l'onglet NomPiece2 pour laisser le choix de la sauvegarder où il veux et de ne pas "polluer" le fichier de base qui sera réutilisé. D'ailleur fichier de base que je vais saubgarder en modèle Excel comme m'as conseillé JoyeuxNoel pour éviter que l'utilisateur ne le modifie

Est-Ce un peu plus clair ?

Je me rend compte que c'est vraiment mal codé mais à la base je n'utilisais que le programme avec l'onglet NomPiece et j'ai plus tard décidé de l'améliorer en reprenant le code Existant donc c'est un peu fouillis

Des tests que j'ai fait. La macro fonctionne en mode pas à pas mais en mode normal Excel Crash...

Je soupçonne que le problème vienne de la ligne .execute dans ce with:

With Application.FileDialog(msoFileDialogSaveAs) 'Dialogs(xlDialogSaveAs)
.InitialFileName = "Dimensionnal Deviation_" & drawing & ".xls"
.FilterIndex = 1
.Show
.Execute
End With

Mais difficile à cibler puisque tout fonctionne en mode pas à pas ^^

Je me rend compte que c'est vraiment mal codé mais à la base je n'utilisais que le programme avec l'onglet NomPiece et j'ai plus tard décidé de l'améliorer en reprenant le code Existant donc c'est un peu fouillis

Oui j'essayais de voir pour simplifier un peu. D'où ma question au sujet des valeurs dans N3,.... j'aurais regardé pour simplifier

Sinon pour votre erreur, avez-vous essayé en enlevant le .XLS ? Donc votre ligne comme ceci

.InitialFileName = "Dimensionnal Deviation_" & drawing
Rechercher des sujets similaires à "sheets move qui fait tout crasher"