Copie de ligne de budget dans sheets
Bonjour à tous,
Petite nouvelle mais je suis beaucoup de sujets sur le forum !
Je ne connais pas les macros mais il semble qu'aujourd'hui j'ai grand besoin d'aide !
J'ai besoin d'automatiser au maximum le budget de mon association.
Je tiens un relevé des opérations du compte bancaire, que je catégorise selon les comptes (en colonne M)
Je voudrais que lorsque par exemple, j'ai le compte 60611 en colonne M, toute ma ligne se copie automatiquement dans un onglet dédié à ce compte, sans espaces entre les lignes. Je cale complètement !
HELP !!
Fichier en PJ et merci de votre aide !
Bonjour,
Le problème de vouloir avoir 12000 onglets c'est que le nombre de formule va être démultiplié et que la taille de votre fichier
va finir par ralentir votre saisie.
Pourquoi ne pas utiliser L'option tableau croisé dynamique sur un seul onglet pour le traitement par imputation ?
Ci-joint exemple ; il suffit de changer le numéro de compte pour que le tableau s'actualise.
Bonsoir MarieJ,
Je propose la solution en P.J.
- J'ai renommé l'EXCEL en .xlsm pour pouvoir inclure de macro
- Dans le volet 1, j'ai ajouté un bouton pour le lancement de la ventilation dans les autres onglets
- J'ai ajouté la macro :
Option Explicit
Sub VentilationPL()
Const cFirstRow = 6 'Première ligne de recopie
Const cColCompte = 13 'index de la colonne 'M'
Const cColDepense = 8 'index de la colonne 'H'
Const cColRecette = 6 'index de la colonne 'F'
Dim oSheet As Worksheet, oSheetPrincipal As Worksheet
Dim oRange As Range
Dim lLastRow As Long, lLastCol As Long, lrow As Long
Dim sCompte As String
Set oSheetPrincipal = ThisWorkbook.Worksheets(1)
For Each oSheet In ThisWorkbook.Worksheets
If Left(oSheet.Name, 1) = "6" Or Left(oSheet.Name, 1) = "7" Then
'On efface les données s'il y en a
lLastRow = oSheet.UsedRange.Rows.Count
lLastCol = oSheet.UsedRange.Columns.Count
Set oRange = oSheet.Range(oSheet.Cells(cFirstRow, 1), oSheet.Cells(lLastRow, lLastCol))
oRange.EntireRow.Delete
'On recopie les lignes se référant à l'onglet
sCompte = oSheet.Name
lrow = cFirstRow - 1
For Each oRange In oSheetPrincipal.UsedRange.Rows
If oRange.Cells(1, cColCompte) = sCompte Then
lrow = lrow + 1
oRange.Copy oSheet.Cells(lrow, 1)
If WorksheetFunction.IsFormula(oRange.Cells(1, cColRecette)) Then
oRange.Cells(1, cColRecette).Copy
oSheet.Cells(lrow, cColRecette).PasteSpecial xlPasteValues
End If
If WorksheetFunction.IsFormula(oRange.Cells(1, cColDepense)) Then
oRange.Cells(1, cColDepense).Copy
oSheet.Cells(lrow, cColDepense).PasteSpecial xlPasteValues
End If
End If
Next
End If
Next
MsgBox "Ventilation des écritures sur comptes de Charges-Produits terminée!"
End SubBon courage,
Gérard
Bonjour Gerard,
milles mercis, je crois que je vais vraiment faire une formation, c.est tellement utile !!!
plein de belles choses pour cette nouvelle année !
Marie