Macro: verification existence fichier, onglet... a partir des donnees d'un tableau

MartiFab

XLDnaute Nouveau
Bonjour a tous,

Je travaille en ce moment sur un projet pour lequel je dois réorganiser les données présentes dans un fichier Excel source dans plusieurs fichiers Excel cibles.

Je simplifie mon problème au maximum dans cette explication.

Description

Comme vous pouvez le constater sur le fichier exemple ci-joint, ce fichier source présente un tableau sur une feuille de calcul. Le tableau comprend plusieurs colonnes dont quatre nous intéressent principalement. Il s’agit des champs PAYS, REGION, VILLE, Température.

La réorganisation des données consiste à placer dans un classeur « nomPAYS.xlsx » sur la feuille de calcul « nomREGION » notre donnée « température » pour la colonne « nomVILLE ». L’exemple ci-joint de fichier cible aidera surement à rendre cette explication plus claire.

Je dispose donc d’un dossier « Fichiers Pays » qui regroupe les fichiers Excel spécifique à un pays se trouvant dans le tableau. Dans ce cas on pourra y trouver par exemple « FRANCE.xlsx », «ANGLETERRE.xlsx »…

Le problème auquel je me trouve confronté ne réside pas dans l’extraction des données depuis le fichier source vers les fichiers spécifiques.

Problématique

Un PAYS qui n’a jamais été traité peut apparaitre dans le classeur source mais le classeur « nomPAYS.xlsx » sera absent. De même pour une REGION (absence de la feuille de calcul), ou pour une VILLE (absence de la colonne).

Mon problème consiste donc à m’assurer que pour chaque ligne présente dans le tableau du classeur source, le classeur « nomPAYS.xlsx » correspondant existe dans le dossier « Fichier Pays », que la feuille de calcul « nomREGION » existe et que la colonne « nomVILLE » existe.

Ensuite, identifier les PAYS, REGION et VILLE pour lesquels les fichiers, onglets et colonnes n’existent pas.

Connaissant ces détails, je pourrai procéder à des modifications sur les fichiers cibles et l’extraction complète de mes données sera alors possible.

Note : Comme l’illustre le classeur source en exemple, on peut avoir un même nom de ville pour deux pays ou régions différents. De même, cas plus rare, on peut avoir un même nom de région pour deux pays différents.

Avancement

Dans l’état actuel des choses j’arrive à identifier les PAYS pour lesquels un classeur « nomPAYS.xlsx » n’existe pas. Pour cela je fais appel à un classeur « indexPAYS.xlsx » qui comporte une liste de tous les pays pour lesquels un classeurs spécifiques est présent dans le dossier « Fichier Pays ».

Mais cette approche me semble fastidieuse et peut être pas optimale en terme de rapidité.

Auriez-vous une idée pour résoudre ce problème, en utilisant des variables tableaux par exemple, ou peut être une solution beaucoup plus simple existe qui n’a pas effleuré mon esprit de programmeur débutant ? :)

Merci beaucoup pour votre aide

P.S.: N'hesitez pas a me demander si vous avez besoin de plus d'infos concernant cette question
 

Pièces jointes

  • exFichierPaysFRANCE.xlsx
    9.4 KB · Affichages: 64
  • exFichierSource.xlsx
    10.1 KB · Affichages: 68
G

Guest

Guest
Re : Macro: verification existence fichier, onglet... a partir des donnees d'un table

Bonjour,

Voici deux fonctions, une pour ouvrir ou créer le classeur, une pour obtenir ou créer la feuille

et une macro exemple d'utilisation des fonctions.

Avant de tester adapter la const PathToPays dans la fonction:GetWorkBook

Teste et essaie de corriger si quelque chose ne va pas (je pense n'avoir rien oublier mais qui sait???)


VB:
Sub Utilistation()
    Dim oClasseur As Workbook, oFeuille As Worksheet
 
    Set oClasseur = GetWorkBook("FRANCE.XLSX")
    If Not oClasseur Is Nothing Then Set oFeuille = GetFeuilleRegion("PROVENCE")
 
    If oFeuille Is Nothing Then Exit Sub
 
    With oFeuille
        'Je fais ce que je veux avec la feuille
    End With
 
End Sub
Function GetWorkBook(ByVal nomFichierPays As String) As Workbook
    Const PathToPays As String = "c:\..\DossierPays\"
    Dim Wk As Workbook
    On Error Resume Next
 
    'Vérifie que le fichier n'est pas déjà ouvert dans l'application
    Set Wk = Workbooks(nomFichierPays)
    If Wk Is Nothing Then
        'Vérifie si le fichier existe dans le dossier PathToPays
        If Dir(PathToPays & nomFichierPays) <> "" Then
            'Tente d'ouvrir le fichier existant
            Set Wk = Workbooks.Open(PathToPays & nomFichierPays)
 
            If Err.Number <> 0 Then GoTo Err_Open_WK
 
        Else
            'S'il n'existe pas dans le dossier, créer un nouveau classeur
            Set Wk = Workbooks.Add
            'L'enregistrer une première fois
            Wk.SaveAs PathToPays & nomFichierPays
            If Err.Number <> 0 Then GoTo Err_New_WK
        End If
    End If
 
SORTIE:
    Set GetWorkBook = Wk
Err_New_WK:
    MsgBox "une erreur est survenue lors de la création du nouveau classeur", vbExclamation, "GetFeuilleRegion"
    Resume SORTIE
Err_Open_WK:
    MsgBox "Erreur d'initialisation du fichier '" & nomFichierPays & "'", vbExclamation, "GetFeuilleRegion"
    Resume SORTIE
 
End Function
 
Function GetFeuilleRegion(Wk As Workbook, ByVal NomRegion As String) As Worksheet
    Dim sh As Worksheet
    On Error Resume Next
    'Tente d'ouvrir la feuille région si elle existe
    Set sh = Workbooks("FichierPays").Worksheets("NomRegion")
 
    'Si la feuille n'existe pas, tenter une création
    If sh Is Nothing Then
        Set sh = Wk.Sheets.Add(after:=Wk.Sheets(Wk.Sheets.Count))
        sh.Name = NomRegion
        If Err.Number <> 0 Then GoTo Err_Get_SH
    End If
SORTIE:
    GetFeuilleRegion = sh
Err_Get_SH:
    MsgBox "Erreur d'initialisation de la feuille '" & NomRegion & "'", vbExclamation, "GetFeuilleRegion"
    Resume SORTIE
End Function

A+
 

MartiFab

XLDnaute Nouveau
Re : Macro: verification existence fichier, onglet... a partir des donnees d'un table

Bonjour Hasco,

Merci de ta reponse. Je vais me plonger dans l'etude de ton code. Je n'hesiterai pas a reposter si je rencontre un probleme.

Merci Beaucoup :)
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 319
Membres
103 177
dernier inscrit
grizly