Posez votre question Signaler

Excel VBA: copier feuille dans autre classeur [Résolu]

Eaheru 187Messages postés mercredi 23 juin 2010Date d'inscription 25 février 2015 Dernière intervention - Dernière réponse le 20 déc. 2011 à 22:14
Bonjour,
J'essaie vainement de remettre en service une macro écrite il y a un moment et qui fonctionnait encore la semaine dernière sur un PC équipé de Excel 2003.
Hors depuis la migration sur Excel 2007, la copie de la feuille voulue du fichier 1 vers le fichier 2 , avant la feuille nommée "Param" ne se fait plus ...
Voici la commande passée :
ActiveWorkbook.Sheets(1).Copy Before:=Workbooks(Fichier2).Sheets("Param")

La syntaxe ne pose pas de problème, la ligne est lue mais semble ignorée et au final l'onglet 1 du fichier actif n'a pas été copiée dans le fichier 2 avant l'onglet nommé "Param"
Le nom du fichier 2 est passé par une variable au format "string"
Est ce un bug d'Excel 2007 ou alors l'écriture de cette action n'est pas "correcte" et ne passe plus maintenant ?
Merci d'avance pour votre aide, je sèche la
Lire la suite 
Réponse
+2
moins plus
Oui c'est bien un ".tsv"
Le fichier 2 n'a pas été converti en 2007. Je pense que c'est un fichier créé sous Excel 97 ou 2000 qui vit depuis...
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,

J'ai teste votre ligne de code en EXCEL 2007, pas de probleme.....
J'ai utilise l'enregistreur de macro pour avoir le code directement en 2007, pas de differences de code avec du 2003.....
Le nom de fichier est bien passe en .XLSX? Est-ce qu'il y a un traitement d'erreur?
Si oui, mettez le en commentaire pour avoir une erreur.

A suivre
Eaheru 187Messages postés mercredi 23 juin 2010Date d'inscription 25 février 2015 Dernière intervention - 20 déc. 2011 à 15:37
Donc le fichier de destination est bien en XLS et non XLSX
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
Merci de cette réponse. :)
Les éléments sont au bureau, mais j'ai oublié de préciser ceci :
Le fichier actif est un ficher ".tsv" importé et le fichier 2 est un fichier .xls (il contient la macro)

je regarde des demain pour voir le reste du code. En fait le problème est que je ne suis pas le codeur de cette macro, je la découvre et j'essaie de dépanner mes collègues :/
f894009 7860Messages postés dimanche 25 novembre 2007Date d'inscription 2 août 2015 Dernière intervention - 20 déc. 2011 à 11:01
Bonjour,
Fichier actif: .tsv ?? ou .CSV. Le fichier 2 a ete converti en 2007 ou vous utilisez le mode compatible?
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,
Excuser l'incruste mais une ou deux questions me viennent à l'esprit.
L'import se fait normalement ?
Y aurait-il une ligne de la macro qui annulerait les erreurs, genre On Error Goto ou On Error Resume Next ?
Et puis aussi le "ActiveWorkbook" m'interpelle, essaye de remplacer "ActiveWorkbook" par...
Workbooks("NomDuClasseurOrigine.xls").Sheets(1).Copy Before:=Workbooks(Fichier2).Sheets("Param")

A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour Lermite, merci de passer par la ! :)

Alors effectivement, j'ai des "On Error Resume Next"

'Remplace les caractères non-reconnus ----------------- 
    CarCherche = Array("Ã'", "é") 'Tableau caractères cherchés 
    CarRemplace = Array("ô", "é") 'Tableau caractères de remplacement 
    I = 1 
    Do 
        On Error Resume Next 
        Cells.Replace What:=CarCherche(I), Replacement:=CarRemplace(I), LookAt:=xlPart, SearchOrder _ 
            :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 
         
        I = I + 1 
    Loop Until I = UBound(CarCherche) + 1 'Boucle sur nombre caractères à remplacer 
    'Fin remplacement caractères non-reconnus ---------------------- 
ActiveWorkbook.Sheets(1).Copy Before:=Workbooks(VariableNomFichier2).Sheets("Param") 


Mais dans l'etat je ne pense pas que le "On Error .." s'applique à la copie de l'onglet; Si ?
lermite222 8728Messages postés dimanche 8 avril 2007Date d'inscription ContributeurStatut 27 janvier 2014 Dernière intervention - 20 déc. 2011 à 14:15
Met une ' (apostrophe) devant le on error et lance la macro.
Répondre
f894009 7860Messages postés dimanche 25 novembre 2007Date d'inscription 2 août 2015 Dernière intervention - 20 déc. 2011 à 14:40
Bonjour lermite,
Une des premieres questions que j'ai posee a Eaheru, parlait du traitement d'erreur.......
Répondre
Eaheru 187Messages postés mercredi 23 juin 2010Date d'inscription 25 février 2015 Dernière intervention - 20 déc. 2011 à 14:44
Exact :) je n'avais pas encore regardé, vous êtes allés dans le même sens directement, c'est un signe :)
je vais donc tester tout de suite en ajoutant l'apostrophe.
Pour info, au cas ou ce soit important, il y a d'autres lignes comportant la même commande de traitement d'erreur...
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
A tout hasard, il n'y aurait pas moyen d'écrire cette commande différemment afin que je ne rencontre pas ce problème ?
f894009 7860Messages postés dimanche 25 novembre 2007Date d'inscription 2 août 2015 Dernière intervention - 20 déc. 2011 à 16:02
Bonjour,
Avant d'en arriver la, dites nous si vous avez des erreurs d'execution, et surtout decrivez dans quelle ordre vous ouvrez les fichiers.
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
Les fichier sont ouverts dans cet ordre :
1) j'ouvre le fichier de destination car il contient la macro
2) la macro importe le fichier ".tsv" et l'ouvre au format Excel 2007

Après avoir commenté uniquement la ligne
On Error Resume Next
après le "Do" (dans le code plus haut), pas de différence de fonctionnement.
J'ai ensuite commenté toutes les lignes identiques trouvées dans la macro et j'ai aussi commenté les lignes suivantes :
Application.DisplayAlerts = False 
Application.ScreenUpdating = False


Et la, le message suivant apparaît :
Erreur d'exécution '1004':
Excel ne parvient pas à insérer les feuilles dans le classeur de destination car il contient moins de lignes et de colonnes que le classeur source. Pour déplacer ou copier les données vers le classeur de destination, vous pouvez les sélectionner, puis utiliser les commandes Copier et Coller pour les insérer dans les feuilles d'un autre classeur




Donc si je comprend bien, le fichier ".tsv" est importé au format Excel 2007 alors que le fichier de destination étant toujours au format 2003 ne dispose "que" de 65000 lignes ?
f894009 7860Messages postés dimanche 25 novembre 2007Date d'inscription 2 août 2015 Dernière intervention - 20 déc. 2011 à 17:13
RE
C'est exact. Il faudrait convertir votre fichier .xls 2003 en Fichier .XLSM 2007.

A suivre
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
Ok, alors j'essaie ça et je vous informe :)
Ajouter un commentaire
Réponse
+0
moins plus
Et ça fonctionne parfaitement, merci de votre aide à tout les deux ! :)
f894009 7860Messages postés dimanche 25 novembre 2007Date d'inscription 2 août 2015 Dernière intervention - 20 déc. 2011 à 22:14
RE
Contant de vous avoir rendu service.
Répondre
Ajouter un commentaire
Ce document intitulé «  Excel VBA: copier feuille dans autre classeur  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.