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.
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 SubBonjour,
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 SubMerci 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 Subpour 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