Import fichier txt avec critères

  • Initiateur de la discussion Initiateur de la discussion sebgo
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

sebgo

XLDnaute Occasionnel
Bonjour
Grâce au fil ouvert en août par Dilack qui portait sur l 'importation de fichier txt par macro (https://www.excel-downloads.com/threads/import-et-export-de-tx.65853/, j ai pu résoudre beaucoup d'équations à mon niveau avec la macro de Thierry (que je remercie bcp). Seulement j'ai un autre problème à resoudre:
En effet, je reçois chaque semaine d'un central téléphonique pour traitement, un fichier txt avec une liste de numéros d'appel que je dois sélectionner en fonction du critère de zone. J'ai seulement besoin d'importer la plage comprise entre 40540000 et 40569999 (la numérotation étant à 8 chiffres), le restant ne m'intéresse pas.
NB : les numéros dans le fichier txt sont triés par ordre numerique.
Merçi par avance pour toute aide.
 
Re : Import fichier txt avec critères

bonsoir SebGo, le Forum

Fissa fissa, voici un petit algo en partant de l'exemple que j'avais donné dans le lien que tu as mis en ligne....

On part ici du même principe de fichier que Dilack (Base de 3 colonnes, séparateur "," comma (virgule))

Code:
Option Explicit

Sub ImportTXT()
Dim Record As String
Dim Container As Variant
Dim i As Integer, ii As Byte
Dim ThePath As String
 
ThePath = ThisWorkbook.Path & "\Phone_Numbers.txt" [COLOR=green]'A Adapter...
[/COLOR]Open ThePath For Input As #1
    
    
i = 2 [COLOR=green]'Ligne de démarrage de l'import sur la feuille cible...[/COLOR]

    Do While Not EOF(1)
        
        Line Input #1, Record
        Container = Split(Record, Chr(44)) [COLOR=green]'44 = "," (le séparateur)
[/COLOR]            
            Select Case Val(Container(0)) [COLOR=green]'Le numéro se trouve dans la première Colonne (Base Zéro)
[/COLOR]            Case 40540000 To 40569999
                For ii = 1 To 3 [COLOR=green]'Si il a trois colonnes...
[/COLOR]                
                    With ThisWorkbook.Worksheets("Import_TXT") [COLOR=green]'Feuille devant exister
[/COLOR]                       .Cells(i, ii) = Container(ii - 1)
                    End With
                
                Next ii
            i = i + 1
            End Select
            
            
    Loop
Close #1
End Sub

Je n'ai pas testé avec des vrais numéros de téléphone, le souci prévisible est qu'ils ne soit pas compris comme des valeurs numériques selon leur format... Mais bon sait-on jamais 🙂

Bon Week End à tous et toutes

@+Thierry
 
Re : Import fichier txt avec critères

Salut, Thierry, Grand Chef Iroquois!

Content de te lire et bon courage pour tes codes SQL "presque" les m^mes d'un langage à l'autre (le"presque" garantit les crises de nerf)lol

Amitiés

ps: excuses moi seggo de foutre le b... dans ton fil!
 
Re : Import fichier txt avec critères

Bonjour Thierry, le Forum
J'ai adapté la nouvelle macro à ma situation et ça fonctionne 5 sur 5. Merçi énormement Thierry pour tes aides précieuses. Un coucou à Dilack s'il est de passage dans le c.. pardon le post.
Bon Week à tous et en particulier à Hervé.
Bye
Sebgo
 
Re : Import fichier txt avec critères

Bonjour SebGo, cher ami Michel_M, Le Forum

Heureux pour toi que tout fonctionne bien, si les numéros de Tel avaient été vu en "string" et non en "number", j'avais une petite idée aussi, mais cela aurait vraiment ralentit le shmilblick !

Et oui Michel, merci pour ton intervention, le SQL vers Oracle, à Travers des produits Sybase, ça donne un peu mal aux cheveux ! mais grand merci pour ton encouragement !

Bien à Toi Michel

Bien à Vous

@+Thierry
 
Re : Import fichier txt avec critères

Re Thierry, le forum,
Je suis re-là pour deux problèmes que je n'ai pu trouver solution par la suite et je viens abuser une fois de plus de votre génorisité.

Mon premier problème: en fait je reçois les données essentiellement de deux (2) types de centraux téléphoniques dont les formats de fichiers txt sont différents. Pour le premier central, pas de problème: le numéro commence à la première colonne.
Pour le deuxième type de central je bute: le numéro d'appel commence à la 8ème colonne et se termine à la 16ème colonne; le reste des caractères est constitué de numéros d'équipement (sans importance pour le traitement). J'ai joint un fichier exemple pour une meileure compréhension du problème.

Mon deuxième problème: je veux définir les plages à partir des valeurs récupérées de deux inputbox. J'ai essayé endéfinissant des variables mais c'est pas fameux.
Bon week-end.
Sebgo
 

Pièces jointes

Re : Import fichier txt avec critères

Bonsoir SebGo, le Forum

Bah, j'aime pas du tout ton second central téléphonique !!!!

DN 4054 0000 YAKO ILCE 01 1 00 00 6X17
OPT CFW 1MR EMR 0 DGT RTP 0 ITDN !TMB CFB CFD VM

Je ne comprends pas grand chose....

Si 00 est à la 8ème colonne et DGT à la 16ème; il va avoir une drôle de tête le numéro de téléphone !!!

Non là dans l'état, je ne vois pas de solution...


Bon Courage
@+Thierry


PS pour ta question Subsidiare une approche par Application.InputBox :

Code:
Sub InputBoxRange()
Dim Plage As Range
Set Plage = Application.InputBox("Indiquez la plage", "Plage Sélection", "A1:A10", Type:=8)
Plage.Select
End Sub
 
Re : Import fichier txt avec critères

Re Thierry, le forum,
En effet la disposition des données dans le fichier est:
****DN*4054*0000*Yako...
****************OPT...
J'ai matérialisé les colonnes vides par des*. Donc en comptant, pour moi le premier chiffre du numéro (le premier 4) est à la 8 ème position et le dernier chiffre (le dernier des 4 zero) est à la 16 ème position. La suite c'est à dire "YAKO" est le nom donné au central de rattachement et "ILCE etc..." est le numéro d'équipement de l'abonné. Ces données sont facultatives. La seconde ligne représentent les options (restriction ou pas etc...). Là également j'ai pas besoin dans la suite du traitement.
En résumé les colonnes situées avant la 8ème et après la 16ème sont à éliminer du fichier CSV créé.
Ce que je fais actuellement est une véritable gymnastique. J'ouvre le fichier à partir d'excel, je l'importe dans access, je cré une requête sélection pour supprimer les espaces vides et ceux qui ne servent pas et enfin je le réexporte vers excel. Trop de jongleries.
Pour ce qui est de la question des inputbox, je crois que je me suis mal expliqué. Il s'agit de remplacer la condition
"case 40540000 to 40569999" par "case X1 to X2". X1 et X2 étant les valeurs extrêmes des numeros d'une zone que l'utilisateur définit lui même. J'ai été trop long, mais je crois c'était nécessaire.
Bonne nuit à tous.
Sebgo
 
Re : Import fichier txt avec critères

Bonjour SebGo, Michel, le Forum

Pour la question des InputBox pour déclarer en variable ta plage de numéro, il faut faire ainsi :

Code:
Sub GeneratePlageFromToParInputBox()
Dim X1 As Long, X2 As Long
Dim TheNumber As Long

TheNumber = 155 'Un Chiffre bidon qui proviendrait de la Boucle...
X1 = Application.InputBox("Indiquez Le Numéro de Départ", "Sélection", 100, Type:=1)
X2 = Application.InputBox("Indiquez Le Numéro de Fin", "Sélection", 200, Type:=1)
Select Case TheNumber
    Case X1 To X2
        MsgBox "Glop Glop"
    Case Else
        MsgBox "Pas Glop"
End Select
End Sub


Pour ton histoire assez tordue de fichier terminal téléphonique, je propose ceci, mais tu as aussi des données relativement corrompues dans ton TXT d'exemple :

Code:
[B][I][COLOR=red]e.g.:[/COLOR][/I][/B] 
* ALM050 MIN SET OHGY LKT EXT COB 
#186 080207

Enfin mis à part ceci (j'ignore aussi ces résidus), tu devrais arriver à un truc plus simple que des manips avec Access grace à cet algo :

Code:
Sub ImportTXTSpecial()
Dim Record As String
Dim i As Long
Dim ThePath As String
Dim S As Integer
Dim WS As Worksheet
Dim TmpNumber As String
 
Set WS = ThisWorkbook.Worksheets("Import_TXT")
 
ThePath = ThisWorkbook.Path & "\listedesabonnes.txt"
Open ThePath For Input As #1
    
i = 2
'123456789012345678901234567890123456789012
'    DN 4054 0000 YAKO ILCE 01 1 00 00 6X17
'                OPT  1MR EMR 0 DGT RTP 0 !PRE CFB CFD VM CND
    Do While Not EOF(1)
        
        Line Input #1, Record
        
        If Len(Record) > 5 Then
            If Mid(Record, 5, 1) <> Chr(32) And Mid(Record, 5, 1) <> Chr(35) Then
        
                For S = 1 To Len(Record)
                    Select Case S
                        Case 5
                            WS.Cells(i, 1) = CStr(Mid(Record, S, 2))
                        Case 8
                            TmpNumber = CStr(Mid(Record, S, 4))
                        Case 13
                            TmpNumber = TmpNumber & CStr(Mid(Record, S, 4))
                            WS.Cells(i, 2) = TmpNumber
                        Case 18
                            WS.Cells(i, 3) = CStr(Mid(Record, S, 4))
                        Case Is > 18
                            Exit For
                    End Select
          
                Next S
                
            i = i + 1
            End If
        End If
    Loop
Close #1
End Sub

Maintenant je te laisse mettre à profit mon aide pour arriver à incorporer les trois codes que je t'ai fournis afin de finaliser ton projet.


Bonne programmation et Dimanche

@+Thierry
 
Re : Import fichier txt avec critères

Bonjour Thierry, le forum
Je vais adapter les differents codes et je crois que ça devrait marcher. Au délà de tout ça je vois que j ai énormement appris dans ce post. Merçi bcp Thierry et bonne journée.
Sebgo
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour