Aide pour la mise en oeuvre de GetOpenFileName

sebgo

XLDnaute Occasionnel
Bonjour le forum

Avec l'aide du forum, j'ai pu réaliser une macro d'importation de données d'un classeur excel vers le classeur cible. (un coucou à Bernard pour son aide). Il marche avec la contrainte que le fichier soit ouvert. Or je voulais passer par la méthode GetOpenFileName pour sélectionner le nom du fichier dans un repertoir sans forcément l'ouvrir au préalable. Mais je bute sur cette méthode. Je joint le code pour toute adaptation possible.

Sub TransfertDonneesFeuille()
Dim Classeur As String, Feuille As String
Dim Lig As Integer, MyValue As Byte, Ws As Object

MyValue = MsgBox("Souhaitez-vous effectuer un transfert de données ?", vbYesNo + vbCritical + vbDefaultButton2, "DECISION DE TRANSFERT")
If MyValue = vbNo Then Exit Sub
' Affiche le message de saisie du nom du classeur source
Do
Classeur = InputBox("Veuillez entrer le Nom du classeur source !", _
"ORIGINE DES DONNEES", "Nom") ' Valeur de la variable.
If Classeur = "Nom" Or Classeur = "" Then
'Message de vérification de décision d'annuler le transfert de données
MyValue = MsgBox("Souhaitez-vous annuler le transfert de données ?", _
vbYesNo + vbCritical + vbDefaultButton1, "DECISION DE TRANSFERT")
If MyValue = vbYes Then Exit Sub
End If
Loop Until Classeur <> "" And Classeur <> "Nom"
' Mise en forme
Classeur = Classeur & ".xls"
' Boucle sur les feuilles du classeur
For Each Ws In Workbooks(Classeur).Worksheets
If Ws.Range("A2") <> "" Then ' Cellule de recherche de données
'Dernière ligne du classeur cible
Lig = ThisWorkbook.Sheets("Kits").Range("A65000").End(xlUp).Row
' Transfert des données d'une plage du classeur source sur le classeur cible
Workbooks(Classeur).Sheets(Ws.Name).Range("A2:F10000 ").Copy
ThisWorkbook.Sheets("Kits").Range("A" & Lig + 1).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Exit Sub
End If
Next Ws
End Sub

Merçi par avance
Sebgo
 

Luki

XLDnaute Accro
Re : Aide pour la mise en oeuvre de GetOpenFileName

Bonsoir Segbo

Voici un exemple pour utiliser le getopenfilename.

A savoir: avec cette fonction, le fichier n'est pas ouvert directement; elle se limite à renvoyer le path complet du fichier sélectionné, ou False si clic sur annuler.
Pour l'ouvrir, il faut passer par un Wokbooks.open par ex.

Je n'inclus pas l'exemple dans ton code car je n'ai pas compris où tu veux l'utiliser.

Code:
Sub segbo()
Dim MonClasseur  As Variant 'Variable qui récupère le résultat de getopenfilename type variant

MonClasseur = Application.GetOpenFilename ' ouverture de la boite de dialogue
If MonClasseur = False Then Exit Sub  ' si clic sur annuler, renvoie false ( c'est pour ça que la variable n'est pas string, sinon bug)
Application.Workbooks.Open (MonClasseur) ' ouverture du fichier par exemple ou tout autre action à partir du chemin complet du fichier
end sub
tu peux tester cette macro directement à partir de l'éditeur.

Bonne soirée
 

sebgo

XLDnaute Occasionnel
Re : Aide pour la mise en oeuvre de GetOpenFileName

Bonjour Luki, le forum

Peut-être je me suis mal expliqué mais je joint les deux fichiers allégés pour une meilleure compréhension du problème. Pour pouvoir importer le fichier de données je dois au préalable l'ouvrir et ensuite saisir son nom dans l'inputbox. C'est cette étape de l'inputbox que je voudrai éviter en utilisant la boîte de dialogue ouvrir pour choisir le fichier et effectuer le transfert. La suite du programme est bon.

Merci et A+
 

Pièces jointes

  • Application.zip
    17.3 KB · Affichages: 37
  • Application.zip
    17.3 KB · Affichages: 48
  • Application.zip
    17.3 KB · Affichages: 31

Luki

XLDnaute Accro
Re : Aide pour la mise en oeuvre de GetOpenFileName

Bonsoir Segbo.

Désolé, je ne comprends pas ce qui te pose problème.

Je comprends que tu veux importer les données du classeur "données" vers la feuille "kit" du classeur actif. Est-ce bien celà?

Je ne saisis pas pourquoi tu dois ouvrir le classeur et ensuite saisir son nom. S'agit-il du classeur "Données"?, dans ce cas, la macro sait-elle où il se trouve?
Si tu as ouvert le classeur, tu connais son nom. Pourquoi le saisir?

Peux tu décrire pas à pas ce que tu veux qui se passe quand tu appuyes sur le bouton? (pas ce qui se passe actuellement) ? et quelles sont les contraintes?

A te lire.
 

sebgo

XLDnaute Occasionnel
Re : Aide pour la mise en oeuvre de GetOpenFileName

Salut Luki, le forum

Merci pour avoir planché sur mon problème. Je vais décrire la situation actuelle et dire ce que je veux. Pour effectuer des abonnements en telephonie mobile, je recois régulièrement des puces associées à des numéros sous forme de liste (Tableau de 6 colonnes) en fichier Excel constitué de milliers d'enregistrements. Avant ma prise de service le travail était fait manuellement. J'ai donc décidé de faciliter la tâche de mes collaborateurs en concevant (avec l'aide de ce forum) une application qui fonctionne correctement, ce qui leur fait gagner énormément de temps.
Il se trouve que lorsque je reçois les puces associées a la liste (fichier Excel dont le nom change régulièrement), je dois copier manuellement les données du fichier de données vers l'onglet où elles doivent être stockées dans l'application. Or je voulais éviter cette manip car je veux limiter l'accès des onglets de l'appli aux utilisateurs (pour éviter qu'on change les noms).
Or pour pouvoir importer les données, le fichier doit obligatoirement être ouvert et je dois mentionner son nom dans l'inputbox. Ce qui peut être fastidieux pour les non initiés.
Les changements que je veux apporter c'est que lorsque je reçois le fichier (par mail), je l'enregistre dans le disque et pour l'import, la macro m'ouvre la boite de dialogue pour la sélection du fichier, s'ensuit deux inputbox qui me demandent de spécifier la plage de données et hop! l'importation prend s'effectue.
En fait, Thierry m'avait aidé dans ce sens à confectionner un une macro d'importation pour le format text que j'utilise pour une autre appli. J'ai essayé de l'adapter à la nouvelle situation mais je bute. Je joint les deux fichiers + celui que Thierry pour que tu te fasses une idee de ce que je veux. Merci et A+

SEBGO
 

Pièces jointes

  • Application.zip
    31.8 KB · Affichages: 53
  • Application.zip
    31.8 KB · Affichages: 38
  • Application.zip
    31.8 KB · Affichages: 41

albert

XLDnaute Occasionnel
Re : Aide pour la mise en oeuvre de GetOpenFileName

bonjour Luki, sebgo, forumiens, forumiennes,

j'ai regardé rapidement....
seulement une suggestion :

il faut peut-être utiliser GetObject plutôt que GetOpenFilename ???

fichier source = Representants_par_departements.xls

fichier à compléter = Rep_Clients.xls
 

Pièces jointes

  • getobject.zip
    12.8 KB · Affichages: 33

pierrejean

XLDnaute Barbatruc
Re : Aide pour la mise en oeuvre de GetOpenFileName

bonjour Segbo
Salut Luki

Luki n'etant pas disponible pour l'instant je pense qu'il ne m'en voudra pas de te faire une proposition (honnete !!)

ps: bonjour Albert
et mes excuses !! : je n'avais pas rafraichis
 

Pièces jointes

  • importsebgo.xls
    28 KB · Affichages: 59
  • importsebgo.xls
    28 KB · Affichages: 62
  • importsebgo.xls
    28 KB · Affichages: 60

sebgo

XLDnaute Occasionnel
Re : Aide pour la mise en oeuvre de GetOpenFileName

Salut Luki, Albert, Pierrejean,

Déjà beaucoup de gagné. Pierrejean y a-t-il possiblité que lors de l'import deux inputbox récupèrent les numéros de début et de fin de plage et que la macro copie ensuite cette plage pour la placer à la première ligne libre? Il arrive des fois que le stock ne soit pas épuisé et qu'on enregistre des entrées. Aussi, comme le fichier est souvent volumineux (+ de 10 000 enregistrements) alors que la plage destinée à l'agent se situe souvent autour de 500 enregistrements, c'est la raison pour laquelle je veux la délimiter pour ne pas allourdir inutilement le fichier.
Merçi de votre aide et A+.
 

pierrejean

XLDnaute Barbatruc
Re : Aide pour la mise en oeuvre de GetOpenFileName

bonsoir

peux-tu tester cette version

j'ais modifié le type de donnée pour les lignes long au lieu d'integer

j'espere que le probleme venait de la !!
 

Pièces jointes

  • importsebgo.xls
    31 KB · Affichages: 47
  • importsebgo.xls
    31 KB · Affichages: 58
  • importsebgo.xls
    31 KB · Affichages: 52

Luki

XLDnaute Accro
Re : Aide pour la mise en oeuvre de GetOpenFileName

bonsoir à vous tous,

Ci-joint, le fichier de PierreJean avec une variante utilisant "getOpenfileName" (je crois que c'était le sujet du fil! lol)

A toi de voir....

PierreJean, pas de soucis pour que tu prennes le relais quand je travaille!;)
Mais, comment gérer un clic sur le bouton"annuler" avec xldialogopen? Dans l'exemple, la macro continue quoi qu'il arrive!

A bientôt
 

Pièces jointes

  • importsebgoluki.xls
    34 KB · Affichages: 60
  • importsebgoluki.xls
    34 KB · Affichages: 59
  • importsebgoluki.xls
    34 KB · Affichages: 54

pierrejean

XLDnaute Barbatruc
Re : Aide pour la mise en oeuvre de GetOpenFileName

bonjour sebgo

salut Luki

et merci pour ton autorisation

en effet , j'avais oublié de traiter la sortie de la boite de dialogue Open

voila qui est fait (d'une maniere adaptée au sujet et non de façon générale ce que je regrette)
 

Pièces jointes

  • importsebgoluki.xls
    35 KB · Affichages: 55
  • importsebgoluki.xls
    35 KB · Affichages: 61
  • importsebgoluki.xls
    35 KB · Affichages: 62

sebgo

XLDnaute Occasionnel
Re : Aide pour la mise en oeuvre de GetOpenFileName

Bonjour Luki, Pierrejean

Merci pour votre aide combien précieuse. Ca marche sauf que j'ai une dernière doléance: Serait-il possible de délimiter la plage par les numéros d'appel de la colonne A en lieu et place des numéros de ligne? Je préfère cette option car connaissant le niveau en excel de mes utilisateurs...

Merçi à vous et à bientôt.
 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 335
Membres
102 864
dernier inscrit
abderrashmaen