Compatibilité entre différentes versions - Modification sur autre classeur

Bonjour,

Je viens d'écrire un code pour automatiser une procédure pour le boulot (donc je ne pourrais pas tout copier ici, il y a des données médicales...)

Toutes mes macros fonctionnent parfaitement sur mon ordinateur (il a moins de 6 mois) et sur ma version Excel 2019.

J'ai voulu envoyer le fichier à une collègue pour qu'elle teste, mais ça ne fonctionne pas. Elle tourne sous Excel 2007.

Le problème semble tourner autour d'une modification d'un classeur ouvert mais différent de celui sur lequel se trouve la macro.

En gros, la macro récupère des variables, ouvre un classeur "Classeur vierge", change le nom des onglets de ce classeur vierge avec les variables récupérées et enregistre sous un nom comprenant d'autres variables.

Grâce à des msgBox, j'ai pu voir que les différentes variables sont bien récupérées, et l'ouverture du fichier Classeur vierge se fait bien.

Est-ce que les instructions ci dessous peuvent ne pas être comprises par des versions inférieures ? Et si oui, comment les modifier pour que mon code fonctionne sur toutes les versions ?

Workbooks.Open ("C:\Users\*******\Desktop\Programmation suivi activités\Classeur vierge.xlsm")
Workbooks("Classeur vierge").Sheets("Feuille1").Name = semaine1
Workbooks("Classeur vierge").Sheets("Feuille2").Name = semaine2
Workbooks("Classeur vierge").Sheets("Feuille3").Name = semaine3
Workbooks("Classeur vierge").Sheets("Feuille4").Name = semaine4

Workbooks("Classeur vierge").SaveCopyAs "C:\Users\******\Desktop\Programmation suivi activités\" & mois & "\" & mois & " " & nom & ".xlsm"

Merci d'avance pour votre aide

Bonjour,

a-priori aucune particularité propre à 2019.

Il faudrait indiquer la ligne en erreur et le message.

On va supposer que les variables semainex et mois sont bien initialisées.

Reste le chemin du bureau. Essaie avec :

cheminBureau = CreateObject("WScript.Shell").specialFolders("Desktop")

pour être sûre de lui et éviter une mise à jour manuelle du code.

Par ailleurs je ne suis pas sûr à 100% que saveAs crée un répertoire inexistant. Tu devrais tester et le créer si besoin avec mkdir.

Toi il doit être créé, tu n'as pas l'erreur.

eric

Je vais redemander pour la ligne en erreur, mais le message, c'est : "l'indice n'appartient pas à la sélection"

J'ai complété mon post, pas sûr que tu aies vu

Edit : "l'indice n'appartient pas à la sélection"

le nombre de feuille crées à la création d'un classeur dépend du paramétrage du poste.

Là aussi tu dois t'assurer de créer les feuilles absentes

Maintenant oui, je vais explorer cette piste, merci

Et tes feuilles s'appellent Feuille1 et non Feuil1 ?

Pour les feuilles, oui, je les ai renommées sur le classeur vierge

Ce que je ne comprends pas, c'est que je ne crée pas de nouveau classeur, j'ouvre le classeur vierge et je renomme les onglets avant de sauvegarder sous le nouveau nom.

(et que tout fonctionne sous excel 2019...)

Je viens de le faire sur un de mes vieux ordi, qui tourne aussi sous 2007. Les chemins d'accès sont bons, mais même problème que ma collègue.

Je vais tester d'autres instructions pour voir ce qui buggue

J'ai essayé différents trucs que j'ai pu voir sur différents fils de discussion, vérifier les références utilisées par VBA, déclarer mes variables publiques, changer le fichier "classeur vierge" par un fichier sans macro (puisque classeur vierge a ses propres macros autonomes)...

Le problème semble vraiment venir du fait que Excel n'arrive pas à travailler sur le 2ème classeur, alors qu'il a bien réussi à l'ouvrir. Même pour y inscrire une donnée dans une cellule.

J'ai fait ressortir toutes les variables demandées sur la macro par un msgbox et elles sont correctement affichées.

La solution de facilité, si je n'arrive pas à résoudre le problème, sera de restreindre l'utilisation de mon code aux seuls utilisateurs de 2019, mais ça va limiter son utilisation de fait....

On ne sait toujours pas la ligne en erreur...

Ton classeur, vu qu'il est existant et que tu l'ouvres doit plutôt être :

Workbooks("Classeur vierge.xlsm").Sheets("Feuille1").Name = semaine1

eric

Pardon pour la ligne, il a fallu que je retrouve le moyen de trouver la ligne en question, à savoir le débogage pas à pas... Il faut que je me remettes au code plus souvent

Donc après la modif que tu m'as proposé, le changement d'onglet se fait, on arrive donc sur une erreur à cette ligne là :

Workbooks("Classeur vierge.xlsm").SaveCopyAs "C:\Users\Alice\Documents\suivi\" & mois & "\" & mois & " " & nom & ".xlsm"

Avec ou sans le xlsm, ça ne marche pas. Je vais donc me pencher sur cette instruction...

Bonsoir

une idée... pourquoi ne pas utiliser saveas au lieu savecopyas

Fred

Je viens de tester, ça ne fonctionne pas (mais merci pour l'idée ), mais peut être me manque-t-il un argument ?

With ActiveWorkbook
.SaveAs Filename:="C:\Users\Alice\Documents\suivi\janvier\" & mois & "\" & mois & " " & nom & ".xlsm"
End With
Workbooks("Classeur vierge").SaveAs "C:\Users\Alice\Documents\suivi\janvier\" & mois & "\" & mois & " " & nom & ".xlsm"

J'ai testé ces 2 codes...

il n'y pas un soucis ici

\janvier\" & mois & "\

tu as un sous dossier janvier dans lequel un autre sous dossier du contenu de la variable mois existe ??

Fred

Oui, effectivement, j'ai copié le code ici avant de faire la modification...

Mais ca ne résout pas le problème.

J'ai tenté également en rajoutant un Filename:= après le SaveAs, pas plus de résultat.

(Tout en sachant que c'est vraiment sur 2007 que ça ne fonctionne pas...)

Je penses comme Eric... (que je salut)

je penses que le problème est que un des dossiers dans le chemin d'enregistrement n'existe pas...

faudrait faire un mkdir au préalable pour etre sur que le dossier existe...

Fred

que renvoi cette instruction avant ton enregistrement

MsgBox Dir("C:\Users\Alice\Documents\suivi\" & mois & "\", vbDirectory) 

Fred

Bon je confirme

je viens de demarrer le PC de ma femme qui a office 2007... et ces deux instructions fonctionnent sous 2007 si les dossiers existent

ActiveWorkbook.SaveAs "C:\Users\flo\Documents\suivi\" & mois & "\" & mois & " " & nom & ".xlsm"
Workbooks("classeur vierge.xlsm").SaveAs "C:\Users\flo\Documents\suivi\" & mois & "\" & mois & " " & nom & ".xlsm"

Attention les chemins ont été adaptés qu pc de ma femme !!!

capture

Fred

Ca ne renvoit rien...

Donc si je comprends bien, c'est mon chemin d'accès qui est mauvais pour être compris sous 2007

Pour donner toutes les infos, ma hierachie actuelle est ainsi :

"C:\Users\Alice\Documents\suivi" -> contient le classeur vierge (qui s'ouvre bien)

"C:\Users\Alice\Documents\suivi\janvier" -> contient le classeur procédure (avec la macro de copie)

et l'enregistrement doit se faire dans ce dernier dossier sous le nom "Mois Nom.xlsm"

donc avec un chemin "C:\Users\Alice\Documents\suivi\janvier\janvier nom.xlsm"

Je ne connais pas Mkdir, et je n'arrive pas à réadapter les solutions vus sur les autres fils de discussion, si tu peux m'en dire plus

Grrr, je m'autoflagelle!!!!!!

Merci à tous les 2 pour votre aide, il suffit d'une petite erreur de variable mal écrite pour se prendre la tête toute l'aprem...

En tout cas, ça fonctionne, il me suffisait de rajouter .xlsm (et de vérifier mes variables...)

Je m'en vais vérifier les autres macros, mais ça me donne bien des pistes si je coince...

si Dir ... renvoi rien c'est que le dossier de destination n'existe pas...

si tu es sur du chemin et que suivi existe...

tu peux faire cela; pour tester l'existence du sous dossier "mois" si il n'existe pas il est créer

If Dir("C:\Users\Alice\Documents\suivi\" & mois & "\") = "" Then MkDir "C:\Users\Alice\Documents\suivi\" & mois & "\"

Fred

Rechercher des sujets similaires à "compatibilite entre differentes versions modification classeur"