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
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