Valeur d'une ligne dans *.txt vers cellule Excel

Bonjour tout le monde,

Je galère pour faire une macro qui me récupère les valeurs d'un fichier TXT et qui me les mette dans une cellule dans Excel.

Je dois récupérer les numéros de série d'équipements dans le fichier texte, ils se trouvent après "ESN of device:" et les mettre dans une cellule dans Excel.

Exemple contenu fichier texte:

___________________________________________________________________________

ANRAS FJT Blagnac (10.17.36.21):

display current-configuration | i sysname

sysname RANRAS-BLAG

display esn

ESN of device: 2102354360DME9000053

___________________________________________________________________________

CLS BARCELONE (10.17.40.2):

display current-configuration | i sysname

sysname RCLS-BARCA

display esn

ESN of device: 2102353847DMEB001967

___________________________________________________________________________

Exemple fichier Excel:

A B C

1 Caption IP Address Serial number

2 ANRAS FJT Blagnac 10.17.36.21 A remplir avec ce qu'il y a après ESN of device:

3 CLS BARCELONE 10.17.40.2 A remplir avec ce qu'il y a après ESN of device:

Petit HIC , chalenge ou difficulté, car ceci est juste un exemple, il faut se dire que la clé primaire est l'adresse IP. Il faut que l'adresse IP dans le fichier texte corresponde à l'adresse IP dans le fichier Excel, et que par la suite la macro remplisse la colonne C avec le bon numéro de série.

Pourriez vous m'aider SVP??

Par avance merci de votre aide.

17exemple.txt (576.00 Octets)
11exemple.xlsx (8.16 Ko)

bonsoir,

une proposition de solution via une macro

Sub aargh()
    With Sheets("feuil1")
        dl = .Cells(Rows.Count, 2).End(xlUp).Row
        Set plip = .Cells(2, 2).Resize(dl)
        fn = "d:\downloads\exemple.txt" 'à adapter
        Open fn For Input As 1
        On Error GoTo terreur
        While Not EOF(1)
            Input #1, l
            s = InStr(l, "(")
            If s > 0 Then
                s1 = InStr(l, ")")
                ip = Mid(l, s + 1, s1 - s - 1)
            ElseIf InStr(l, "ESN of") > 0 Then
                esn = Replace(l, "ESN of device:", "")
                Set re = plip.Find(ip, lookat:=xlWhole)
                If re Is Nothing Then
                    MsgBox "ip " & ip & " non trouvée"
                Else
                    re.Offset(, 1) = esn
                End If
            End If
        Wend
terreur:
        Close 1
    End With
End Sub

Bonjour,

C'est vraiment super!! ça marche!! ça fait longtemps que je touche pas a la programmation et là c'est vraiment nickel!! Manque juste quelques finitions... Par exemple j'ai des sites ou j'ai 2 ESN, où il y a 2 voir 3 équipements

Exemple:

shtg-cas01-001 (172.17.0.85):

display current-configuration | i sysname

sysname SHTG-CAS01-001

display esn

ESN of slot 2: 2102350AQB10H9000014

ESN of slot 3: 2102350AQB10H9000017

Comme tu dois le comprendre j'allais pas mettre mon Vrai fichier Excel de 800 lignes avec le TXT qui allait avec. C'était juste un exemple.

Encore une fois merci pour ton aide sur 790 lignes ça m'a rempli correctement 724.

Bonjour,

considères-tu ta demande comme clôturée ou bien souhaites-tu une adaptation du code pour traiter les cas où il y a plusieurs numéros de série pour une site ?

Salut!!!

J'essayai de le faire moi même, mais je galère un peut a comprendre tout ton code.

Si t'as le temps, je veux bien ton aide pour traiter plusieurs numéros de série.

Je veux pas trop te demander non plus, mais si tu pouvais expliquer les lignes de code, ça serait sympa. J'aime bien comprendre ce que ça fait.

Sub aargh()
    With Sheets("feuil1") ' <-- feuil a appliquer la macro
        dl = .Cells(Rows.Count, 2).End(xlUp).Row ' <-- la variable dl fait quoi exactement?
        Set plip = .Cells(2, 2).Resize(dl) ' <-- la variable plip fait quoi exactement?
        fn = "d:\downloads\exemple.txt" 'à adapter ' <-- fn je comprends que c'est la variable du chemin du fichier texte
        Open fn For Input As 1 ' <-- la tu ouvres le fichier texte
        On Error GoTo terreur ' <-- si ficher pas trouvé va sur erreur 
        While Not EOF(1) ' <-- tant que ce n'est pas la fin du fichier
            Input #1, l ' <--- et a partir de la je suis largué, où est ce que tu compares les adresses IP? que font exactement les variables? etc...
            s = InStr(l, "(")
            If s > 0 Then
                s1 = InStr(l, ")")
                ip = Mid(l, s + 1, s1 - s - 1)
            ElseIf InStr(l, "ESN of") > 0 Then
                esn = Replace(l, "ESN of device:", "")
                Set re = plip.Find(ip, lookat:=xlWhole)
                If re Is Nothing Then
                    MsgBox "ip " & ip & " non trouvée"
                Else
                    re.Offset(, 1) = esn
                End If
            End If
        Wend
terreur:
        Close 1
    End With
End Sub

Merci pour ton temps.

Bonjour,

voici pour les commentaires.

Sub aargh()
    With Sheets("feuil1") ' <-- feuil onglet sur lequel exécuter la macro
        dl = .Cells(Rows.Count, 2).End(xlUp).Row ' dl dernière ligne utilisée en colonne 2
        Set plip = .Cells(2, 2).Resize(dl) ' plip est la plage contenant les adresses IP trouvées sur feuil1
        fn = "d:\downloads\exemple.txt" 'à adapter ' <-- fn je comprends que c'est la variable du chemin du fichier texte
        Open fn For Input As 1 ' <-- la tu ouvres le fichier texte
        On Error GoTo terreur ' <à partir d'ici si une erreur est rencontrée, on branche vers terreur
        While Not EOF(1) ' <-- tant que ce n'est pas la fin du fichier
            Input #1, l ' on lit une ligne et on met le contenu de la ligne lue dans la variable l
            s = InStr(l, "(") 's= position du caractère "(" dans la l
            If s > 0 Then 'si caractère "(" trouvé (s>0)
                s1 = InStr(l, ")") 's1 = position du caractère ")" dans l
                ip = Mid(l, s + 1, s1 - s - 1) 'adresse IP se trouve entre "(" et ")"
            ElseIf InStr(l, "ESN of") > 0 Then 'sinon si ESN trouvé dans la l
                esn = Replace(l, "ESN of device:", "") 'on enlève "ESN of device:" de l
                Set re = plip.Find(ip, lookat:=xlWhole) 'on recherche l'adresse ip dans la plage
                If re Is Nothing Then 'si non trouvée
                    MsgBox "ip " & ip & " non trouvée"
                Else 'si trouvée
                    re.Offset(, 1) = esn 'on note le numéro de série dans la 1ere colonne à droite de l'adresse IP
                End If
            End If
        Wend
terreur:
        Close 1
    End With
End Sub

pour une adaptation du code, où faut-il mettre les numéros de série quand il y en a plusieurs par adresse IP ? dans les colonnes suivantes ? dupliquer la ligne ? autre ?

Salut!

WOW MERCI!! du coup comme ça je comprends ce que ça fait ligne par ligne.

Pour répondre a ta question, je me disais au plus simple. Peut être dupliquer la ligne, non?

Encore une fois merci beaucoup pour ton temps.

du coup je me suis mis a suivre les cours VBA sur le site, histoire de voir si j'arrive encore a programmer quelque chose...

re-bonjour,

voici une version adaptée (non testée)

le plus simple , pour moi, était d'ajouter une colonne.

Sub aargh()
    With Sheets("feuil1")    ' <-- feuil onglet sur lequel exécuter la macro
        dl = .Cells(Rows.Count, 2).End(xlUp).Row    ' dl dernière ligne utilisée en colonne 2
        Set plip = .Cells(2, 2).Resize(dl)    ' plip est la plage contenant les adresses IP trouvées sur feuil1
        fn = "d:\downloads\exemple.txt"    'à adapter ' <-- fn je comprends que c'est la variable du chemin du fichier texte
        Open fn For Input As 1    ' <-- la tu ouvres le fichier texte
        On Error GoTo terreur    ' <à partir d'ici si une erreur est rencontrée, on branche vers terreur
        While Not EOF(1)    ' <-- tant que ce n'est pas la fin du fichier
            Input #1, l    ' on lit une ligne et on met le contenu de la ligne lue dans la variable l
            s = InStr(l, "(")    's= position du caractère "(" dans la l
            If s > 0 Then    'si caractère "(" trouvé (s>0)
                s1 = InStr(l, ")")    's1 = position du caractère ")" dans l
                ip = Mid(l, s + 1, s1 - s - 1)    'adresse IP se trouve entre "(" et ")"
            ElseIf InStr(l, "ESN of") > 0 Then    'sinon si ESN trouvé dans la l
                s = InStr(l, ":")
                esn = Mid(l, s + 1)    ' esn = partie à droite des ":"
                Set re = plip.Find(ip, lookat:=xlWhole)    'on recherche l'adresse ip dans la plage
                If re Is Nothing Then    'si non trouvée
                    MsgBox "ip " & ip & " non trouvée"
                Else    'si trouvée
                    j =1 'on cherche la première colonne vide à droite de l'adresse iP
                    While re.Offset(, j) <> ""
                        j = j + 1
                    Wend
                    re.Offset(, j) = esn    'on note le numéro de série dans la 1ere colonne vide à droite de l'adresse IP
                End If
            End If
        Wend
terreur:
        Close 1
    End With
End Sub
Rechercher des sujets similaires à "valeur ligne txt"