Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/10/2011, 16h01   #1
Invité régulier
 
Inscription : août 2009
Messages : 23
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 23
Points : 9
Points : 9
Par défaut Fermeture fichiers txt non actifs excel

Bonjour,

Le but de ma macro est d'ouvrir plusieurs fichiers txt issus d'un système de radiocommunications et de compiler les infos dans un fichier excel unique afin de les traiter à l'aide d'une macro.
Pour l'ouverture, le choix des fichiers et la compilation je n'ai pas de souci.
La où je coince c'est pour la fermeture des fichiers txt.
Ci-dessous mon code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Sub Ouverture_TXT()
Dim lignefin As Integer
 
Fichiers = Application.GetOpenFilename("Fichiers Texte (*.txt), *.txt", , , , True)
 
If IsArray(Fichiers) Then
    For i = LBound(Fichiers, 1) To UBound(Fichiers, 1)
        Workbooks.OpenText Fichiers(i) _
        , Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
        Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
        Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1)), _
        TrailingMinusNumbers:=True
 
        lignefin = ActiveSheet.UsedRange.Rows.Count
        Range("A3:H" & lignefin - 1).Copy
        Windows("Utilisation_postes.xls").Activate
        lignefin = ActiveSheet.UsedRange.Rows.Count
        Range("A" & lignefin + 2).Select
        ActiveSheet.Paste
        Cells.EntireColumn.autofit
    Next i
Else
Exit Sub
End If
 
End Sub
J'ai essayé de mettre
après ma commande copy mais je n'arrive pas à forcer la fenêtre qui me demande si je veux garder les donnés de mon presse papier.

J'ai également essayé des choses du type
Code :
1
2
Fichiers(i).activate
Fichiers(i).close
mais cela ne fonctionne pas.

Si quelqu'un(e) avait une idée à me soumettre ce serait vraiment sympa.

Amicalement
Scrabblouille est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2011, 16h17   #2
Invité régulier
 
Inscription : août 2009
Messages : 23
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 23
Points : 9
Points : 9
Re-bonjour,

Je viens de trouver un début de solution
Code :
1
2
Nomfichier = Mid(fichiers(i), InStrRev(fichiers(i), "\") + 1)
        Windows(Nomfichier).Close
La seule chose ou je coince encore est donc de savoir comment répondre automatiquement à la question concernant le presse papier.

Cdlt.
Scrabblouille est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2011, 16h21   #3
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 899
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 899
Points : 7 185
Points : 7 185
Bonjour,

Je n'ai pas testé, mais je pense qu'en ajoutant une variable Workbook correspondant au fichier Texte ouvert se sera plus facile a manipuler

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Sub Ouverture_TXT()
Dim lignefin As Integer
Dim wrk As Workbook
 
Fichiers = Application.GetOpenFilename("Fichiers Texte (*.txt), *.txt", , , , True)
 
If IsArray(Fichiers) Then
    For i = LBound(Fichiers, 1) To UBound(Fichiers, 1)
 
 
        Workbooks.OpenText Fichiers(i) _
            , Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
            xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
            Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
            Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1)), _
            TrailingMinusNumbers:=True
 
        Set wrk = ActiveWorkbook
 
 
        lignefin = ActiveSheet.UsedRange.Rows.Count
        Range("A3:H" & lignefin - 1).Copy
        Windows("Utilisation_postes.xls").Activate
        lignefin = ActiveSheet.UsedRange.Rows.Count
        Range("A" & lignefin + 2).Select
        ActiveSheet.Paste
        Cells.EntireColumn.AutoFit
 
        Application.DisplayAlerts = False
        wrk.Close False
        Application.DisplayAlerts = True
 
    Next i
 
End If
 
End Sub
DisplayAlert permet de désactiver les messages d'erreurs
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/10/2011, 21h49   #4
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Bonjour
En complément du code amélioré par jfontaine, ci joint proposition sans les Activate, Select i Windows...
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Sub Ouverture_TXT()
Dim LigneFin As Long, NewLig As Long
Dim i As Integer
Dim Wrk As Workbook
Dim Sh As Worksheet
Dim Fichiers
 
Application.ScreenUpdating = False
Fichiers = Application.GetOpenFilename("Fichiers Texte (*.txt), *.txt", , , , True)
If IsArray(Fichiers) Then
    Set Sh = ThisWorkbook.Worksheets("Feuil1")             'A adapter selon la feuille destination de l'import des données
    For i = LBound(Fichiers) To UBound(Fichiers)
        NewLig = Sh.Cells(Sh.Rows.Count, "A").End(xlUp).Row + 2
 
        Workbooks.OpenText Filename:=Fichiers(i), Origin:=xlMSDOS, _
                           DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
                           ConsecutiveDelimiter:=False, Tab:=True, Comma:=True, _
                           FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), _
                                            Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1)), _
                                            TrailingMinusNumbers:=True
 
        Set Wrk = ActiveWorkbook
        With Wrk.Sheets(1)
            LigneFin = .Cells(.Rows.Count, "A").End(xlUp).Row - 1
            If LigneFin >= 3 Then .Range("A3:H" & LigneFin).Copy Sh.Range("A" & NewLig)
        End With
 
        Application.DisplayAlerts = False
        Wrk.Close False
        Application.DisplayAlerts = True
        Set Wrk = Nothing
    Next i
    Sh.UsedRange.EntireColumn.AutoFit
    Set Sh = Nothing
End If
End Sub
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/10/2011, 22h50   #5
Invité régulier
 
Inscription : août 2009
Messages : 23
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 23
Points : 9
Points : 9
Bonsoir,

Merci pour vos réponses.

Le "False" après le close répondait à ma question mais en bonus vous m'avez apporté des améliorations.

C'est très sympa de votre part.

Amicalement
Scrabblouille est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h56.


 
 
 
 
Partenaires

Hébergement Web