Importer et Exporter des données vers et depuis un classeur protégé

GeoTrouvePas

XLDnaute Impliqué
Bonsoir tout le monde !

Voilà plusieurs semaines que je développe une application pour mon boulot (avec une participation non négligeable de ce forum ^^) et là je cale vraiment sur un gros soucis. Pour simplifier, j'ai un ListView qui est alimentée par des données contenues dans des plages nommées. Suivant le service auquel appartient l'utilisateur, le listview affichera les données contenues dans Base_Comptabilité ou Base_Direction etc..........

Jusque là je me suis bien débrouillé. Mais voilà, pour des problèmes d'utilisation simultanée du fichier et de confidentialité, je me vois dans l'obligation de découper mon classeur comme ceci :

Un fichier "Maître" contenant principalement des paramêtres et mes Userform :
C:\MonRepertoire\FichierMaître.xls

et plusieurs fichiers de données répartis par services :
C:\MonRepertoire\Données\Comptabilité.xls
C:\MonRepertoire\Données\Direction.xls
C:\MonRepertoire\Données\Secretariat.xls
.............

Je me vois donc dans l'obligation de modifier ma procédure de chargement du Listview qui se présentait comme ceci :

Code:
Private Sub UserForm_Initialize()

Utilisateur_Service = "Comptabilite"
'Utilisateur_Service = "Secretariat"
'Utilisateur_Service = "Direction"

Source = "Base_" & Utilisateur_Service

With ListView1
    .ListItems.Clear
    With .ColumnHeaders
        .Clear
        .Add , , "N° de dossier", 100
        .Add , , "Nom", 100
        .Add , , "Prenom", 100
        .Add , , "Montant HT", 100
        .Add , , "Montant TTC", 100
    End With

      
For i = 1 To Range(Source).Rows.Count - 1
    'MsgBox Range(Source).Rows.Count
    'MsgBox i
    MsgBox Range(Source).Item(i, 1)
    .ListItems.Add , Source & Range(Source).Item(i, 1), Range(Source).Item(i, 1)
    .ListItems(i).ListSubItems.Add , , Range(Source).Item(i, 2)
    .ListItems(i).ListSubItems.Add , , Range(Source).Item(i, 3)
    .ListItems(i).ListSubItems.Add , , Range(Source).Item(i, 4)
    .ListItems(i).ListSubItems.Add , , Range(Source).Item(i, 5)
Next

.View = lvwReport

End With

End Sub

Je voudrais donc savoir comment remplacer la partie en rouge dans:

Code:
.ListItems(i).ListSubItems.Add , , [COLOR="Red"]Range(Source).Item(i, 2)[/COLOR]

afin que ça me renvoi l'item(X,Y) contenu dans la plage nommée "Base_XXXXX" d'un des différents fichiers de données nommés C:\MonRepertoire\Données\XXXXX.xls

Petite précision, et pas des moindres, les fichiers de données comporteront un mot de passe en lecture ET en modification afin de garder une certaine confidentialité.

Toutes ces manip restent pour moi insoluble et je me permet de me tourner vers vous pour un peu d'aide.

Je vous joints un exemple du fichier d'origine que je dois éclater en 4 fichiers.

Merci d'avance à ceux qui sauront m'aider ou pas ^^

Edit : Avec le fichier joint, c'est mieux ^^
 

Pièces jointes

  • exemple.xls
    37 KB · Affichages: 130
  • exemple.xls
    37 KB · Affichages: 137
  • exemple.xls
    37 KB · Affichages: 132
Dernière édition:

bérylion

XLDnaute Occasionnel
Re : Importer et Exporter des données vers et depuis un classeur protégé

Salut

un essai comme ça ...

:confused:
 

Pièces jointes

  • MonRepertoire.zip
    42.5 KB · Affichages: 109
  • Base.xls
    44 KB · Affichages: 131
  • Base.xls
    44 KB · Affichages: 142
  • Base.xls
    44 KB · Affichages: 147

GeoTrouvePas

XLDnaute Impliqué
Re : Importer et Exporter des données vers et depuis un classeur protégé

un essai comme ça ... :confused:

Tu parles d'un essai ! C'est une véritable réussite ! ça marche impeccable et c'est vraiment rapide en plus. Merci beaucoup !

J'ai juste rajouté un petit "ActiveWorkbook.close" à la fin de la procédure histoire de libérer le fichier au plus vite.

J'aurai juste deux questions à te poser pour ma "culture perso" :

1) Si je comprend bien le début de la procédure, on ferme le classeur actif si ce n'est pas Base.xls avec la commande :
Code:
If Not ActiveWorkbook.Name = ThisWorkbook.Name Then ActiveWorkbook.Close , False

Quel est l'intérêt de faire ça ?

2) Comment ça se fait que Range(Source).item(1,1) renvoi la première cellule de la plage "Base_Comptabilité" du fichier Comptabilité.xls et non pas la cellule ("A1") de la première page de ce fichier ? Et oui, on avait simplement défini que :
Code:
Source = ActiveWorkbook.Sheets(1).Name
sans avoir parlé de cette plage.

Merci d'avance d'enrichir un peu mes connaissances et un immense merci pour ton aide !

Edit : la grammaire et moi, ça fait douze ^^
 

bérylion

XLDnaute Occasionnel
Re : Importer et Exporter des données vers et depuis un classeur protégé

1) Si je comprend bien le début de la procédure, on ferme le classeur actif si ce n'est pas Base.xls avec la commande :
Code:
If Not ActiveWorkbook.Name = ThisWorkbook.Name Then ActiveWorkbook.Close , False

Quel est l'intérêt de faire ça ?

re-

à chaque changement tu ouvres un classeur

si tu choisis "comptabilité" ensuite "secrétariat" et à nouveau "comptabilité", ce dernier sera déjà ouvert.

si tu veux éviter un message "fichier déjà ouvert blablabla..." mieux vaut qu'il ait été refermé avant.

si tu n'en as encore ouvert aucun, ton classeur actif est alors "base.xls" donc la il vaut mieux éviter de le fermer si tu veux que se poursuive l'exécution de ton code...

CQFD.

;)
 

GeoTrouvePas

XLDnaute Impliqué
Re : Importer et Exporter des données vers et depuis un classeur protégé

Ok chef ! J'ai tout compris ! ^^

J'ai encore le droit à une question ?

(Je pars du principe que OUI). Je suis en train d'adapter ton code à ma situation et je tombe sur un petit OS. Enfin deux en fait.

1) Je voudrais trouver comment faire pour tester si Comptabilité.xls (ou un autre) est déjà utiliser par quelqu'un d'autre avant d'importer les données.

2) La dernière colonne de mon listview est en fait une concatenation de deux éléments de Base. xls et d'un élement de Comptabilité.xls. J'ai tenté :
Code:
.ListItems(Compteur).ListSubItems.Add , , Range("Base").Item(i, 3) & " - " & Application.VLookup(Range("Base").Item(i, 3), Thisworkbook.Range("Table_Habilitation"), 3, False) & " " & Application.VLookup(Range("Base").Item(i, 3), Thisworkbook.Range("Table_Habilitation"), 2, False)

mais bien évidement ça marche pas. Aurais tu une idée ?

Je te remercie énormément pour ton aide et bon week end d'avance
 

bérylion

XLDnaute Occasionnel
Re : Importer et Exporter des données vers et depuis un classeur protégé

Enfin deux en fait.

pour le prix d'une ?! :mad:

1) Je voudrais trouver comment faire pour tester si Comptabilité.xls (ou un autre) est déjà utiliser par quelqu'un d'autre avant d'importer les données.


essaie un truc à base de ça :


Code:
If ActiveWorkbook.ReadOnly Then activeworkbook.close, false


2) La dernière colonne de mon listview est en fait une concatenation de deux éléments de Base. xls et d'un élement de Comptabilité.xls. J'ai tenté :
Code:
.ListItems(Compteur).ListSubItems.Add , , Range("Base").Item(i, 3) & " - " & Application.VLookup(Range("Base").Item(i, 3), Thisworkbook.Range("Table_Habilitation"), 3, False) & " " & Application.VLookup(Range("Base").Item(i, 3), Thisworkbook.Range("Table_Habilitation"), 2, False)

mais bien évidement ça marche pas. Aurais tu une idée ?

oui, mais pas ce soir... (brochettes/merguez au bord de l'eau...:D)

;)
 

GeoTrouvePas

XLDnaute Impliqué
Re : Importer et Exporter des données vers et depuis un classeur protégé

pour le prix d'une ?! :mad:

Ben vu que j'en suis à quelques millions de questions sur ce fofo, j'ai bien droit à une question gratuite non ? :D

essaie un truc à base de ça :

Ce sujet a été traité des millions de fois mais je n'ai pas trouvé de cas correspondant vraiment adaptable à ma situation. Je test ça tout de suite, merci !

oui, mais pas ce soir... (brochettes/merguez au bord de l'eau...)

;) Au moment où tu écrivais ça, j'étais en train d'éteindre mon pc pour partir faire la même chose (mais avec des côtes de porcs :p). C'était bien ?

Merci pour tes réponses et bon début de semaine.
 

GeoTrouvePas

XLDnaute Impliqué
Re : Importer et Exporter des données vers et depuis un classeur protégé

C'est bon ne te casse pas la tête bérylion je viens de trouver !:p

Je viens de comprendre que la méthode Range n'est pas applicable directement à Thisworkbook et qu'il faut intercaler un petit .sheets("Test") entre les deux, ce qui donne :

Code:
Thisworkbook.Sheets("Test").Range("MaPlage").Item(1,1)

Par contre je comprend pas bien la raison du pourquoi puisque chaque plage nommée est unique à l'intérieur d'un classeur. Je vois donc pas pourquoi, dans ce cas, il faut préciser le nom de la feuille.......
 

Discussions similaires

Statistiques des forums

Discussions
312 308
Messages
2 087 105
Membres
103 469
dernier inscrit
Thibz