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

23101.log (5.22 Ko)
16101-brut.xlsx (16.72 Ko)
22101-final.xlsx (18.35 Ko)

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

18101.log (5.22 Ko)

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

10test-1.xlsx (18.13 Ko)

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

8test2.xlsx (18.02 Ko)

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

6cd0402.log (5.32 Ko)
5cd0402.xlsx (16.83 Ko)

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

5test3.xlsx (17.49 Ko)
6test3brute.xlsx (16.59 Ko)

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

Rechercher des sujets similaires à "macro passage version anglaise francaise"