Macro de mise en page conditionelle

tinbo

XLDnaute Nouveau
Bonjour le forum,

Grace a votre aide j'ai enfin finis mes feuilles de traitement de donnees...

Merci beaucoup ;)


Malheureusement, je bloque sur la derniere ligne droite.:(

Aujourd hui je dois ouvrir le fichier texte, le mettre en forme et enfin le copier coller sur la premiere feuille de mon classeur de traitement.


Je souhaiterai savoir s'il etait possible de le faire automatiquement ?:confused:

c est a dire qu excel serait capable de reconnaitre automatiquement le fichier ( attention le fichier a un nom changeant ) de le mettre en page et de lui applique le traitement.

Pour Info le contenu du fichier texte commence toujours par [Info].
Tous mes calculs sont fait a partir une feuille nomme "Datas"

J ai joint un tit fichier pour montrer le modele.

Merci d avance pour votre aide

Bonne journee
Tinbo
 

Pièces jointes

  • Tinbo.zip
    3.4 KB · Affichages: 33

SergiO

XLDnaute Accro
Re : Macro de mise en page conditionelle

Bonjour Tinbo,

Voici un début de réponse :

Ce code affiche la boite de dialogue d'ouverture d'un fichier texte et le met en page comme souhaité (Faire Alt+F11 puis copier-coller le code dans ton fichier de traitement dans Module1)

Code:
Sub Import()

Dim Fichier As Variant
Dim Wb As Workbook

Fichier = Application.GetOpenFilename("Fichiers Texte (*.txt), *.txt")
If Fichier = False Then Exit Sub

  Set Wb = Workbooks.Open(Fichier)
  
  Workbooks.OpenText Filename:= _
  Fichier, Origin:=xlMSDOS, _
        StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=True _
        , Space:=False, Other:=True, OtherChar:="=", FieldInfo:=Array(Array(1, 1 _
        ), Array(2, 1), Array(3, 1), Array(4, 1)), TrailingMinusNumbers:=True

End Sub

@+
 

tinbo

XLDnaute Nouveau
Re : Macro de mise en page conditionelle

Merci Beaucoup Sergio,

j ai fais comme tu m as conseille mais apparement je me debrouille comme un pied... Ca marche po :(

je joint un extrait de mon classeur de traitement.

En faite mon idee est lorsque je ouvre le fichier texte, soit en double cliquant dessus ou bien en faisant ouvrir sous Excel, qu'il soit mis en forme et que le traitement des donnees soit effectue...

Le probleme c est que c est un fichier texte avec un nom different a chaque fois et comme je l ai deja dis ds mon precedent mail, le seul point commun avec tous les fichier texte c est que dans leur contenu ils commencent tous par: [Info]

Je me dis donc qu Excel, voit detecte que dans la cellule A1 il y a ce " [Info]"

Sinon rien ne se produit...


Et mes traitements se font sur un fichier nomme DATA ( voir exemple)

Merci encore pour ton aide:rolleyes:

Tinbo
 

Pièces jointes

  • Test2.zip
    15 KB · Affichages: 29
  • Test2.zip
    15 KB · Affichages: 31
  • Test2.zip
    15 KB · Affichages: 24

SergiO

XLDnaute Accro
Re : Macro de mise en page conditionelle

Re,

Je suis de retour avec ton fichier mis à jour (prise en compte du copier-coller dans Datas si A1=[info])

Attention ! Nom du fichier à modifier dans le code (Tinbo&VBA2.XLS)
 

Pièces jointes

  • Tinbo&VBA2.zip
    17.8 KB · Affichages: 38

tinbo

XLDnaute Nouveau
Re : Macro de mise en page conditionelle

Merci Sergio pour ton aide.

La mise en page conditionnelle fonctionne tres bien !!!!!:D

par contre, comment faire si mon classeur de traitement est ferme et j ouvre via excel ce fichier texte ??

j ai essaye et rien ne se passe...

J imagine que je dois transformer mon classeur entier en macro ??

j ai remarque aussi que lorsque j ai mon classeur de traitement ouvert si je ouvre via " ouvrir un fichier " un fichier texte, rien ne se passe aussi...

En faite je dois revenir a chaque fois sur la page ou il y a le bouton pour reactiver Ta macro.

Y a t il un moyen de la mettre par defaut comme composant d excel et que pour tous les fichier texte que je vais ouvrir par quelque moyen que ce soit Excel verifie si y a la ligne A1=[info] pour ensuite lance ta macro et carrement mes fichiers de traitement ??


Je sais j en demande beaucoup beaucoup:p

desole !!!:eek:

Bonne journee
Tinbo
 

SergiO

XLDnaute Accro
Re : Macro de mise en page conditionelle

Bonjour Tinbo,

Pour ouvrir et mettre en page un document texte si A1 = [Info], voici la macro qu'il faut mettre dans le Classeur de macros personnelles (Perso.xls)
Code:
Sub Import()

Dim Fichier As Variant
Dim Wb As Workbook

Fichier = Application.GetOpenFilename("Fichiers Texte (*.txt), *.txt")
If Fichier = False Then Exit Sub

  Set Wb = Workbooks.Open(Fichier)
  
  Workbooks.OpenText Filename:= _
  Fichier, Origin:=xlMSDOS, _
        StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=True _
        , Space:=False, Other:=True, OtherChar:="=", FieldInfo:=Array(Array(1, 1 _
        ), Array(2, 1), Array(3, 1), Array(4, 1)), TrailingMinusNumbers:=True
        
If Range("A1").Value <> "[Info]" Then

ActiveWorkbook.Close

Else


End If


End Sub

Ensuite, tu peux créer un nouveau bouton dans une barre d'outils et affecter cette macro import.

Comment veux-tu procéder ensuite pour le traitement?
 

tinbo

XLDnaute Nouveau
Re : Macro de mise en page conditionelle

Salut Sergio,

j ai donc fais comme ce que tu m as conseille.

J ai copie tes lignes de code ds Perso.xls ( d ailleurs faudrait que je sache ou est ce qu'il est sur mon disque dur...lol).

Quand je l execute, ta macro me demande d ouvrir un fichier...

Ce que j aimerai c'est qu elle detecte le fichier que j ouvre moi meme et qu elle le met en forme si elle trouve A1 = [Info].

Comme ca l utilisateur pourra faire clique droit sur le fichier texte, ouvrir avec excel, ca se lance, ta macro detecte A1, met en forme le fichier.

Ou si il est deja sur excel ouvre le fichier texte via l icone "ouvrir" et a ce moment precis ta macro entre en jeu pour la mise en forme...

Je sais que si on ajoute a une macro sur thisworkbook, les lignes:

Private Sub Workbook_Open()
Import
End Sub

Les macro se lancent automatiquement a l ouverture du classeur et le faite de le mettre dans perso.xls toutes les macro sont active a tout moment des qu on lance excel.


Pour le traitement, idealement cela serait que ta macro exporte en plus ce fichier texte dans le classeur de traitement.

Pour resumer:
1 - j ouvre le fichier texte ( n importe comment...clique droit souris, etc...)
2 - Ta Macro detecte A1 = [Info]
3 - Exporte toutes les valeurs ds la classeur de traitment ( meme ferme !!!)
4 - Mise en forme des donnees dans les colonnes qui convient.

Voila j espere que j ai ete vraiment plus clair sur ce que j essais de faire !

J imagine que c est vraiment pas evident...:confused:

J espere que tu pourras m aider !!!

Bonne journee quand meme !!!;)
Tin bo
 

SergiO

XLDnaute Accro
Re : Macro de mise en page conditionelle

Re,

Peut-être une solution satisfaisante :confused:

Voici un fichier à lancer pour ouvrir le fichier texte et vérifier s'il est exploitable.

1 - S'il ne l'est pas, Excel se ferme.

2 - S'il est exploitable ([info] en A1, ce fichier est mis en page puis le fichier de traitement est ouvert(son nom est modifiable en cellule D6)et les infos sont collées dans l'onglet "Datas".
Enfin,le fichier texte et le fichier Verif_Txt sont fermés. :)

Tu peux créer un raccourci de ce fichier sur ton bureau par exemple pour démarrer l'analyse.

@+
 

Pièces jointes

  • Verif_txt.xls
    38 KB · Affichages: 54

tinbo

XLDnaute Nouveau
Re : Macro de mise en page conditionelle

Salut Sergio,

Merci vraiment de te prendre la tete comme ca pour m aider...:eek:

Tout ton fichier est genial surtout la messagebox qui rend attrayante la macro.

Je voudrais juste savoir une chose, toutes tes propositions demarre avec la demande d'ouverture du fichier texte, cela veut dire que:

1- on doit d abord lancer Excel
2- on execute ta macro
3- Ta macro demande d'aller chercher le fichier texte
4- le traitement commence...

Est ce que cela veut dire qu Excel est incapable, si on ouvre le fichier nous meme, de detecter automatiquement que la cellule A1=[info] ?

je m explique:

1- j'ouvre le fichier texte
2- ta macro verifie si A1=[info]
3- deroulement du reste de ta macro...

Quand je dis ouvrir le fichier texte, c est que je fais par exemple:

clique droit sur le fichier texte puis ouvrir avec excel...

Si je fais comme ca et que je lance ta macro actuelle, elle me demande d'ouvrir le fichier texte qui est deja ouvert.

Je suis desole d etre aussi exigeant, j imagine tres bien que tu te prends deja bien la tete comme ca... :(

C est juste que je pense que c est une maniere plus naturelle plutot que d'ouvrir d abord excel et ensuite le fichier.

Generalement on recoit le fichier texte via email, c est pour ca que si on pouvait clicker dessus, il s'ouvrirait avec excel et la ta macro commencerait son traitement, donc cela simplifierait les procedure...:eek:

Petite question, est ce qu il existe le moyen de creer un bouton dans la barre outils qui lancerait Ta macro de mis en page et d exportation vers mon classeur de traitement ????

Cela serrait peut etre la solution ??

-J ouvre le fichier texte,
-dans la barre outils excel je clique sur un icone correspond a ta macro,
-ta macro verifie A1=[info]
-S'il est exploitable ce fichier est mis en page puis le fichier de traitement est ouvert et les infos sont collées dans l'onglet "Datas". Enfin,le fichier texte est fermés.
- S il ne l est pas, une boite de dialogue apparait pour prevenir mais ne ferme rien.



Encore merci pour ta patience...:D
Bonne journee
 

SergiO

XLDnaute Accro
Re : Macro de mise en page conditionelle

Bonjour,

On va y arriver !!! :)

J'ai suivi à la lettre ton cheminement détaillé dans ton dernier message.

Voici la macro à mettre dans le fichier de macros personnelles.

Code:
Sub Importation_Txt()

Dim Nom_Fichier_Txt As String
       
If Range("A1").Value = "[Info]" Then

    Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=True, Space:=False, Other:=True, OtherChar:= _
        "=", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), _
        TrailingMinusNumbers:=True

Range("F1:" & "A" & Range("A65536").End(xlUp).Row).Select
Nom_Fichier_Txt = ActiveWorkbook.Name
Selection.Copy

Workbooks.Open Filename:="D:\mes Documents\Tinbo&VBA2.xls"
Sheets("datas").Select
ActiveSheet.Paste Destination:=Range("A1")
Application.CutCopyMode = False
Sheets("Port Configuration").Select

Workbooks(Nom_Fichier_Txt).Close (False)
  
Else

MsgBox "Ce fichier n'est pas exploitable !"

End If

End Sub

Et ci-joint la méthode pour rajouter un bouton dans une barre d'outils qui va lancer cette macro.
 

Pièces jointes

  • Création_bouton.zip
    37.8 KB · Affichages: 30

SergiO

XLDnaute Accro
Re : Macro de mise en page conditionelle

Bonjour nat54,

Le fichier de macros personnelles est un fichier nommé PERSO.XLS qui est créé la première fois quand tu fais nouvelle macro et que tu choisis enregistrer la macro dans : fichier de macros personnelles.

Ce fichier est ensuite enregistré sur ton disque à l'emplacement suivant :

C:\Documents and settings\nom d'utilisateur\Application data\Microsoft\Excel\XLSTART

et s'ouvre au démarrage d'Excel afin que les macros qu'il contient soient exécutables.

En espérant avoir été assez clair

@ bientôt
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 842
Messages
2 092 715
Membres
105 517
dernier inscrit
Freddy93