Excel VBA : enregistrer une feuille dans un autre fichier

Excel VBA : enregistrer une feuille dans un autre fichier

Supposons que nous ayons un fichier excel, avec des macros, et un onglet (une feuille), qui contient des données que nous voudrions placer dans un autre fichier excel, facile à utiliser et imprimer.

Dans ce script, nous réalisons les actions suivantes :

  • Définir une variable texte à partir d’éléments présents dans le fichier ou calculés.
  • partage des variable entre fichier
  • créer une copie sans macros d’une feuille qui en contient
  • enregistrer cette nouvelle feuille dans un autre fichier avec un nom correspondant à la variable texte ci-dessus ;
  • fermer le fichier

Définir une variable texte à partir d’éléments divers

Voici l’ensemble du script VBA

Public extension As String
Public chemin As String, nomfichier As String
    
Sub Créer_fichier_excel()
    Dim Sh As Worksheet
    'les variables extension, chemin et nomfichier sont déclarées Public pour passer d'un classeur à l'autre
    
    'il faut d'abord créer une copie de la feuille SANS MACROS
    ' source https://www.developpez.net/forums/d1044048/logiciels/microsoft-office/excel/macros-vba-excel/ajouter-feuille-n-existe/
    On Error Resume Next
    Set Sh = ThisWorkbook.Sheets("modeleSANS")
    'On vérifie l'existance de la feuille "modeleSANS"
    If Not Sh Is Nothing Then
        ' la feuille existe, on la vide
        Sh.Select
        Sh.UsedRange.ClearContents
        Cells.Select
        Selection.UnMerge
    Else
        ' La feuille modeleSANS n'existe pas, on la crée
        Set Sh = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
        Sh.Name = "modeleSANS"
    End If
 
    ' Maintenant on copie le contenu et le format de modele mais PAS les macros
    Sheets("modele").Select
    Cells.Select
    Selection.Copy
    Sheets("modeleSANS").Select
    Cells.Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
        , SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False

    ' tant qu'on est dans le bon fichier on va  chercher le nom du futur fichier
    Sheets("TabDyn").Select
    Range("H38:K39").Select
    Selection.Copy
    Range("H40").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("H40").Select
    Application.CutCopyMode = False
    nomfichier = "Inventaire-" & Sheets("TabDyn").Range("H40").Value & "-"
    nomfichier = nomfichier & Format(Date, "yy-mm-dd") & extension
    ' nomfichier = nomfichier & Year(Now) & Month(Now) & Day(Now) & extension
    ' et maintenant on peut enfin copier la feuille dans le fichier !
    Sheets("modeleSANS").Select
    ThisWorkbook.ActiveSheet.Copy
    extension = ".xlsx"
    chemin = ThisWorkbook.Path
    
 
        ' Actions dans le fichier nouvellement crée
	     Par exemple définir la zone d’impression

    With ActiveWorkbook
        .SaveAs Filename:=chemin & "\" & nomfichier
        .Close
    End With

End Sub

Variables partagées entre fichiers

Les variables publiques sont déclarées à l’extérieur de la macro

Les variables ci-dessus extension, chemin et nomfichier doivent être partagées entre le fichier source (qui contient ce qui va définir les contenus) et le fichier cible qui va prendre ce nom. Si ces variables ne sont pas déclarées à l’extérieur de la macro, en mode Public, le fichier créé n’a pas de nom et une fenêtre nous demande le nom à attribuer.

créer une variable composée d’éléments du fichier

Les deux lignes ci-dessous créent une variable nomfichier qui est une chaine de caractères sous la forme Inventaire-XXX-AA-MM-JJZZZ, avec

  • XXX qui correspond à ce qui est dans la cellule H40 de l’onglet TabDyn
  • AA-MM-JJ qui est créé à partir de la date du jour
  • ZZZ qui est défini comme « .xlsx »
   nomfichier = "Inventaire-" & Sheets("TabDyn").Range("H40").Value & "-"
    nomfichier = nomfichier & Format(Date, "yy-mm-dd") & extension

créer une copie sans macros d’une feuille qui en contient

Dans le script final, on regarde si l’onglet modeleSANS existe. S’il n’existe pas, on le crée.

Ensuite, on copie le contenu de cellules de l’onglet modele et on le colle sous différentes formes dans l’onglet modeleSANS : valeurs uniquement (Paste:=xlPasteValues), puis formats (Paste:=xlPasteAllUsingSourceTheme). On a ainsi un onglet qui contient tout sauf les macros.

Copier un onglet dans un autre fichier

les deux lignes ci-dessous enregistrent la feuille modeleSANS dans un autre fichier qui n’a pas de nom à ce stade.

Sheets("modeleSANS").Select
ThisWorkbook.ActiveSheet.Copy

Enregistrer le nouveau fichier excel

Les lignes suivantes enregistrent le nouveau fichier sous un nom prédéfini, le ferment et ramènent dans le fichier d’origine

With ActiveWorkbook
        .SaveAs Filename:=chemin & "\" & nomfichier
        .Close
    End With
    
    ' Revenir à la cellule A1 de l'onglet Modele
    Sheets("modele").Select
    Range("A1").Select
    MsgBox "Fichier enregistré : " & chemin & " " & nomfichier

Et maintenant ?

Il faudrait certainement savoir aussi comment enregistrer plusieurs onglets successivement dans un même fichier !

Décroiser un tableau Excel

Décroiser un tableau Excel

Nous avons un tableau pour définir la valeur d’une variable v1 pour l’ensemble des produits chaque jour de l’année depuis le début de l’année. Le tableau fait 89 colonnes et plusieurs centaines de lignes.

Article_Code01/01/201902/01/201903/01/201904/01/201905/01/201906/01/201907/01/201908/01/2019
4INTTHO00100000000
4CBPHYP0012,182,182,182,182,182,182,182,18
4CBPHYP0022,182,182,182,182,182,182,182,18
4CBPHYP0042,382,382,382,382,382,382,382,38
4CBPHYP01000000000
4BBHYP0012,182,182,182,182,182,182,182,18
4CBPHYP0032,182,182,182,182,182,182,182,18
4CBPHYP0062,052,052,052,052,052,052,052,05
4CBPHYP0052,12,12,12,12,12,12,12,1
4KERHYP0014,254,254,254,254,254,254,254,25

Le problème, c’est que pour entrer ces données dans la base de données, il nous faudra quelque chose comme :

Article_CodeT_Code_Tempsvariable_txttxt
4MARSOU002201901012,18
4MARSOU002201901022,18
4MARSOU002201901032,18
4MARSOU002201901042,18
4MARSOU002201901051,74
4MARSOU002201901061,74
4MARSOU002201901071,74
4MARSOU002201901081,89

La solution c’est de « décroiser » le tableau.

Ca se fait facilement en suivant ce tutoriel pour Excel 2016. Et pour Excel 2010 ou 2013, on pourra utiliser l’utilitaire Power Pivot fourni gratuitement par Microsoft et suivre cet autre tutoriel.

Faire une « photo » d’une page web entière avec Chrome

Faire une « photo » d’une page web entière avec Chrome

J’ai parfois envie de « photographier » une page web entière, pour la visualiser dans sa globalité. Mais ce n’est pas facile du tout à faire lorsque la page est très longue. Heureusement Google Chrome dispose d’outils pour le faire (source : un article en anglais ).

Imaginons que je veuille faire une capture de l’ensemble de la page d’accueil du site Parcours-Performance. Je commence par aller sur ce site avec le navigateur Chrome.

Dans le site, j’accède aux outils de développement de chrome par un Clic droit et « inspecter » ou par la combinaison de touches CTRL+MAJ+I .

Taper CTRL+ MAJ +P, commencer à écrire screenshot dans la fenêtre qui s’ouvre, après le >. Puis choisir screenshot  Capture full size screenshot

captures pleines pages avec Chrome

Et j’obtiens ce qui suit :

Les mises en page prédéfinies du thème Divi

Les mises en page prédéfinies du thème Divi

J’utilise le thème DIVI depuis que j’ai choisi un hébergement chez Infomaniak car cet hébergeur donne un accès gratuit à ce thème premium et quelques extensions premium également.

J’ai déjà écrit plusieurs articles sur Divi (voir les articles de la série . Dans celui ci, je souhaite faire un récapitulatif rapide de ce qu’il est possible de faire avec les « layouts », ou mises en pages prédéfinies.

L’utilisation de ces mises en page prédéfinies est décrite dans les articles, en anglais, suivants :

J’ai mis une copie d’écran d’une des pages qui peuvent être ainsi créés en bas de cet article. Pour voir d’autres exemples, on peut aller sur cette page, qui contient le catalogue de tous les « premade layouts » pour DIVI.

Word : Partager des modèles entre ordinateurs

Word : Partager des modèles entre ordinateurs

Les éléments principaux de la suite Microsoft Office, Word, Excel et PowerPoint disposent d’un système de modèles. Ces modèle sont particulièrement utiles pour gagner du temps et pour s’assurer de la cohérence des styles d’un document à l’autre.

Pour créer un modèle sous Word, voir l’aide Microsoft.

Ce tutoriel explique comment partager les modèles entre ordinateurs par l’intermédiaire de dossiers partagés (réseau interne ou cloud, par exemple DropBox). Il se fonde principalement sur les informations glanées dans cet article en anglais.

Où sont rangés mes modèles ?

Les fichiers de modèles Word (au moins 2007 et 2010) ont des extension dotx ou dotm. Les extensions dotx correspondent aux modèles de base de Word tandis que les dotm prennent en charge les macros.

En principe tous les modèles sont rangés dans le même répertoire.

Pour Word 2007 voir le document en anglais.

Pour Word 2010 cliquer sur le menu FICHIERS puis sur Options

Dans la fenêtre qui s’ouvre, cliquer sur l’onglet options avancées et descendre jusqu’à général (copie d’écran ci-dessous)

Où sont rangés mes modèles ?

Modèles Word : Où sont-ils rangés

Cliquer sur le bouton « Emplacement des fichiers ». Ici je vois que mes modèles sont stockés dans le répertoire C:\Users\Anne-Laure\AppData\Roaming\Microsoft\Templates

Modèles Word : Définir la localisation

Créer un répertoire partagé des modèles à utiliser

Dans C:\Users\Anne-Laure\AppData\Roaming\Microsoft\Templates je trouve des modèles que j’aurais du supprimer depuis longtemps, des modèles pour word (dotx) des modèles pour excel (xltx) des modèles pour powerpoint (potx). Quelques modèles commencent par ~$. Ce sont des modèles en cours d’utilisation. Il va falloir que je ferme word pour qu’ils disparaissent.

Modèles Word : créer un répertoire partagé

Et mes palettes de couleur sont stockées dans C:\Users\Anne-Laure\AppData\Roaming\Microsoft\Templates\Document Themes\Theme Colors

Modèles Word : palettes de couleurs partagées

Je crée un répertoire dans mon Dropbox (on peut aussi utiliser un répertoire partagé d’un réseau local) et je le nomme modeles.

J’y place tous les modèles et palettes de couleur que je souhaite utiliser et partager

Modèles Word : créer un répertoire partagé (2)

Dire à Word, excel et Powerpoint d’utiliser ces modèles

Dans Word, faire comme pour trouver où sont rangés les modèles. Mais ce coup ci, je sélectionne la ligne « modèle groupe de travail »

Modèles Word : définir la localisation des modèles partagés

et je modifie la localisation des modèles pour qu’elle corresponde au répertoire partagé que je viens de créer.

Modèles Word : définir la localisation des modèles partagés (2)

Choix d’un modèle

Maintenant si je clique sur nouveau dans word, il me propose les quelques modèles que j’ai mis dans le répertoire partagé. Les palettes de couleur sont visibles dans un autre onglet (flèche orange)

Et dans excel et powerpoint, sans aucun réglage les modèles sont aussi pris dans le répertoire défini via Word.

Modèles Word : sélectionner un modèle partagé

Et voilà qui est fait !