Macro VBA

Bonjour,

Je vous sollicite car je souhaiterai pouvoir créer une macro qui me permettrait de pouvoir réunir en un seul fichier excel plusieurs données me permettant de pouvoir importer plus rapidement des données dans mon logiciel de paie.

J'ai tout d'abord un fichier excel de variables associées à des matricules (pour un matricule il peut y avoir plusieurs variables )

Les variables sont associés à des codes éléments par exemple : prime caisse = CL02

J'aimerai obtenir un tableau qui me donnerai donc :

matricule code importation code élément montant

77777 255 CL02 50€

77777 255 CL03 20€

le code d'importatation doit rester le même pour tous les matricules

je vous joins un fichier excel pour mieux comprendre.

Help please

23test.xlsx (35.68 Ko)

bonjour,

solution via une macro

Sub aargh()
' lire la feuille primes et mettre les primes au bon format dans la feuille sortie
    On Error Resume Next 'on supprime la feuille sortie si elle existe
    Sheets("sortie").Delete
    On Error GoTo 0
    Set ws = Sheets.Add
    ws.Name = "sortie"
    With Sheets("primes")
        i = 5    ' pointeur de ligne sur primes
        k = 0    ' pointeur de ligne sur ws
        While .Cells(i, 1) <> ""    ' tant qu'il y a des matricules
            For j = 5 To 6    ' colonne E et F
                If .Cells(i, j) <> 0 Then
                    k = k + 1 'incrémente pointeur de ligne de ws
                    ws.Cells(k, 1) = .Cells(i, 1) & " 255 " & .Cells(4, j) & " " & .Cells(i, j)
                End If
            Next j
            i = i + 1 ' incrémente pointeur de ligne sur primes
        Wend
    End With
End Sub

bonjour,

Merci pour votre retour,

en revanche j'ai un message d'erreur qui apparait

"erreur d'exécution": 9

l'indice n'appartient pas à la sélection"

que faire ?


Ah ça fonctionne

Mais autre problème il me concentre le tout dans une seule colonne alors qu'il me faut 4 colonnes (une pour chaque donnée)

h2so4 a écrit :

bonjour,

solution via une macro

Sub aargh()
' lire la feuille primes et mettre les primes au bon format dans la feuille sortie
    On Error Resume Next 'on supprime la feuille sortie si elle existe
    Sheets("sortie").Delete
    On Error GoTo 0
    Set ws = Sheets.Add
    ws.Name = "sortie"
    With Sheets("primes")
        i = 5    ' pointeur de ligne sur primes
        k = 0    ' pointeur de ligne sur ws
        While .Cells(i, 1) <> ""    ' tant qu'il y a des matricules
            For j = 5 To 6    ' colonne E et F
                If .Cells(i, j) <> 0 Then
                    k = k + 1 'incrémente pointeur de ligne de ws
                    ws.Cells(k, 1) = .Cells(i, 1) & " 255 " & .Cells(4, j) & " " & .Cells(i, j)
                End If
            Next j
            i = i + 1 ' incrémente pointeur de ligne sur primes
        Wend
    End With
End Sub

Après avoir bidouillé un peu la macro, j'ai réussi à séparer les données dans 4 colonnes distinctes.

Sub aargh()

' lire la feuille primes et mettre les primes au bon format dans la feuille sortie

On Error Resume Next 'on supprime la feuille sortie si elle existe

Sheets("sortie").Delete

On Error GoTo 0

Set ws = Sheets.Add

ws.Name = "sortie"

With Sheets("primes")

i = 5 ' pointeur de ligne sur primes

k = 0 ' pointeur de ligne sur ws

While .Cells(i, 1) <> "" ' tant qu'il y a des matricules

For j = 5 To 8 ' colonne E et H

If .Cells(i, j) <> 0 Then

k = k + 1 'incrémente pointeur de ligne de ws

ws.Cells(k, 1) = .Cells(i, 1)

ws.Cells(k, 2) = " 255 "

ws.Cells(k, 3) = .Cells(4, j)

ws.Cells(k, 4) = .Cells(i, j)

End If

Next j

i = i + 1 ' incrémente pointeur de ligne sur primes

Wend

End With

End Sub

Je souhaiterai qu'apparaissent le nom des colonnes en ligne 1

Matricule pour la colonne 1

Code d'importation pour la colonne 2

Code élément pour la colonne 3

Valeur pour la colonne 4

Svp

bonjour,

résultat sur plusieurs colonnes

Sub aargh()
' lire la feuille primes et mettre les primes au bon format dans la feuille sortie
    On Error Resume Next    'on supprime la feuille sortie si elle existe
    Sheets("sortie").Delete
    On Error GoTo 0
    Set ws = Sheets.Add
    ws.Name = "sortie"
    'ligne entête
    ws.Cells(1, 1) = "matricule"
    ws.Cells(1, 2) = "code importation"
    ws.Cells(1, 3) = "code prime"
    ws.Cells(1, 4) = "prime"
    With Sheets("primes")    ' feuille source contenant les primes
        i = 5    ' pointeur de ligne sur primes
        k = 1    ' pointeur de ligne sur ws
        While .Cells(i, 1) <> ""    ' tant qu'il y a des matricules
            For j = 5 To 6    ' colonne E et F
                If .Cells(i, j) <> 0 Then
                    k = k + 1    'incrémente pointeur de ligne de ws
                    'on copie les données dans différentes colonnes
                    ws.Cells(k, 1) = .Cells(i, 1)    ' matricule
                    ws.Cells(k, 2) = 255    ' code importation
                    ws.Cells(k, 3) = .Cells(4, j)    ' code prime
                    ws.Cells(k, 4) = .Cells(i, j)    'prime
                End If
            Next j
            i = i + 1    ' incrémente pointeur de ligne sur primes
        Wend
    End With
End Sub
h2so4 a écrit :

bonjour,

résultat sur plusieurs colonnes

Sub aargh()
' lire la feuille primes et mettre les primes au bon format dans la feuille sortie
    On Error Resume Next    'on supprime la feuille sortie si elle existe
    Sheets("sortie").Delete
    On Error GoTo 0
    Set ws = Sheets.Add
    ws.Name = "sortie"
    'ligne entête
    ws.Cells(1, 1) = "matricule"
    ws.Cells(1, 2) = "code importation"
    ws.Cells(1, 3) = "code prime"
    ws.Cells(1, 4) = "prime"
    With Sheets("primes")    ' feuille source contenant les primes
        i = 5    ' pointeur de ligne sur primes
        k = 1    ' pointeur de ligne sur ws
        While .Cells(i, 1) <> ""    ' tant qu'il y a des matricules
            For j = 5 To 6    ' colonne E et F
                If .Cells(i, j) <> 0 Then
                    k = k + 1    'incrémente pointeur de ligne de ws
                    'on copie les données dans différentes colonnes
                    ws.Cells(k, 1) = .Cells(i, 1)    ' matricule
                    ws.Cells(k, 2) = 255    ' code importation
                    ws.Cells(k, 3) = .Cells(4, j)    ' code prime
                    ws.Cells(k, 4) = .Cells(i, j)    'prime
                End If
            Next j
            i = i + 1    ' incrémente pointeur de ligne sur primes
        Wend
    End With
End Sub

MERCiiiiiiiiiiiii beaucoup

Rechercher des sujets similaires à "macro vba"