Copier une valeur d'un fichier .txt
Bonjour,
Je possède un programme qui copie et colle un fichier .txt dans une feuille excel.
Je change de fichier txt assez souvent, le contenu est toujours le même mais pas toujours à la même colonne. J'aimerai savoir s'il est possible de copier une partie du contenu de la cellule si le texte au dessus possède une certaine valeur :
Lorsque une cellule de la colonne A disons contient le texte :"Verification moyenne", je copie le contenu des cellules 3 lignes en dessous.
Je suis parvenu à sélectionner ma case à partir de laquelle je copie les données, mais pas à copier les données elle-mêmes.
If Not IsEmpty(ActiveCell.Value) Then
Do While Not (cellule = "** Vérification moyenne")
Auriez-vous une piste ? J'ai cherché avec la fonction Offset, et en incrémentant, mais je n'arrive pas à trouver une solution.
Salut Devery,
Dans le fichier ci-joint, il y a une macro qui recherche l'emplacement du texte ''Vérification moyenne'' et qui reporte le contenu des 3 cellues en dessous dans la colonne E.
Option Explicit
Sub Démo()
Dim Cellule As Range, i As Integer, j As Integer
For Each Cellule In ActiveSheet.UsedRange
If Cellule = "Vérification moyenne" Then
i = Cellule.Row
j = Cellule.Column
GoTo Etiquette
End If
Next
Etiquette:
Range(Cells(i + 1, j), Cells(i + 3, j)).Copy Range("E2")
End Sub
Ca t'aide ?
Amicalement.
Bonjour Yvouille,
Merci de ta réponse !
Je ne pensais pas que cela était si simple, est-il possible de relevé uniquement la valeur qui est 3 lignes en dessous (Donnée 110 ici) ?
Aussi, dans mon cas la ligne 110 contient plusieurs valeurs, voici un exemple :
******************************************************************************
Vérification moyenne
Mesure Brut Moyenne
Palier 1
14,985 14,984 14,972 14,983 14,998 14,999 14,996 14,991 14,990 14,990 14,989
Est-il possible de prendre les valeurs d'une range uniquement est pas de la cellule entière ? Ici il y a 10 valeurs puis une valeur moyenne, il faudrait donc ignorer la dernière valeur.
Enfin pourrais-tu m'expliquer un peu le fonctionnement de ton programme ? J'ai cherché sur différents forums et beaucoup utilisent des formules en ajoutant des sommes à x,y,i ou j comme ici. Je ne comprends pas très bien le fonctionnement
Un grand merci pour ton aide en tout cas !
Re,
Déjà ta première demande n'était pas très claire, mais là ça se complique de plus en plus.
Tu devrais déjà me fournir un fichier exemple. Par exemple lorsque tu me dis que ta ligne 110 contient plusieurs valeurs, je ne visualise pas du tout pourquoi tu parles de cette ligne 110 alors qu'un moment avant tu disais vouloir chercher la valeur d'une seule cellule !
En fait, ce n'est pas si facile que ça !Je ne pensais pas que cela était si simple
…. est-il possible de relevé uniquement la valeur qui est 3 lignes en dessous (Donnée 110 ici) ?
Oui, il suffit de remplacer la première ligne ci-dessous par la seconde, comme dans le fichier ci-joint.
Range(Cells(i + 1, j), Cells(i + 3, j)).Copy Range("E2")
Cells(i + 3, j).Copy Range("E2")
Enfin pourrais-tu m'expliquer un peu le fonctionnement de ton programme ? J'ai cherché sur différents forums et beaucoup utilisent des formules en ajoutant des sommes à x,y,i ou j comme ici. Je ne comprends pas très bien le fonctionnement
Tu me demandes presque un cours complet de VBA. Regarde dans le ruban au-dessus de nos message, il y a un ''Cours VBA''. Celui-ci est vraiment bien foutu. Si tu t'intéresses aux macros, commence par là.
Cordialement.
Bonjour Yvouille !
Désolé de répondre si tardivement, j'ai cogité la nuit dernière est je suis parvenu à une solution avec de l'aide supplémentaire d'autres personnes :
Sub status_sondes()
Dim x As Integer, lines As String, i As Long: x = FreeFile
fichier = Application.GetOpenFilename("Text Files (*.txt), *.txt", 1, "OUVRIR LE FICHIER TEXT", , False)
If fichier <> False Then
Open fichier For Input As #x: lines = Split(Input$(LOF(x), #x), "Numéros de série sonde / Status sonde")(1): Close #x
lines = Split(lines, " Trame de calibrage")(0)
tbl = Split(lines, "Sonde n°")
With Sheets(1)
.Cells(1, 1) = "Numéros de série sonde / Status sonde"
For i = 1 To UBound(tbl)
Cells(Rows.Count, 1).End(xlUp).Offset(1) = "Sonde n°" & Split(Replace(Application.Trim(tbl(i)), vbCrLf, ""), "*")(0)
Next
End With
End If
End Sub
Je suis parvenu au résultat souhaité, désolé de ne pas t'avoir informé plus tôt. (J'aurais du faire plus de recherche au préalable...)
Je te remercie cependant pour tout le temps que tu m'as accordé !
Bonne fêtes de fin d'années et joyeux noël
Salut,
je suis parvenu à une solution avec de l'aide supplémentaire d'autres personnes
Tu leur avais probablement donné plus d'informations qu'à moi
La personne qui t'a aidé t'a proposé une solution par ''tableau'', mais dans ce cas-ci ça ne change pas énormément, puisqu'il n'y a pas vraiment de temps à gagner. Comme à chaque fois, plusieurs solutions sont possibles.
Très bonnes salutations.