En image c'est plus comprehensible
Bonjour les amis,
L'idée de ce module qui ne fonctionne pas comme je le souhaite, est qu'à partir de l'onglet "BD" il créer les fiches automatiquement et que surtour il réparti dans la colonne vacances colo les chiffres correspondant, ensuite dans la colonne alimentation exterieur, il recherche le n° de la pièce correspondant à la colonne vacances colo et qu'il le met bien dans la bonne ligne, et enfin pour la 3e colonne, il recherche aussi le n° de pièce correspondant à la colonne vacances colo et qu'il met le chiffre correspondant.
il y a peut être une simple adaptation à faire...
Il est impossible de le faire avec l'action copier coller.
Pouvez-vous m'aider svp ?
Voici la capture d'écran de ce que je souhaite avoir en automatique :
Voici le code existant qui ne fonctionne pas comme je le souhaite...
Sub ExtraireParGroupeColonneB()
Dim O As Long, NbLg As Long
Dim n As Integer
Dim H1 As Worksheet
Dim Mondico As Object
Dim Tablo
Dim Interdits
Dim ligne
Interdits = Array("&", ":", "/", "\", "~?", "~*", "[", "]", Chr(34))
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.DisplayAlerts = True
Set H1 = Sheets("BD")
If H1.FilterMode = True Then H1.ShowAllData
NbLg = H1.Range("A" & Rows.Count).End(xlUp).Row
rep = InputBox("Choisir la lettre de la colonne pour la création de fiches", "CREATION DE FICHES PAR GROUPES", "B")
H1.Columns(rep).Copy H1.Columns("O")
With H1.Range("O2:O" & NbLg)
For n = 0 To UBound(Interdits)
.Replace what:=Interdits(n), replacement:="_", lookat:=xlPart
Next n
End With
Set Mondico = CreateObject("Scripting.dictionary")
For O = 2 To NbLg
Mondico(H1.Range("O" & O).Value) = ""
Next O
H1.Range("O1:P1") = "XYZ"
Tablo = Mondico.keys
For n = 0 To UBound(Tablo)
Sheets.Add(after:=Sheets(Sheets.Count)).Name = Tablo(n)
Sheets("Modèle").UsedRange.Copy
Sheets(Tablo(n)).Range("A1").PasteSpecial
With Sheets(Tablo(n))
.Range("A2") = Tablo(n)
H1.Range("P2") = Tablo(n)
For Each cel In H1.Range("G2:G" & NbLg) 'pour chaque cellule de G2 à G_DernièreLigne
r = cel.Row
noms = H1.Range("C" & r)
If H1.Range(rep & r) = Tablo(n) Then
c = .Range("A1000").End(xlUp).Row + 1
If .Range("A9") = "" Then
H1.Range("C" & r & ":H" & r).Copy 'Copie de C à H feuille BD
.Range("A" & c).PasteSpecial xlPasteValues 'Colle depuis A feuille modèle
End If
If Not .Range("E9:E" & c).Find(cel) Is Nothing And Not .Range("A9:A" & c).Find(noms) Is Nothing Then
'Si le numero de pièce existe déjà dans la feuille modèle alors...
Set ligne = .Range("E9:E" & c).Find(cel) 'on trouve la ligne correspondante
If Not ligne Is Nothing And .Range("A" & ligne.Row) <> noms Then
Flig = ligne.Row
Do
cel.Value = cel
Set ligne = .Range("E9:E" & c).FindNext(.Range("E" & Flig))
ligne = ligne.Row
Loop While ligne = Flig And .Range("A" & ligne) <> noms
Else
ligne = ligne.Row
End If
remp:
'On prend chaque cas de compte et on vient mettre le débit et crédit dans les colonnes correspondantes
If H1.Range("A" & r) = "VACANCES - COLOS" Then .Range("G" & ligne) = .Range("G" & ligne) + H1.Range("I" & r): .Range("H" & ligne) = .Range("H" & ligne) + H1.Range("J" & r)
If H1.Range("A" & r) = "ALIMENTATION A L'EXTERIEUR." Then .Range("I" & ligne) = .Range("I" & ligne) + H1.Range("I" & r): .Range("J" & ligne) = .Range("J" & ligne) + H1.Range("J" & r)
If H1.Range("A" & r) = "AUTRES REMB.FRAIS GR 1" Then .Range("N" & ligne) = .Range("N" & ligne) + H1.Range("J" & r): .Range("M" & ligne) = .Range("M" & ligne) + H1.Range("I" & r)
Else
H1.Range("C" & r & ":H" & r).Copy
.Range("A" & c).PasteSpecial xlPasteValues
ligne = c
GoTo remp
End If
End If
Next cel
ActiveWindow.DisplayOutline = False
End With
'ICI AJUSTER LIGNES ET COLONNES
Call MiseEnPageFeuilleModeleColonnesEtLignes
Next n
H1.Columns("O:P").Clear
H1.Select
End Sub
Bonsoir,
Je me suis permis d'emprunter votre fichier du post précédent car difficile de faire du vba sans fichier...
Bref, voici une version à tester ci-joint, pas très dynamique, mais efficace.
@+
Merci Loriso et tu as bien fait de prendre le fichier du post précèdent.
Je viens de tester et malheureusement le résultat attendu n'est pas celui que j'attendais. Je vais être plus précis pour une meilleure compréhension.
Pour moi la créatoin de fiches c'est l'extraction de données depuis une base de donnée pour créer d'autres onglets bien précis.
exemple : Nous travaillons dans un centre éducatif pour enfants, dans notre établissement, il existe plusieurs lieu de vie, les enfants de 5 à 10 ans, les enfants de 11 à 15 ans et les enfants de 16 ans à 17 ans, il existe donc 3 groupes de vie. Ce que je souhaite avoir dans la création de fiches, c'est les dépenses de plusieurs comptes comptables répartient pour les 3 groupes de vie, donc 3 onglets, un onglet groupe de vie 1, un onglet groupe de vie 2 et un onglet groupe de vie 3.
Il y a effectivement un regroupement à faire, mais la complication est dans le regroupement des lignes comptables avec le point commun qui est le numéro de la pièce comptable, je m'expliques :
exemple d'écriture comptable : N° pièce comptable ACE10/015 - Groupe de vie : ARTISTES
Au débit : compte vacance pour 100 euros
compte alimentation pour 30 euros
Au crédit : compte fournisseur pour 90 euros
compte Rembt Caf pour 40 euros
J'aurai donc dans l'onglet ARTISTES :
Bonjour,
Je n'avais pas compris la chose
Il est vrai que c'est plus simple de faire qu'une seule ligne par n° de pièce.
J'ai donc refais la code, et bonne nouvelle il est plus dynamique que l'ancien, (les noms des onglets s'adaptent à la BD, le code va "droit au but" et est donc plus rapide)
Fichier ci-joint,
A l'écoute de ton retour,
@+
Merci beaucoup Loris d'avoir pris le temps de travailler sur mon dossier, c'est cool.
Je viens de tester et visiblement ça fonctionne, mais je dois encore regarder en profondeur en vérifiant ligne par ligne si tout va bien, je vais dans un premier temps importer ma base de données qui est assez longue ensuite je dois vérifier si toutes les lignes ont bien été extraitent.
Je reviens vers toi dès que possible, en tout les cas merci beaucoup c'est vraiment gentil