Importer fichier depuis dossier courant

Bonjour,

Après des recherches infructueuses je me permet de vous adresser ma demande.

le fichier à importer est dans le même répertoire que le fichier excel avec les macro.

Il y a dans le nom de ce fichier les termes "AP+" ou "Ap+" ou "aP+" ou "ap+" de systématique insérer (n'importa ou dans la chaine du nom du fichier).

Je souhaite programmer une macro qui (peut-être en passant par un string)

renvoie l'adresse courante du fichier, recherche le fichier contenant les 4 types de chaine cité et l'importé sur la feuille ou j'aurais placer la selection.

Je n'ai trouver que cela :

Dim Chemin As String

Chemin = ThisWorkbook.Path

qui renvoie l'adresse du fichier en cour, mais pour la suite je patauge complètement.

Merci, de vos conseils, si vous voyez d'autre solution pour le même résultat je suis bien sur preneur.

Salutation.


Pour résumer je souhaite si les 2 condition sont remplies :

nom du fichier contient sans tenir compte de la case "AP+"

est dans le répertoire courant au fichier excel en cours d'éxécution.

que l'importation s'éffectue toujours.

Bonjour

Essaie ce code :

Sub ouvrir()
    chemin = ThisWorkbook.Path & "\"
    nomfichier = Dir(chemin & "*.xls*")
    flag = 0
    Do While Len(nomfichier) > 0
            For x = 1 To Len(nomfichier)
                If Mid(nomfichier, x, 3) = "Ap+" _
                    Or Mid(nomfichier, x, 3) = "AP+" _
                    Or Mid(nomfichier, x, 3) = "aP+" _
                    Or Mid(nomfichier, x, 3) = "ap+" Then
                    nf = nomfichier
                    flag = 1
                    Exit Do
                 End If
                Next x
        nomfichier = Dir
    Loop
    If flag = 1 Then
        Workbooks.Open Filename:=chemin & nf
    End If
End Sub

Te convient-il ?

Bye !

Bonjour le fil, bonjour le forum,

Excelent code de GMB, comme d'hab...

Juste un petite modif si j'ose :

If UCase(Mid(nomfichier, x, 3)) = "AP+" Then

Pas tout à fait, le fichier que je souhaite ouvrir est un fichier .txt

je souhaiterais aussi importer sur une page de mon dossier courant excel le contenu d'un fichier axcel de la même manière que le .txt.

Pas simple


Bon j'ai modifier dans ton code par .txt et je remplace par UCASE (cond + courte) super ce code.

Je vais faire quelques tester déjà avec cela mais pourrais tu (que je comprenne dans les grande ligne expliquer succinctement ton code stp. De plus je n'utilise jamais de do while je ne suis pas très familier des cas donc pourquoi utiliser 1 do plus que juste while ?

D'avance merci beaucoup


par contre ton code ouvre mais n'importe pas sur la feuille sélectionne une chtite idée ?

Bonsoir le fil, bonsoir le forum,

gloutoni a écrit :

Pas tout à fait, le fichier que je souhaite ouvrir est un fichier .txt

C'est de ma faute... J'ai emprunté à GMB sa boule de cristal et j'ai oublié de la lui rendre...

j'ai tester avec cela mais message d'erreur : "membre de méthodes ou de données introuvable"

Sub ouvrir()

chemin = ThisWorkbook.Path & "\"

nomfichier = Dir(chemin & "*.txt*")

flag = 0

Do While Len(nomfichier) > 0

For x = 1 To Len(nomfichier)

If UCase(Mid(nomfichier, x, 3)) = "AP+" Then

nf = nomfichier

flag = 1

Exit Do

End If

Next x

nomfichier = Dir

Loop

If flag = 1 Then

Workbooks.Open Filename:=chemin & nf

End If

Cells.Select

Selection.Copy

Workbooks.select :="LISTE DE CHARGE VERSION FINALE"

Sheets("EXTRACTION AP+").Select

Sheets("EXTRACTION AP+").Activate

Selection.Paste

End Sub


Workbooks.Open Filename:="LISTE DE CHARGE VERSION FINALE"

Et avec celui-ci il me dit qu'il ne trouve pas le fichier

Bonjour Thau Thème

Merci pour tes remarques.

Je prends bonne note de la deuxième.

@ gloutoni

Nouveau code pour ouvrir ton fichier ''txt'' :

Sub ouvrir()
    chemin = ThisWorkbook.Path & "\"
    nomfichier = Dir(chemin & "*.txt")
    flag = 0
    Do While Len(nomfichier) > 0
            For x = 1 To Len(nomfichier)
                If Mid(UCase(nomfichier), x, 3) = "AP+" Then
                    nf = nomfichier
                    flag = 1
                    Exit Do
                 End If
                Next x
        nomfichier = Dir
    Loop
    If flag = 1 Then
        Workbooks.Open Filename:=chemin & nf
    End If
End Sub

Quant à ce que tu souhaites ensuite :

je souhaiterais aussi importer sur une page de mon dossier courant excel le contenu d'un fichier axcel

si tu veux ouvrir un fichier ''excel'' et coller une de ses pages dans ton fichier courant, il te faut préciser :

* le nom de ce fichier

* le nom de la page de ce fichier que tu veux récupérer

* sur quelle feuille de ton fichier courant tu la veux : nouvelle feuille ou nom d'une feuille qui existe...

* quel nom tu veux éventuellement donner à cette feuille

* si tu veux garder ouvert le fichier source ou si tu veux que la macro le referme....

Bye !

nom dossier source : contient "AP+", lieu dossier courant

nom feuille source : contient "AP+", il n'y a qu'une seule feuille dans ce fichier et varie a chaque utilisation

nom fichier cible "LISTE DE CHARGE VERSION FINALE"

nom feuille cible "EXTRACTION AP+"

je veux que le nom de la feuille reste inchangé sinon mes autres macro ne fonctionne plus ^^

et je veux fermer le fichier source

Merci


Sinon à partir de ce que tu as déjà fait c'est possible de sélectionner le fichier excel ouvert "LISTE DE CHARGE VERSION FINALE"

et d'y coller la sélection d'avant puis de sélectionner le fichier que tu a ouvert et de le fermer ?

A tester :

Sub ouvrir()
    Set f = ActiveWorkbook.Sheets("EXTRACTION AP+")
    chemin = ThisWorkbook.Path & "\"
    nomfichier = Dir(chemin & "*.txt")
    flag = 0
    Do While Len(nomfichier) > 0
            For x = 1 To Len(nomfichier)
                If Mid(UCase(nomfichier), x, 3) = "AP+" Then
                    nf = nomfichier
                    flag = 1
                    Exit Do
                 End If
                Next x
        nomfichier = Dir
    Loop
    If flag = 1 Then
        Workbooks.Open Filename:=chemin & nf
    End If
    Cells.Copy f.Range("A1")
    ActiveWorkbook.Close False
End Sub

Bye !

FANTASTIQUE, génial merci beaucoup


Petite remarque quand je test avec un fichier excel il me dit qu'il manque de ressources et excel plante.


voici juste les petite modification que j'ai apporter :

Set f = ActiveWorkbook.Sheets("EXTRACTION TRUST")

chemin = ThisWorkbook.Path & "\"

nomfichier = Dir(chemin & "*.xls")

flag = 0

Do While Len(nomfichier) > 0

For x = 1 To Len(nomfichier)

If Mid(UCase(nomfichier), x, 3) = "TRUST" Then

nf = nomfichier

flag = 1

Exit Do

End If

Next x

nomfichier = Dir

Loop

If flag = 1 Then

Workbooks.Open Filename:=chemin & nf

End If

Cells.Copy f.Range("A1")

ActiveWorkbook.Close False

j'ai tester de modifier le 3 en 5 le nombre de caractère et cela fonctionne merci bcp

gloutoni a écrit :

quand je test avec un fichier excel il me dit qu'il manque de ressources et excel plante.

L'instruction que tu as modifié est devenue mauvaise :

If Mid(UCase(nomfichier), x, 3) = "TRUST" Then

Dans le nom de ton fichier, si tu prends 3 lettres, tu n'auras jamais "TRUST"

Bye !

Oui merci beaucoup j'avais tester au pif, mais super conseil.

J'en ai une dernière promis, si le ou les fichier source ne sont pas présent comment je peux faire en sorte qu'il renvoie juste un msgbox sans planter complètement avec un test préalable mais je ne voit pas dut out comment.

Une idée ?


tester si le fichier est présent, comment cela pourrais se faire ?

gloutoni a écrit :

si le ou les fichier source ne sont pas présent comment je peux faire en sorte qu'il renvoie juste un msgbox

Modifie la fin du code :

    If flag = 1 Then
        Workbooks.Open Filename:=chemin & nf
        Cells.Copy f.Range("A1")
        ActiveWorkbook.Close False
    Else
        MsgBox "Il n'y a pas de fichier tel que vous souhaitez.", 16
        End
    End If
End Sub

Bye !

C'est parfait merci beaucoup


J'en ai 2 à insérer si c'est le premier qui manque (à l'exécution) cela fonction mais si c'est le deuxième (que que le premier est présent) alors j'ai cette erreur.

sans titre

dsl mais je doit gérer autant de cas non conforme que possible ^^

Bonjour,

J'ai trouver d'où viens l'erreur, c'est dut au fait que le fichier est protéger, est-il possible de forcer l'import sans enlever la protection manuellement ?

capture

Essaie de déprotéger ton document en début de macro :

ActiveSheet.Unprotect Password:=""

et de reprotéger en fin de macro :

ActiveSheet.Protect Password:=""

OK ?

Bye !

Bonjour,

je l'ai placer ici mais il me renvoi une erreur (la même) :

If flag = 1 Then

ActiveSheet.Unprotect Password:="" <= placer ici

Workbooks.Open Filename:=chemin & nf <= erreur ici

Cells.Copy f.Range("A1")

ActiveWorkbook.Close False

Else

Je viens de tester également de le placer après mais echec, en fait il refuse de l'ouvrir à cause du "mode protéger"

Bonjour

Déprotéger un document avant de l'avoir ouvert est une opération vaine et vouée à l'échec.

Inverse les instructions de cette façon et retente :

Workbooks.Open Filename:=chemin & nf
ActiveSheet.Unprotect Password:=""

Bonne chance !

Rechercher des sujets similaires à "importer fichier dossier courant"