Macro passage version anglaise en française
Bonjour à tous,
Je recherche quelqu'un qui pourrait m'expliquer comment je peux faire une macro afin de réorganiser les données que je reçois sous ".log" en excel. La particularité est que ma tâche informatisée a été réalisée en Angleterre et donc des différences existent avec ma version d'excel.
Je reçois un fichier ".log" que j'introduis dans excel et ensuite je sépare les cellules en fonction des points sauf que parfois j'ai des décimales qui ne devrait pas être séparées dans certaines cellules.
Je vous ai ajouté le fichier texte ainsi qu'un fichier excel lorsque je sépare via les points et la version finale de ce même fichier que j'aimerais avoir sans devoir le faire manuellement.
Est-ce que quelqu'un pourrait m'aider?
Un grand merci pour votre aide,
Bien à vous,
Gaëtan Devos
Bonjour,
Les séparateurs décimaux et les séparateurs colonnes se confondent avec le même caractère (le point). Je crains qu'il faille traiter le fichier source manuellement. Vu les chiffres décimaux dans le fichier source, fais comme ceci :
1) Ouvre le fichier 101.log dans bloc note
2) Edition Remplacer (attention le séparateur devient le virgule dans la partie Remplacer et à la fin il y a un point ) :
0.35. par 0,35.
0.45. par 0,45.
0.55. par 0,55.
0.5. par 0,5.
0.7. par 0,7.
Cela fait cinq remplacements seulement.
Enregistre le fichier et ouvre-le avec le séparateur de colonnes comme le point.
Bonjour Raja,
Un grand merci pour votre aide.
Ca m'aide déjà pas mal mais le soucis qu'il reste c'est que si je fais comme vous me le suggérer les chiffres qui terminent par 0 et le suivant qui commence par le chiffre que je veux remplacer le programme met également une "," ce qui est gênant pour la suite.
Un grand merci encore,
Bien à vous
Re,
Non si tu fais exactement comme je le dit dans mon premier message, ça marchera. En tout cas, j'ai testé avec succès. Voir la PJ
super, un grand merci.
C'est déjà un gain de temps très important que je vais pouvoir faire.
Bien à vous
Bonjour,
un essai qui suppose que tous les nombres décimaux commencent par 0
Sub aargh()
dl = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To dl
For t = 1 To 2
If t = 1 Then
d1 = 10: d2 = 14: d3 = 8: d4 = 6: d5 = 2: d6 = 11
Else
d1 = 12: d2 = 16: d3 = 16: d4 = 15: d5 = 12: d6 = 14
End If
For k = d1 To d2
If Not IsNumeric(Cells(i, k)) Then Exit For
Next k
k = k - d6
n = ""
j = 2
r = j
While k > 0 And j < d3
If Cells(i, j) <> 0 Or n = "0" Then
If n <> "" Then
n = n & "," & Cells(i, j)
Cells(i, r) = n
n = ""
r = j + 1
j = j + 1
k = k - 1
Else
r = j + 1
j = j + 1
End If
Else
n = Cells(i, j)
j = j + 1
End If
Wend
For j = d4 To d5 Step -1
If InStr(Cells(i, j), ",") <> 0 Then Cells(i, j + 1).Delete shift:=xlToLeft
Next j
Next t
Next i
End Sub
oui tous les chiffres décimaux commencent par 0.
Je dois simplement maintenant créer une macro et entrer ce code là?
Pourriez-vous me dire où dois-je encoder le code?
Merci
gaetanphd a écrit :oui tous les chiffres décimaux commencent par 0.
Je dois simplement maintenant créer une macro et entrer ce code là?
oui, enlever sub et end sub si déjà présent dans la macro
Pourriez-vous me dire où dois-je encoder le code?
si tu as créé une macro, ta macro se trouvera dans un nouveau module, ce qui convient.
une autre manière de faire
copier le code de la macro sur le forum (tout sélectionner puis ctrl-C)
en excel, faire alt-F11-> l'éditeur de macro est affiché
ensuite choisir, insérer, module
coller le code (ctrl-V)
alt-F11 pour retour à excel
lancer la macro aargh via alt-F8
Bonjour,
J'ai testé la macro elle est quasi parfaite.
Je vous mets le fichier en pièce jointe.
Il reste encore la colonne G où certains chiffre sont avec un 0, devant et cela ne devrait pas et la colonne L et M où il faudrait que dans la colonne L on y trouve 0.5 et dans la L 1 ce qui décalerait les autres cellule correctement, est-ce possible?
Un énorme merci pour votre aide, c'est super ces forums.
Gaëtan
re-bonjour,
version corrigée
Sub aargh()
Application.ScreenUpdating = False
dl = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To dl
For t = 1 To 2
If t = 1 Then
d1 = 11: d2 = 14: d3 = 8: d4 = 6: d5 = 2
Else
d1 = 14: d2 = 15: d3 = 16: d4 = 15: d5 = 11
End If
For k = d1 To d2
If Not IsNumeric(Cells(i, k)) Then Exit For
Next k
k = k - d1
n = ""
j = d5
r = j
While k > 0 And j < d3
If Cells(i, j) <> 0 Or n = "0" Then
If n <> "" Then
n = n & "," & Cells(i, j)
Cells(i, r) = n
n = ""
k = k - 1
End If
j = j + 1
r = j
Else
n = Cells(i, j)
j = j + 1
End If
Wend
For j = d4 To d5 Step -1
If InStr(Cells(i, j), ",") <> 0 Then Cells(i, j + 1).Delete shift:=xlToLeft
Next j
Next t
Next i
Application.ScreenUpdating = True
End Sub
Bonjour,
La macro est quasi quasi parfaite.
La dernière petite chose qui pourrait être faite si c'est possible c'est lorsqu'il y a une réponse 0 dans la colonne B et que le chiffre suivant est 0 de les séparer car cela pose un mini soucis pour la colonne C qui devrait être par 0.85 au lieu de 85.
SI vous savez régler ce petit soucis ce serait génial.
Encore un énorme merci j'ai gagné des heures grâce à vous deux.
Bonne journée,
Gaëtan
bonjour
peux-tu mettre le fichier avec les données brutes (qui provoquent le problème) ?
Bonjour,
le soucis vient du fait que parfois les gens peuvent répondre 0 ou 0,8 ou 0,75. Si c'est 0 il n'y a pas deux colonnes à remettre ensemble.
Un grand merci pour ton aide.
J'ai mis le fichier texte et le le fichier excel.
Bonne journée,
Gaëtan
Bonsoir,
une nouvelle proposition
Sub aargh()
Application.ScreenUpdating = False
dl = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To dl
For t = 1 To 2
If t = 1 Then
d1 = 11: d2 = 14: d3 = 8: d4 = 6: d5 = 2
Else
d1 = 14: d2 = 15: d3 = 16: d4 = 15: d5 = 11
End If
For k = d1 To d2
If Not IsNumeric(Cells(i, k)) Then Exit For
Next k
k = k - d1
n = ""
j = d5
r = j
While k > 0 And j < d3
If Cells(i, j) = 0 And Cells(i, j + 1) = 0 Then
j = j + 1
r = j
End If
If Cells(i, j) <> 0 Or n = "0" Then
If n <> "" Then
n = n & "," & Cells(i, j)
Cells(i, r) = n
n = ""
k = k - 1
End If
j = j + 1
r = j
Else
n = Cells(i, j)
j = j + 1
End If
Wend
For j = d4 To d5 Step -1
If InStr(Cells(i, j), ",") <> 0 Then Cells(i, j + 1).Delete shift:=xlToLeft
Next j
Next t
Next i
Application.ScreenUpdating = True
End Sub
Bonjour,
C'est quasi quasi parfait.
Il y a juste dans le fichier test 3 trois lignes (23. 25 et 27) où le dernier chiffre devrait être 0.5 et pas 5. La colonne précédente on a 0.0 au lieu de 0.
Je t'ai joint le fichier pour te montrer et le fichier brut de ce participant.
Encore un grand merci,
Gaëtan
bonjour,
j'espère que cette fois-ci c'est la bonne
Sub aargh()
Application.ScreenUpdating = False
dl = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To dl
For t = 1 To 2
If t = 1 Then
d1 = 11: d2 = 14: d3 = 8: d4 = 6: d5 = 2
Else
d1 = 14: d2 = 15: d3 = 16: d4 = 15: d5 = 11
End If
For k = d1 To d2
If Not IsNumeric(Cells(i, k)) Then Exit For
Next k
k = k - d1
n = ""
j = d5
r = j
While k > 0 And j < d3
If Cells(i, j) = 0 And Cells(i, j + 1) = 0 Then
j = j + 1
r = j
If Cells(i, j + 1) = 0 Then
j = j + 1
r = j
End If
End If
If Cells(i, j) <> 0 Or n = "0" Then
If n <> "" Then
n = n & "," & Cells(i, j)
Cells(i, r) = n
n = ""
k = k - 1
End If
j = j + 1
r = j
Else
n = Cells(i, j)
j = j + 1
End If
Wend
For j = d4 To d5 Step -1
If InStr(Cells(i, j), ",") <> 0 Then Cells(i, j + 1).Delete shift:=xlToLeft
Next j
Next t
Next i
Application.ScreenUpdating = True
End Sub
Bonjour,
Un énorme merci pour le temps passé à m'aider.
Elle fonctionne parfaitement.
Bonne continuation.
Gaëtan
Bonjour,
Je viens d'utiliser la macro que tu m'avais proposé et elle marche super bien. Cependant, j'applique également une seconde macro dessus et cela bug.
Serait-il possible de considérer après tous les changements de la macros les cases comme des nombres et pas comme des lettres?
Certains sont considérés comme des chiffres et d'autres des lettres (si transformation il y a eu ou pas) donc ca fait bugger la macro suivante.
Un grand merci,
Bien à toi,
Gaëtan
Bonjour,
à tester
Sub aargh()
Application.ScreenUpdating = False
dl = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To dl
For t = 1 To 2
If t = 1 Then
d1 = 11: d2 = 14: d3 = 8: d4 = 6: d5 = 2
Else
d1 = 14: d2 = 15: d3 = 16: d4 = 15: d5 = 11
End If
For k = d1 To d2
If Not IsNumeric(Cells(i, k)) Then Exit For
Next k
k = k - d1
n = ""
j = d5
r = j
While k > 0 And j < d3
If Cells(i, j) = 0 And Cells(i, j + 1) = 0 Then
j = j + 1
r = j
If Cells(i, j + 1) = 0 Then
j = j + 1
r = j
End If
End If
If Cells(i, j) <> 0 Or n = "0" Then
If n <> "" Then
n = n & "." & Cells(i, j)
Cells(i, r) = Val(n)
n = ""
k = k - 1
End If
j = j + 1
r = j
Else
n = Cells(i, j)
j = j + 1
End If
Wend
For j = d4 To d5 Step -1
If InStr(Cells(i, j), ",") <> 0 Then Cells(i, j + 1).Delete shift:=xlToLeft
Next j
Next t
Next i
Application.ScreenUpdating = True
End Sub
Bonjour,
Un énorme merci en tout cas.
j'ai un soucis avec mon autre macro elle mentionne une erreur de type 13, est-ce que tu sais ce que cela veut dire?
Puis-je te l'envoyer pour voir si tu sais faire qqchose ?
Un grand merci encore
Gaëtan