rempli des feuilles en fonction du nombre d apparation de plusieurs valeurs différent

steph tex

XLDnaute Nouveau
Bonjour
Je suis debutante en vba...je sais enregistrer des macros mais quand il s agit de créer le code je galère...
Alors voila je voulais savoir si quelqu un aurait la gentillesse de m aider.
Je vous explique.
Dans la colonne A de ma feuille1 excel il y a des comptes cmptables qui sont rangés par ligne et ordre croissant. Ces comptes peuvent apparaitre plusieurs fois par ligne.
J ai créé des feuilles modèle à completer dont je voudrais alimenter la cellule A1 de chaque feuille pour chaque compte different.
Exemple;
Sur ma feuille1 en colonne A j ai
A1:t4011
A2:t4011
A3:t4014
A4:t4018
A5:t4018
A6:t4018
Je voudrai que la macro recopie t4011 enA1 sur la feuille2 puis t4014 en A1sur la feuille3 puis t4018 en A1 sur la feuille 4...
Là c est un exemple mais dans ma feuille1 reelle je ne sais jamais a l avance combien de comptes j aurai.
Merci pour votre aide à tous
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : rempli des feuilles en fonction du nombre d apparation de plusieurs valeurs diff

Bonjour Steph, bonjour le forum,

C'est bien ce que je pensais que tu voulais...
Mais que faire quand il y a plus de lignes que dans le modèle ?! Dans ton dernier exemple le compte T4014 comporte 12 lignes et ton modèle uniquement 7 lignes...
Je pense qu'une solution serait d'avoir un modèle avec beaucoup plus de lignes au départ (il faudrait que tu me donnes une limite max) et ensuite on supprimerait les lignes vides...
En attendant ta réponse je commence à voir les modification du code.
 

steph tex

XLDnaute Nouveau
Re : rempli des feuilles en fonction du nombre d apparation de plusieurs valeurs diff

Pour le modèle et pour etre tranquille je créerai un modèle avec 200 lignes vide pour etre sûre que pour chaque compte toutes les lignes rentrent...
Un grand merci...
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : rempli des feuilles en fonction du nombre d apparation de plusieurs valeurs diff

Bonjour Steph, bonjour le forum,

Je pense avoir réussi mais deux problèmes subsistent.

Le premier est qu'il me faut dans la ligne 1 de l'onglet majMP les étiquettes comme dans l'onglet majMP solde [Compte/Date/Nº Pc/Tiers/Débit/Crédit]. Le code le fera automatiquement si tu ne le fais pas toi-même. Mais je ne lui ai pas demandé de supprimer la ligne à la fin. Pour cela, rajoute en toute fin de macro, la ligne ci-dessous:
Code:
OB.Rows(1).Delete

Le deuxième : il faut impérativement qu'après la dernière ligne éditée de l'onglet majMP, donc après la dernière écriture, tout soit complètement vide. Dans ton dernier exemple ce n'était pas le cas, il restait des reliquats de formules des lignes 1260 à 2481 et ça pose un problème. Là je n'ai pas de solution. Il faudra que tu fasses le nettoyage toi-même avant de lancer la macro...

Les tests effectués semble être concluants...

Le code :
Code:
Sub EDS()
Dim OM As Object 'déclare la variable OM (Onglet Modèle)
Dim PM As Range 'déclare la vareiable PM (Plage Modèle)
Dim OB As Object 'déclare la variable OB (Onglet de Base)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim PLV As Range 'déclare la variable PLV (PLage des cellules Visibles)
Dim OD As Object 'déclare la variable OD (Onglet de destination)
Dim LI As Byte 'déclare la variable LI (LIgne)

Set OM = Sheets("Modèle") 'définit l'onglet OM
Set PM = OM.Range("A1:K213") 'définit la plage PM
Set OB = Sheets("majMP") 'définit l'onglet OB
If UCase(OB.Range("A1").Value) <> "COMPTE" Then 'condition : si la valeur en majuscule de la cellule A1 de l'onglet OB est différente de "COMPTE"
    OB.Rows(1).Insert 'insère une ligne
    OB.Range("A1").Value = "Compte" 'place l'étiquette
    OB.Range("B1").Value = "Date" 'place l'étiquette
    OB.Range("C1").Value = "Nº Pc" 'place l'étiquette
    OB.Range("D1").Value = "Libellé" 'place l'étiquette
    OB.Range("E1").Value = "Tiers" 'place l'étiquette
    OB.Range("F1").Value = "Débit" 'place l'étiquette
    OB.Range("G1").Value = "Crédit" 'place l'étiquette
End If 'fin de la condition
DL = OB.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet OB
Set PL = OB.Range("A2:A" & DL) 'définit la plage PL (à partir de la ligne 2)
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For Each CEL In PL 'boucle sur toutes les cellules CEL de la plage PL
    If CEL.Value <> "" Then D(CEL.Value) = "" 'si la cellule n'est pas vide, alimente le dictionnaire D
Next CEL 'prochaine cellule de la boucle
TMP = D.keys 'récupère les valeurs uniques (sans doublons) de la colonne A dans le tableau temporaire TMP
For I = 0 To UBound(TMP) 'boucle sur toutes les valeurs (uniques) du tableau TMP
    LI = 10 'initialise la variable LI
    OB.Range("A1").AutoFilter Field:=1, Criteria1:=TMP(I) 'filtre la colonne 1 (=A) avec TMP(I) comme critère
    Set PLV = PL.SpecialCells(xlCellTypeVisible) 'définit la plage PLV des cellule visibles (non filtrée) de la plage PL
    Application.Sheets.Add after:=Sheets(Sheets.Count) 'ajoute un nouvel onglet en dernière position
    Set OD = ActiveSheet 'définit l'onglet de destination OD
    OD.Name = TMP(I) 'renomme l'onglet avec le nom de la valeur unique
    PM.Copy 'copy la plage PM
    OD.Range("A1").PasteSpecial (xlPasteColumnWidths) 'colle la largeur des colonnes
    PM.Copy OD.Range("A1") 'colle la plage PM
    OD.Range("A1").Value = TMP(I) 'récupère la valeur unique en A1
    For Each CEL In PLV 'boucle sur toutes les cellules CEL de la plage PLV
        OD.Cells(LI, 1).Value = CEL.Offset(0, 1).Value 'récupère la date
        OD.Cells(LI, 3).Value = CEL.Offset(0, 3).Value 'récupère le libellé
        OD.Cells(LI, 4).Value = IIf(CEL.Offset(0, 5).Value = 0, "C", "D") 'récupère "D" ou "C"
        OD.Cells(LI, 5).Value = IIf(CEL.Offset(0, 5).Value = 0, CEL.Offset(0, 6).Value, CEL.Offset(0, 5).Value) 'récupère la valeur du crédit ou débit
        LI = LI + 1 'incrément la ligne LI
    Next CEL 'prochaine cellule de la boucle
    OD.Rows(LI & ":209").Delete 'efface les ligne superflues du modèle
    OB.Range("A1").AutoFilter 'supprime le filtre automatique
    OD.Range("A1").Select 'sélectionne la cellule A1
Next I 'nouvelle valeur unique de la boucle
End Sub
Le fichier :
 

Pièces jointes

  • Steph_v02.xlsm
    80.7 KB · Affichages: 28

steph tex

XLDnaute Nouveau
Re : rempli des feuilles en fonction du nombre d apparation de plusieurs valeurs diff

Robert
Pour le probleme numéro un....il n y a pas de probleme. Ce n est pas dérangeant de rajouter les étiquettes et de les laisser
Et pour le deuxieme problème c est une grosse erreur de ma part ...en voulant aller trop vite j ai oublié d en enlever...donc il n y a pas de vide dans l ônglet majMP.
Je viens de rajouter mes 200 lignes dans "modèle" et je viens d executer la macro...et verdict...il me met un message d erreur "erreur d execution 6, depassement de capacité" et lorsque je regarde ce qu a fait la macro et bien elle a créé l onglet du premier compte t4014 et elle me recopie bien les lignes dans le tableau par contre elle copie un "c" dans la colonne D (colonne D/C dans le tableau) jusqu a la ligne 256 alors que mon tableau que j ai rallongé s arrete en ligne 213 ...
Il y a peut etre un truc que je ne fais pas comme il faut...
Ensuite je ne sais pas si tu avais vu mais j avais glissé une formule dans la case I5 du tableau afin de rapatrier le solde du compte qui se trouve sur la page solde. Seulement lorsque les feuilles se créent la formules ne changent pas et garde en reference la cellule A1 de l onglet modèle. Alors que je voudrai qu elles aient la reference A1 de leur propte onglet....
Je sais la digestion va etre difficile...merci tout de même


Bon ap
 
Dernière édition:

steph tex

XLDnaute Nouveau
Re : rempli des feuilles en fonction du nombre d apparation de plusieurs valeurs diff

Robert
Pour mon histoire de formule qui recupere la case A1 de "modèle" au lieu de sa propre feuille c est bon j ai resolu....j avais mis dans la formule modèle!A1 que j ai remplacé par A1 tout simplement... je potasse pour la suite
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : rempli des feuilles en fonction du nombre d apparation de plusieurs valeurs diff

Bonjour Steph, bonjour le forum,

C'est exactement ce que je te disais. Il faut impérativement qu'il n'y ait rien après la dernière écriture (en colonne A) sinon ça fait planter !
C'est, je pense, parce que tu n'as pas nettoyé jusqu'à la dernière ligne. Il suffit qu'il y ait une formule et la variable DL ne correspond plus à la réalité et entraîne des bugs. Comme celui du dépassement de capacité qui vient de la variable LI déclarée de type Byte. Je l'ai fait exprès car le modèle accepte 200 lignes au maximum (de la ligne 10 jusqu'à la ligne 210)...

Pour la formule en I5, si dans le modèle tu écris en I5 : =E210 ça devrait le faire non ? Regarde l'onglet Modèle de la version 3...

Sinon tu as raison... Dur dur la digestion !
 

steph tex

XLDnaute Nouveau
Re : rempli des feuilles en fonction du nombre d apparation de plusieurs valeurs diff

Robert je necsais pas ce que j avais bidouillé j ai donc tout refait au propre et tout fonctionne à merveille...alors un grand grand merci...tu es magic!!!
Au plaisir....
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : rempli des feuilles en fonction du nombre d apparation de plusieurs valeurs diff

Bonjour Steph, bonjour le forum,

je comprends alors pourquoi mon pote me dis que je suis le frère à Garcimore ! Décontrasté... Mais c'est pas ta génération taple* et tu verras...

*= tape sur google, en abrégé
 

steph tex

XLDnaute Nouveau
Re : rempli des feuilles en fonction du nombre d apparation de plusieurs valeurs diff

Si je connais Garcimore...en tout cas moi il me faisait rire...
Une petite question à laquelle bien évidement tu n es pas obligé de répondre mais comment devient on aussi....décontrasté?!
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : rempli des feuilles en fonction du nombre d apparation de plusieurs valeurs diff

Bonjour Steph, bonjour le forum,

heu... Le taple, je viens à peine de l'inventer, alors tu risques pas de le trouver...
Sinon c'est ici, sur XDL, que j'ai tout appris. J'ai découvert un univers qui me plaisait, des gens formidables qui avait les compétences, la gentillesse et surtout l'humour qui a fait passer tout ça...
je suis arrivé novice et avec le temps je suis devenu un peu moins couillon ou un peu plus dégourdi, c'est pareil...
 

steph tex

XLDnaute Nouveau
Re : rempli des feuilles en fonction du nombre d apparation de plusieurs valeurs diff

Et bien je pense que ce n est pas donné à tout le monde d être autodidacte en vba alors félicitations car en ce qui me concerne tu as fait une super macro...
Encore mille mercis pour ton aide et bonne continuation
à bientôt peut être
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 184
dernier inscrit
Di Martino