IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Transformation de colonnes [XL-2013]


Sujet :

Macros et VBA Excel

  1. #21
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Je ne comprends pas ce que vous voulez dire, les samedis et dimanches sont en caractères gras pour mieux les distinguer, Que manque-t-il? Montrez un exemple de ce que vous attendez.
    Pièce jointe 481557

    Cdlt

  2. #22
    Membre à l'essai
    Homme Profil pro
    impiegato
    Inscrit en
    Mai 2019
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : impiegato

    Informations forums :
    Inscription : Mai 2019
    Messages : 113
    Points : 22
    Points
    22
    Par défaut
    Bonjour a trouvé le mystère vendredi le écrit en italien donc ça marche
    l me rend les samedis et les dimanches il n'y a pas de 01 à l'avant mais je le vois l'insérer à la main

    0120190301 FE070000
    20190302 R000000
    20190303 R000000

  3. #23
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Si vous voulez "01" devant les samedis et les dimanches
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    Option Compare Text
     
    Sub Copiare()
        Dim DerLig_F1 As Long, DerLig_F2 As Long, i As Long, j As Long, L As Long
        Dim ROL As Long, ORD As Long, FE As Long
        Dim f1 As Worksheet, f2 As Worksheet
        Dim Matr As String
     
        Application.ScreenUpdating = False
        Set f1 = Sheets("Foglio2")
        Set f2 = Sheets("Foglio3")
        f2.Cells.Clear
     
        DerLig_F1 = f1.[A10000].End(xlUp).Row
        f1.Range(Cells(1, "A"), Cells(DerLig_F1, "C")).Copy Destination:=f2.Cells(1, "A")
     
        Matr = Cells(1, "A")
        For i = 2 To DerLig_F1
            If f2.Cells(i, "A") = Matr Then
                f2.Cells(i, "A") = ""
            Else
                Matr = Cells(i, "A")
            End If
        Next
     
        f2.Select
        'Formule pour récupérer le jour
        Range("D1:D" & DerLig_F1).FormulaR1C1 = "=IF(RC[-1]<>"""",DATE(MID(RC[-2],3,4),MID(RC[-2],7,2),RIGHT(RC[-2],2))*1,"""")"
        Columns("D:D").NumberFormat = "[$-F800]dddd, mmmm dd, yyyy"
        Columns(2).NumberFormat = "@"
        For i = DerLig_F1 + 1 To 2 Step -1
            If Format(Cells(i - 1, "D"), "dddd") = "vendredi" Then
                If Cells(i, "B") <> "" Then Rows(i & ":" & i + 1).Insert Shift:=xlDown
                Cells(i, "D") = Cells(i - 1, "D") + 1
                Cells(i, "B") = Format("01" & Year(Cells(i, "D")) & Format(Month(Cells(i, "D")), "00") & Format(Day(Cells(i, "D")), "@"), "@")
                Cells(i + 1, "D") = (Cells(i, "D") + 1) * 1
                Cells(i + 1, "B") = Format("01" & Year(Cells(i + 1, "D")) & Format(Month(Cells(i + 1, "D")), "00") & Format(Day(Cells(i + 1, "D")), "00"), "@")
                Range(Cells(i, "C"), Cells(i + 1, "C")) = "R000000"
                With Range(Cells(i, "B"), Cells(i + 1, "C")).Font
                    .Name = "Calibri"
                    .Size = 11
                    .ColorIndex = 1
                End With
            End If
        Next i
     
        DerLig_F2 = [B10000].End(xlUp).Row
        For i = DerLig_F2 To 2 Step -1
            ROL = 0
            ORD = 0
            FE = 0
            L = i
            For j = L To 1 Step -1
                Select Case Left(Cells(L, "C"), 1)
                    Case Is = "R"
                        ROL = ROL + Right(Cells(L, "C"), 6) * 1
                    Case Is = "O"
                        ORD = ORD + Right(Cells(L, "C"), 6) * 1
                    Case Is = "F"
                        FE = FE + Right(Cells(L, "C"), 6) * 1
                    End Select
                    If Cells(L, "A") <> "" Then Exit For
                    L = L - 1
            Next j
            If i <> DerLig_F2 Then Rows(i + 2 & ":" & i + 4).Insert Shift:=xlDown
            If i = DerLig_F2 Then
                Cells(i + 1, "B") = "ROL"
                Cells(i + 1, "C") = ROL
                Cells(i + 2, "B") = "ORD"
                Cells(i + 2, "C") = ORD
                Cells(i + 3, "B") = "FE"
                Cells(i + 3, "C") = FE
            Else
                Cells(i + 2, "B") = "ROL"
                Cells(i + 2, "C") = ROL
                Cells(i + 3, "B") = "ORD"
                Cells(i + 3, "C") = ORD
                Cells(i + 4, "B") = "FE"
                Cells(i + 4, "C") = FE
            End If
            i = L - 1
        Next i
     
        For i = 1 To DerLig_F2
            If Cells(i, "A") <> "" Then
                Matr = Cells(i, "A")
                Rows(i).Insert Shift:=xlDown
                Cells(i, "B") = Matr
                With Cells(i, "B").Font
                    .Name = "Calibri"
                    .Size = 11
                    .ColorIndex = 3
                End With
                i = i + 1
            End If
        Next
        Range("A:A,D:D").Delete Shift:=xlToLeft
    End Sub
    Bien sûr remplacez "Vendredi" par "Venerdi"

    Cdlt

  4. #24
    Membre à l'essai
    Homme Profil pro
    impiegato
    Inscrit en
    Mai 2019
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : impiegato

    Informations forums :
    Inscription : Mai 2019
    Messages : 113
    Points : 22
    Points
    22
    Par défaut ttrasformation de
    Bonjour
    et possible d'insérer avant les initiales ROL ORD FE 99AAAMM
    (exemple 99201903 ROL 99201903 FE Ecc 99201903 ORD)
    et avant les heures H

    AVANT
    0120190329 O070000
    0120190330 R000000
    0120190331 R000000
    ROL 90000
    ORD 1330000
    FE 70000


    APRES
    0120190329 O070000
    0120190330 R000000
    0120190331 R000000
    99201903ROL H90000
    99201903ORD 1330000
    99201903FE H70000

  5. #25
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Voilà avec la modification demandée
    le fichier:
    Pièce jointe 485024

    le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    Option Compare Text
     
    Sub Copiare()
        Dim DerLig_F1 As Long, DerLig_F2 As Long, i As Long, j As Long, L As Long
        Dim ROL As Long, ORD As Long, FE As Long
        Dim f1 As Worksheet, f2 As Worksheet
        Dim Matr As String
     
        Application.ScreenUpdating = False
        Set f1 = Sheets("Foglio2")
        Set f2 = Sheets("Foglio3")
        f2.Cells.Clear
     
        DerLig_F1 = f1.[A10000].End(xlUp).Row
        f1.Range(Cells(1, "A"), Cells(DerLig_F1, "C")).Copy Destination:=f2.Cells(1, "A")
     
        Matr = Cells(1, "A")
        For i = 2 To DerLig_F1
            If f2.Cells(i, "A") = Matr Then
                f2.Cells(i, "A") = ""
            Else
                Matr = Cells(i, "A")
            End If
        Next
     
        f2.Select
        'Formule pour récupérer le jour
        Range("D1:D" & DerLig_F1).FormulaR1C1 = "=IF(RC[-1]<>"""",DATE(MID(RC[-2],3,4),MID(RC[-2],7,2),RIGHT(RC[-2],2))*1,"""")"
        Columns("D:D").NumberFormat = "[$-F800]dddd, mmmm dd, yyyy"
        Columns(2).NumberFormat = "@"
        For i = DerLig_F1 + 1 To 2 Step -1
            If Format(Cells(i - 1, "D"), "dddd") = "vendredi" Then
                If Cells(i, "B") <> "" Then Rows(i & ":" & i + 1).Insert Shift:=xlDown
                Cells(i, "D") = Cells(i - 1, "D") + 1
                Cells(i, "B") = Format("01" & Year(Cells(i, "D")) & Format(Month(Cells(i, "D")), "00") & Format(Day(Cells(i, "D")), "@"), "@")
                Cells(i + 1, "D") = (Cells(i, "D") + 1) * 1
                Cells(i + 1, "B") = Format("01" & Year(Cells(i + 1, "D")) & Format(Month(Cells(i + 1, "D")), "00") & Format(Day(Cells(i + 1, "D")), "00"), "@")
                Range(Cells(i, "C"), Cells(i + 1, "C")) = "R000000"
                With Range(Cells(i, "B"), Cells(i + 1, "C")).Font
                    .Name = "Calibri"
                    .Size = 11
                    .ColorIndex = 1
                End With
            End If
        Next i
     
        DerLig_F2 = [B10000].End(xlUp).Row
        For i = DerLig_F2 To 2 Step -1
            ROL = 0
            ORD = 0
            FE = 0
            L = i
            For j = L To 1 Step -1
                Select Case Left(Cells(L, "C"), 1)
                    Case Is = "R"
                        ROL = ROL + Right(Cells(L, "C"), 6) * 1
                    Case Is = "O"
                        ORD = ORD + Right(Cells(L, "C"), 6) * 1
                    Case Is = "F"
                        FE = FE + Right(Cells(L, "C"), 6) * 1
                    End Select
                    If Cells(L, "A") <> "" Then Exit For
                    L = L - 1
            Next j
            If i <> DerLig_F2 Then Rows(i + 2 & ":" & i + 4).Insert Shift:=xlDown
            If i = DerLig_F2 Then
                Cells(i + 1, "B") = "99" & Mid(Cells(i, "B"), 3, 6) & "ROL"
                Cells(i + 1, "C") = "H" & ROL
                Cells(i + 2, "B") = "99" & Mid(Cells(i, "B"), 3, 6) & "ORD"
                Cells(i + 2, "C") = "H" & ORD
                Cells(i + 3, "B") = "99" & Mid(Cells(i, "B"), 3, 6) & "FE"
                Cells(i + 3, "C") = "H" & FE
            Else
                Cells(i + 2, "B") = "99" & Mid(Cells(i, "B"), 3, 6) & "ROL"
                Cells(i + 2, "C") = "H" & ROL
                Cells(i + 3, "B") = "99" & Mid(Cells(i, "B"), 3, 6) & "ORD"
                Cells(i + 3, "C") = "H" & ORD
                Cells(i + 4, "B") = "99" & Mid(Cells(i, "B"), 3, 6) & "FE"
                Cells(i + 4, "C") = "H" & FE
            End If
            i = L - 1
        Next i
     
        For i = 1 To DerLig_F2
            If Cells(i, "A") <> "" Then
                Matr = Cells(i, "A")
                Rows(i).Insert Shift:=xlDown
                Cells(i, "B") = Matr
                With Cells(i, "B").Font
                    .Name = "Calibri"
                    .Size = 11
                    .ColorIndex = 3
                End With
                i = i + 1
            End If
        Next
        Range("A:A,D:D").Delete Shift:=xlToLeft
    End Sub
    Cdlt

  6. #26
    Membre à l'essai
    Homme Profil pro
    impiegato
    Inscrit en
    Mai 2019
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : impiegato

    Informations forums :
    Inscription : Mai 2019
    Messages : 113
    Points : 22
    Points
    22
    Par défaut
    Merc...i Arturo

  7. #27
    Membre à l'essai
    Homme Profil pro
    impiegato
    Inscrit en
    Mai 2019
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : impiegato

    Informations forums :
    Inscription : Mai 2019
    Messages : 113
    Points : 22
    Points
    22
    Par défaut
    Bonsoir Arturo
    Dans le bureau où je travaille, ils m'ont demandé de transformer la feuille de fichier Excel 3
    en un fichier txt auquel je joins le fichier. Le fichier doit être formaté pour que vous puissiez voir
    si d'autres informations sont nécessaires, demandez-moi ce qu'il est possible de faire.
    Fichiers attachés Fichiers attachés

  8. #28
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Je n'ai pas tout repris, simplement rajouté un bout de code à la fin du code existant pour faire ce que vous demandez.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        'Formules pour retravailler le résultat obtenu précédemment
        Range("D1:D" & DerLig_F2).FormulaR1C1 = "=IF(RC2="""",RC1,IF(OR(RIGHT(RC1,2)={""RL"";""FE""}),LEFT(RC1,LEN(RC1)-2),IF(RIGHT(RC1,3)=""ORD"",LEFT(RC1,LEN(RC1)-3),RC1)))"
        Range("E1:E" & DerLig_F2).FormulaR1C1 = "=IF(OR(LEFT(RC2,2)={""FE"";""RL""}),LEFT(RC2,2),IF(OR(RIGHT(RC1,2)={""RL"";""FE""}),RIGHT(RC1,2),IF(RIGHT(RC1,3)=""ORD"",""ORD"","""")))"
        Range("F1:F" & DerLig_F2).FormulaR1C1 = "=IF(RC2="""","""",IF(OR(LEFT(RC2,2)={""FE"";""RL""}),RIGHT(RC2,LEN(RC2)-2),RC2))"
        Columns("D:F").NumberFormat = "@"
        Range("D1:F" & DerLig_F2).Value = Range("D1:F" & DerLig_F2).Value
     
        'Suppression des 3 premières colonnes
        Columns("A:C").Delete Shift:=xlToLeft
    il ne vous reste plus qu'à faire une copie du résultat obtenu et l'enregistrer au format TXT qui vous convient.

    le fichier:
    Pièce jointe 495960

    Cdlt

  9. #29
    Membre à l'essai
    Homme Profil pro
    impiegato
    Inscrit en
    Mai 2019
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : impiegato

    Informations forums :
    Inscription : Mai 2019
    Messages : 113
    Points : 22
    Points
    22
    Par défaut
    Bonsoir ARTURO, si je copie le fichier xls, il n’est pas formaté car le fichier FOGPRE.TXT devrait être

    les lettres FE MAL RL(il peut y avoir d'autres abréviations)
    doivent figurer dans la colonne 23, les heures respectives 07000 02000 dans la colonne 33, les autres heures, le cheinizone avec R et O dans la colonne 33; colonne 30
    Ce fichier doit être fait tous les mois

    Je ne sais pas si j'ai réussi à m'expliquer

  10. #30
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    si je copie le fichier xls, il n’est pas formaté car le fichier FOGPRE.TXT devrait être devrait-être QUOI?
    les lettres FE MAL RL(il peut y avoir d'autres abréviations) Combien y en a t-il? Quelles sont -elles?
    les autres heures, le cheinizone avec R et O dans la colonne 33; colonne 30 pas compris

    Pourquoi parlez-vous maintenant de ces colonnes 23, 30, 33?

    Si vous changez les règles sans arrêt, redéposez 2 fichiers en exemple (avant et après traitement), avec toutes les conditions possibles (lettres et emplacements réels dans les colonnes).

    Cdlt

  11. #31
    Membre à l'essai
    Homme Profil pro
    impiegato
    Inscrit en
    Mai 2019
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : impiegato

    Informations forums :
    Inscription : Mai 2019
    Messages : 113
    Points : 22
    Points
    22
    Par défaut
    Bonjour


    Le fichier txt de fogpre doit être formaté de cette façon, je vous donne l'exemple du premier numéro de série (00FIA 000001)



    La distance ou les espaces entre les dates et les abréviations (FE RL MAL, etc.) est égale à 21 et entre les abréviations et l’horaire (070000) 8

    0120190301----------->FE-------->070000



    La distance ou les espaces entre les dates et les abréviations commençant par R ou O 32

    0120190315----------------------->O070000
    0120190316----------------------->R000000


    La distance ou les espaces entre les dates(99201903) et les abréviations 21 et entre les abréviations et le total des heures(h009000000) 8

    99201903---------------->RL------->H009000000
    99201903---------------->ORD----->H133000000
    99201903---------------->FE------->H007000000
    99201903---------------->MAL----->H007000000

  12. #32
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Avec les modifications
    le fichier
    Pièce jointe 497060

    Le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    Option Compare Text
    
    Sub Copiare()
        Dim DerLig_F1 As Long, DerLig_F2 As Long, i As Long, j As Long, L As Long
        Dim ROL As Long, ORD As Long, FE As Long
        Dim f1 As Worksheet, f2 As Worksheet
        Dim Matr As String
        
        Application.ScreenUpdating = False
        Set f1 = Sheets("Foglio2")
        Set f2 = Sheets("Foglio3")
        f2.Cells.Clear
        
        DerLig_F1 = f1.[A10000].End(xlUp).Row
        f1.Range(Cells(1, "A"), Cells(DerLig_F1, "C")).Copy Destination:=f2.Cells(1, "A")
        
        Matr = Cells(1, "A")
        For i = 2 To DerLig_F1
            If f2.Cells(i, "A") = Matr Then
                f2.Cells(i, "A") = ""
            Else
                Matr = Cells(i, "A")
            End If
        Next
        
        f2.Select
        'Formule pour récupérer le jour
        Range("D1:D" & DerLig_F1).FormulaR1C1 = "=IF(RC[-1]<>"""",DATE(MID(RC[-2],3,4),MID(RC[-2],7,2),RIGHT(RC[-2],2))*1,"""")"
        Columns("D:D").NumberFormat = "[$-F800]dddd, mmmm dd, yyyy"
        Columns(2).NumberFormat = "@"
        For i = DerLig_F1 + 1 To 2 Step -1
            If Format(Cells(i - 1, "D"), "dddd") = "vendredi" Then
                If Cells(i, "B") <> "" Then Rows(i & ":" & i + 1).Insert Shift:=xlDown
                Cells(i, "D") = Cells(i - 1, "D") + 1
                Cells(i, "B") = Format("01" & Year(Cells(i, "D")) & Format(Month(Cells(i, "D")), "00") & Format(Day(Cells(i, "D")), "@"), "@")
                Cells(i + 1, "D") = (Cells(i, "D") + 1) * 1
                Cells(i + 1, "B") = Format("01" & Year(Cells(i + 1, "D")) & Format(Month(Cells(i + 1, "D")), "00") & Format(Day(Cells(i + 1, "D")), "00"), "@")
                Range(Cells(i, "C"), Cells(i + 1, "C")) = "R000000"
                With Range(Cells(i, "B"), Cells(i + 1, "C")).Font
                    .Name = "Calibri"
                    .Size = 11
                    .ColorIndex = 1
                End With
            End If
        Next i
        
        DerLig_F2 = [B10000].End(xlUp).Row
        For i = DerLig_F2 To 2 Step -1
            ROL = 0
            ORD = 0
            MAL = 0
            FE = 0
            L = i
            For j = L To 1 Step -1
                Select Case Left(Cells(L, "C"), 1)
                    Case Is = "R"
                        ROL = ROL + Right(Cells(L, "C"), 6) * 1
                    Case Is = "O"
                        ORD = ORD + Right(Cells(L, "C"), 6) * 1
                    Case Is = "M"
                        MAL = MAL + Right(Cells(L, "C"), 6) * 1
                    Case Is = "F"
                        FE = FE + Right(Cells(L, "C"), 6) * 1
                    End Select
                    If Cells(L, "A") <> "" Then Exit For
                    L = L - 1
            Next j
            If i <> DerLig_F2 Then Rows(i + 2 & ":" & i + 5).Insert Shift:=xlDown
            If i = DerLig_F2 Then
                Cells(i + 1, "B") = "99" & Mid(Cells(i, "B"), 3, 6) & "ROL"
                Cells(i + 1, "C") = "H" & ROL
                Cells(i + 2, "B") = "99" & Mid(Cells(i, "B"), 3, 6) & "ORD"
                Cells(i + 2, "C") = "H" & ORD
                Cells(i + 3, "B") = "99" & Mid(Cells(i, "B"), 3, 6) & "MAL"
                Cells(i + 3, "C") = "H" & MAL
                Cells(i + 4, "B") = "99" & Mid(Cells(i, "B"), 3, 6) & "FE"
                Cells(i + 4, "C") = "H" & FE
            Else
                Cells(i + 2, "B") = "99" & Mid(Cells(i, "B"), 3, 6) & "ROL"
                Cells(i + 2, "C") = "H" & ROL
                Cells(i + 3, "B") = "99" & Mid(Cells(i, "B"), 3, 6) & "ORD"
                Cells(i + 3, "C") = "H" & ORD
                Cells(i + 4, "B") = "99" & Mid(Cells(i, "B"), 3, 6) & "MAL"
                Cells(i + 4, "C") = "H" & MAL
                Cells(i + 5, "B") = "99" & Mid(Cells(i, "B"), 3, 6) & "FE"
                Cells(i + 5, "C") = "H" & FE
            End If
            i = L - 1
        Next i
    
        DerLig_F2 = [B10000].End(xlUp).Row
        For i = 1 To DerLig_F2
            If Cells(i, "A") <> "" Then
                Matr = Cells(i, "A")
                Rows(i).Insert Shift:=xlDown
                Cells(i, "B") = Matr
                With Cells(i, "B").Font
                    .Name = "Calibri"
                    .Size = 11
                    .ColorIndex = 3
                End With
                i = i + 1
            End If
        Next
        Range("A:A,D:D").Delete Shift:=xlToLeft
        
        'nombre d'espaces devant l'abréviation
        NbAv = 21
        'Nombre d'espaces derrière l'abréviation
        NbAp = 8
        'Nombre d'espaces entre les dates et les abréviations commençant par R ou O
        Nbda = 32
        
        'Formules pour retravailler le résultat obtenu précédemment
        DerLig_F2 = [B10000].End(xlUp).Row
        Range("D1:D" & DerLig_F2).FormulaR1C1 = "=IF(RC2="""",RC1,IF(OR(RIGHT(RC1,2)={""RL"";""FE""}),LEFT(RC1,LEN(RC1)-2),IF(OR(RIGHT(RC1,3)={""ORD"";""MAL"";""ROL""}),LEFT(RC1,LEN(RC1)-3),RC1)))"
        Range("E1:E" & DerLig_F2).FormulaR1C1 = "=IF(OR(LEFT(RC2,2)={""FE"";""RL""}),REPT("" ""," & NbAv & "-LEN(RC[-1])-1)&LEFT(RC2,2)&REPT("" ""," & NbAp - 2 & ")," & Chr(10) & "IF(AND(LEFT(RC[-1],2)=""99"",OR(RIGHT(RC1,2)={""RL"";""FE""})),REPT("" ""," & NbAv & "-LEN(RC[-1])-1)&RIGHT(RC1,2)&REPT("" ""," & NbAp - 3 & ")," & Chr(10) & "IF(OR(RIGHT(RC1,3)={""ORD"";""MAL"";""ROL""}),REPT("" ""," & NbAv & "-LEN(RC[-1])-1)&RIGHT(RC1,3)&REPT("" "",5),REPT("" ""," & Nbda & "-LEN(RC[-1])))))"
        Range("F1:F" & DerLig_F2).FormulaR1C1 = "=IF(RC2="""","""",IF(OR(LEFT(RC2,2)={""FE"";""RL""}),RIGHT(RC2,LEN(RC2)-2),RC2))"
        Columns("D:F").NumberFormat = "@"
        Range("D1:F" & DerLig_F2).Value = Range("D1:F" & DerLig_F2).Value
        
        'Suppression des 3 premières colonnes
        Columns("A:C").Delete Shift:=xlToLeft
    End Sub
    Vous pouvez agir sur le nombre d'espaces en modifiant les valeurs dans la zone rouge dans le code ci-dessus

    Cdlt

  13. #33
    Membre à l'essai
    Homme Profil pro
    impiegato
    Inscrit en
    Mai 2019
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : impiegato

    Informations forums :
    Inscription : Mai 2019
    Messages : 113
    Points : 22
    Points
    22
    Par défaut
    Bonsoir Artur
    J'ai essayé mais je n'arrive pas à obtenir tout le formatage. Les seuls que j'ai réussi à obtenir sont ceux où il y a la date (0120190301 et les initiales FE ou RL



    dans le fichier txt, les heures commençant par O ou R passent à la colonne 35(au lieu de 32)
    0120190315 O070000
    0120190316 R070000


    les abréviations doivent commencer à la colonne 21 et les heures à la colonne 30

    99201903 ROL H6500000
    99201903 ORD H1260000
    Fichiers attachés Fichiers attachés

  14. #34
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    dans le fichier txt, les heures commençant par O ou R passent à la colonne 35(au lieu de 32)
    0120190315 O070000
    0120190316 R070000


    Pourtant je mets les bonnes valeurs, c'est probablement lors du passage en txt qu'il doit y avoir un décalage. Si au lieu d'avoir 32 vous obtenez 35, eh bien à la ligne " Nbda = 32", remplacez la valeur 32 par 29.

    Pour le reste
    les abréviations doivent commencer à la colonne 21 et les heures à la colonne 30
    99201903 ROL H6500000
    99201903 ORD H1260000
    Si le décalage n'est pas bon, appliquez le même principe sur les valeurs dans le code, à cet emplacement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        'nombre d'espaces devant l'abréviation
        NbAv = 21
        'Nombre d'espaces derrière l'abréviation
        NbAp = 8
        'Nombre d'espaces entre les dates et les abréviations commençant par R ou O
        Nbda = 32
    Si ça ne marche pas, donnez-moi les valeurs que vous obtenez.

    Cdlt

  15. #35
    Membre à l'essai
    Homme Profil pro
    impiegato
    Inscrit en
    Mai 2019
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : impiegato

    Informations forums :
    Inscription : Mai 2019
    Messages : 113
    Points : 22
    Points
    22
    Par défaut
    Bonjour Arturo
    a joint le fichier txt que je reçois en sauvegardant la feuille xls au format text et je joins le fichier txt FOGPRE que je voudrais obtenir, car vous pouvez voir que les formats sont différents
    Je ne comprends pas où est le problème
    Fichiers attachés Fichiers attachés

  16. #36
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Comment voulez-vous que je vous aide, les 2 fichiers textes comportent des données différentes, et je ne peux pas comparer avec le fichier excel d'origine.
    Envoyez-moi 3 fichiers qui traitent la même période
    1)-le fichier Excel avant transformation. le fichier doit être suffisamment complet et doit contenir les références ROL, ORD, MAL RL et FE (si cela n'existe pas, fabriquez en un avec tous les cas de figures possibles)
    2)-le fichier texte que vous obtenez après transformation
    3)-le fichier texte que vous souhaiteriez obtenir


    Cdlt

  17. #37
    Membre à l'essai
    Homme Profil pro
    impiegato
    Inscrit en
    Mai 2019
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : impiegato

    Informations forums :
    Inscription : Mai 2019
    Messages : 113
    Points : 22
    Points
    22
    Par défaut
    Bonsoir
    J'attache le fichier excel contenant 3 feuilles:

    feuille LAV où se trouvent les données d'origine

    feuille3 où sont les données traitées manuellement (colonne concaténée A et B Example IFABER 55 = 00IFABER 00000055, Colonne C Je transforme les dates 03/06/2019 = 0120190601
    puis concaténer les colonnes E F Example O 8 =O080000; ST 1 =ST010000;MA7 8 =MA7080000

    feuille txt où des données ont été créées avec la macro,

    puis j'attache le fichier txt que je devrais obtenir
    Fichiers attachés Fichiers attachés

  18. #38
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Décidément il y a quelque chose qui ne tourne pas rond dans cette affaire.
    Je passe mon temps à reprendre ce que j'ai fait pour coller au résultat que vous envoyez au format texte.

    il y a des nouveautés inexpliquées, exemples:
    -A chaque changement de "AZ" , vous créez en colonne C de la "feuille 3" la valeur "FES080000", qui disparaît du fichier texte(on ne sait pas pourquoi), j'ai donc supprimé cette valeur.

    -Dans les demandes précédentes, il était demandé de faire le total des valeurs marquées "Rxxxxxx" et d'afficher ce total sous la forme "ROLxxxxxx", or maintenant je constate que ces "Rxxxxx" sont ignorés et que seuls les valeurs marquées "RLxxxxx" sont comptabilisées. Que faut-il comprendre?

    -Exception à la constatation précédente: Dans le fichier texte, pour le "AZ 55", il n'y a qu'un seul RL à 80000, avec un sous-total de 160000(voir réclamation suivante concernant les sous-totaux), alors que dans la "feuille 3" il y a la présence d'un "R080000", donc j'en conclus que cette valeur a été comptabilisée, mais pas retranscrite dans le fichier texte, alors que dans les autres cas les "R080000" ne sont pas comptés (allez comprendre).

    -Pourquoi les sous-totaux affichent des valeurs 100 fois plus élevées? Chez moi: 80000*20 = 1600000 et pas 160000000

    -Dans le fichier texte, à "AZ 134", il apparaît des "012019608", "012019609" qui n'existent pas dans la feuille3, d'ou sortent ces valeurs?

    Enfin, plus j'essaie de comprendre et moins je comprends. Devant un tel manque de rigueur je ne peux pas continuer dans ces conditions, désolé.

    Je vous livre quand même le fichier avec les dernières modifications, mais par manque de précisions et de clarté je suis obligé de m'arrêter là.
    Pièce jointe 499095

    Cdlt

  19. #39
    Membre à l'essai
    Homme Profil pro
    impiegato
    Inscrit en
    Mai 2019
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : impiegato

    Informations forums :
    Inscription : Mai 2019
    Messages : 113
    Points : 22
    Points
    22
    Par défaut
    Bonjour Arturo J'explique que j'étais inexact

    fichier xlsm (dans cet exemple et le mois de juin) il y a 3 feuilles

    ORIGINALE
    où sont les données que je reçois

    LAV
    Les donnes que je travaille manuellement

    colonnes concaténées A et B pour qu’elles deviennent 00IFABER 00000055
    colonnes concaténées E et F pour ,la colonne E sont les abréviations et la colonne F sont les heures O 8 = O080000 ;ST 1 = ST010000; RL 8 = RL080000
    la date doit devenir année mois et jour précédés de 0 et 1 0120190603

    txt
    dans la fiche txt se trouvent les données prêtes à être transformées en fichier txt qui doit s’appeler FOGPRE
    00IFABER 00000055 =société + numéro de série dépendant
    0120190601 = date
    R000000 = les jours de repos coïncident avec les samedis et les dimanches
    O080000 = heures de travail
    ST010000 ; RL080000 =heures d'absence

    à la fin il y a le résumé des heures précédé par da 99201906RL = 99 + AAAAMM + initiales absentes

    H008000000
    H011000000
    H160000000
    les heures doivent être précédées de H et 2 zéros si les heures ne dépassent pas le dixième, un zéro à partir du dixième et sans zéro à partir de cent

    à partir de cette feuille, je dois générer le fichier txt FOGPRE avec le formatage que je vous ai dit dans le post précédent
    Fichiers attachés Fichiers attachés

  20. #40
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Je n'ai repris que la partie concernant la conversion en fichier texte.

    Tout d'abord j'ai fait une copie de la feuille "Txt" que j'ai renommée "Copie txt", ceci afin de pouvoir recommencer autant de fois que nécessaire(il suffit de recopier le contenu de "Copie txt" dans "Txt").

    En cliquant sur le bouton "Copiare ---> TXT", cela reconditionne le contenu de la feuille "Txt" et l'enregistre la sous "FOGPRE.txt",
    remplacez "votre chemin" par l'emplacement où doit aller le fichier FOGPRE.txt".

    le code (dans modulo4)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Option Compare Text
    
    Sub Copiare_Txt()
        Dim DerLig_F1 As Long
        Dim f1 As Worksheet
        
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
        Set f1 = Sheets("Txt")
        
        'nombre d'espaces devant l'abréviation
        NbAv = 22
        'Nombre d'espaces derrière l'abréviation
        NbAp = 8
        'Nombre d'espaces entre les dates et les abréviations commençant par R ou O
        Nbda = 32
        
        'Formules pour retravailler le résultat obtenu précédemment
        DerLig_F1 = f1.[B10000].End(xlUp).Row
        f1.Range("D1:D" & DerLig_F1).FormulaR1C1 = "=IF(RC2="""",RC1,IF(OR(RIGHT(RC1,2)={""RL"";""FE""}),LEFT(RC1,LEN(RC1)-2),IF(OR(RIGHT(RC1,3)={""ORD"";""MAL"";""ROL""}),LEFT(RC1,LEN(RC1)-3),RC1)))"
        f1.Range("E1:E" & DerLig_F1).FormulaR1C1 = "=IF(OR(LEFT(RC2,2)={""FE"";""RL""}),REPT("" ""," & NbAv & "-LEN(RC[-1])-1)&LEFT(RC2,2)&REPT("" ""," & NbAp - 2 & ")," & Chr(10) & "IF(AND(LEFT(RC[-1],2)=""99"",OR(RIGHT(RC1,2)={""RL"";""FE""})),REPT("" ""," & NbAv & "-LEN(RC[-1])-1)&RIGHT(RC1,2)&REPT("" ""," & NbAp - 3 & ")," & Chr(10) & "IF(OR(RIGHT(RC1,3)={""ORD"";""MAL"";""ROL""}),REPT("" ""," & NbAv & "-LEN(RC[-1])-1)&RIGHT(RC1,3)&REPT("" "",5),REPT("" ""," & Nbda & "-LEN(RC[-1])))))"
        f1.Range("F1:F" & DerLig_F1).FormulaR1C1 = "=IF(RC2="""","""",IF(OR(LEFT(RC2,2)={""FE"";""RL""}),RIGHT(RC2,LEN(RC2)-2),RC2))"
        f1.Columns("D:F").NumberFormat = "@"
        f1.Range("G1:G" & DerLig_F1).FormulaR1C1 = "=RC[-3]&RC[-2]&RC[-1]"
        f1.Range("D1:G" & DerLig_F1).Value = Range("D1:G" & DerLig_F1).Value
        
        'Suppression des 6 premières colonnes
        f1.Columns("A:F").Delete Shift:=xlToLeft
        Chemin = "C:\votre chemin\"
        NomFichier = "FOGPRE"
        ActiveSheet.Copy
        ActiveWorkbook.SaveAs Filename:=Chemin & NomFichier & ".txt", FileFormat:=xlText, CreateBackup:=False
    End Sub
    le fichier
    Pièce jointe 500908

    Cdlt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/05/2011, 16h41
  2. [2005] Transformation de colonne dérivée
    Par pticouta dans le forum SSIS
    Réponses: 7
    Dernier message: 27/04/2011, 11h10
  3. Réponses: 6
    Dernier message: 11/10/2009, 10h57
  4. Transformer des colonnes en lignes
    Par marman dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/11/2006, 17h43
  5. transformer des colonnes en lignes
    Par flonardi dans le forum Oracle
    Réponses: 13
    Dernier message: 28/10/2004, 12h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo