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 et bienvenue, bonjour le forum,

Un petit fichier exemple est toujours le bienvenu (voir la Lien supprimé) . Je comprends que tu ne puisses pas nous envoyer un cahier avec des données confidentielles mais il est tellement simple et rapide de créer un fichier exemple avec juste une poignées de données, reprenant la structure de ton fichier original.

Sinon, je n'ai pas bien compris... Tu sembles ne vouloir copier que la première ligne de chaque compte et c'est ce que le code ci-dessous fait. Si il faut changer et recopier toutes les lignes du même compte on adaptera...
le code :
Code:
Sub Macro1()
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 R As Range 'déclare la variable R (Recherche)

Set OB = Sheets("Feuil1") 'définit l'onglet OB
DL = OB.Cells(Application.Rows.Count, 1).End(xlUp).Row + 1 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet OB
Set PL = OB.Range("A1:A" & DL) 'définit la plage PL
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
    'définit la recherche R (recherche la valeur unique dans la plage PL, en partant de la dernìere ligne de cette plage, valeur entière)
    Set R = PL.Find(TMP(I), OB.Cells(DL, 1), xlValues, xlWhole)
    Application.Sheets.Add after:=Sheets(Sheets.Count) 'ajoute un nouvel onglet en dernière position
    ActiveSheet.Name = TMP(I) 'renomme l'omglet avec le nom de la valeur unique
    R.EntireRow.Copy Sheets(TMP(I)).Range("A1") 'copie la ligne de la première occurrence trouvée dans la cellule A1 du nouvel onglet
Next I 'nouvelle valeur unique de la boucle
End Sub
 

steph tex

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

Bonjour Robert
Merci pour ta proposition je vais la tester de suite.
Ce que je veux c est créer autant de feuille qu il y a de comptes différents la nommer par le numero du compte et sur chaque feuille mettre le nom du compte en cellule A1
En tout cas merci d avoir regardé mon post et je vaisvessayer de voir si deja avec celle que tu m as fait je peux m en sortir...un grand merci.
 

steph tex

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

Robert j ai donc testé la macro c est tout simplement génial. Que j aimerai avoir ton talent... mais j y travaille
Cependant il y a une ligne que j aimerai changé, c est celle la :R.EntireRow.Copy Sheets(TMP (I)).Range ("A1") qui copie la ligne de la premiere occurence trouvée.
En fait il faut qu elle me copie que le nom du compte en A1 et non pas toute la ligne.
 

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,

essaie comme ça, remplace :
Code:
R.EntireRow.Copy Sheets(TMP(I)).Range("A1") 'copie la ligne de la première occurrence
par :
Code:
Sheets(TMP(I)).Range("A1").Value = TMP(I) 'récupère la valeur unique en A1
 

steph tex

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

Me revoila Robert
Je buche depuis tout à l heure et j'ai encore besoin de ton aide.
Pour revenir au code que tu m as fait...sur chaque feuille que la macro crée je voulais y copier un tableau ...je me suis dit que ca ce n etait pas la peine de l automatisé dans la macro que je n avais qu à selectionner toutes les feuilles qui viennent d etre créées et de copier dessus le tableau sauf que lorsque je fais ca, ca m efface la valeur en A1...aurais tu une solution pour moi sil te plait...ce n est pas grave sinon j ai deja bien ce que tu m as fait.
 

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,

Si le tableau est fixe et doit être placer toujours au même endroit dans tous les onglets crées, je l'intègrerais dans le code avant de remplir A1 mais comme ne n'ai pas l'emplacement exact du tableau (Classeur/Onglet/adresse) je ne peux pas te proposer de code... Mais voilà l'emplacement :
Code:
Sub Macro1()
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 R As Range 'déclare la variable R (Recherche)

Set OB = Sheets("Feuil1") 'définit l'onglet OB
DL = OB.Cells(Application.Rows.Count, 1).End(xlUp).Row + 1 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet OB
Set PL = OB.Range("A1:A" & DL) 'définit la plage PL
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
    'définit la recherche R (recherche la valeur unique dans la plage PL, en partant de la dernìere ligne de cette plage, valeur entière)
    Set R = PL.Find(TMP(I), OB.Cells(DL, 1), xlValues, xlWhole)
    Application.Sheets.Add after:=Sheets(Sheets.Count) 'ajoute un nouvel onglet en dernière position
    ActiveSheet.Name = TMP(I) 'renomme l'omglet avec le nom de la valeur unique
        
    '*******************************
    'le code de copie du tableau ici
    '*******************************
    
    Sheets(TMP(I)).Range("A1").Value = TMP(I) 'récupère la valeur unique en A1
Next I 'nouvelle valeur unique de la boucle
End Sub
 

steph tex

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

Bon en fait j ai réussi à me debrouiller pour recopier le tableau sur chaque feuille créée et maintenant je voudrais rapatrier dans ce tableau chaque ligne de ma premiere feuille1 qui correspond au compte nomme sur chaque feuille en A1...et là c est le neant total. J ai essayé avec un somme.si mais vu qu il y a plusieurs fois la meme valeur il additionne...aors que je veux copier ligne par ligne...
 

steph tex

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

Oui tu as raison, excuse moi, c'est déjà très gentil de ta part et je ne te facile pas les choses ...et pourtant tu réponds dans le mille à chaque fois...
Je te joins de suite le fichier
En fait le tableau que je dois insérer se trouve sur l onglet modèle.
j 'espére que j'ai réussi à te joindre le fichier....
 

Pièces jointes

  • EDStest.xlsm
    182.1 KB · Affichages: 36

steph tex

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

bonsoir Robert

Je cogite toujours sur ma macro et je pense que ce code (qu il faut que je rajoute là où tu m'as dit) doit ressembler à un code dans ce genre pour inserer le tableau dans chaque feuille :

Code:
Sheets("Modèle").Select
    Selection.Copy
    Sheets("Feuil3").Select
    Range("A3").Select
    ActiveSheet.Paste
    Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    ActiveSheet.Paste

est ce que je chauffe? bon ce code le colle que sur une feuille(ici la feuille 3) et le truc c'est qu il faut que je le colle sur les onglets dont le nom commence par t et là ca se corse pour moi mais je continue mes recherches...
bonne soirée Robert
 
Dernière édition:

Robert

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

Bonsoir Steph, bonsoir le forum,

Avec un exemple c'est plus facile... En pièce jointe ton fichier modifié avec le code ci-dessous :
Code:
Sub Macro1()
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 R As Range 'déclare la variable R (Recherche)
Dim OD As Object 'déclare la variable OD (Onglet de destination)

Set OM = Sheets("Modèle") 'définit l'onglet OM
Set PM = OM.Range("A1:K20")
Set OB = Sheets("Feuil1") 'définit l'onglet OB
DL = OB.Cells(Application.Rows.Count, 1).End(xlUp).Row + 1 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet OB
Set PL = OB.Range("A1:A" & DL) 'définit la plage PL
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
    'définit la recherche R (recherche la valeur unique dans la plage PL, en partant de la dernìere ligne de cette plage, valeur entière)
    Set R = PL.Find(TMP(I), OB.Cells(DL, 1), xlValues, xlWhole)
    Application.Sheets.Add after:=Sheets(Sheets.Count) 'ajoute un nouvel onglet en dernière position
    Set OD = ActiveSheet
    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
    OD.Range("A1").Select
Next I 'nouvelle valeur unique de la boucle
End Sub

Il ne fait que copier le modèle mais je sens que c'est pas exactement ce qu'il te faut (post #9)... Aussi je te propose de m'envoyer un nouveau fichier exemple avec juste un onglet créé contenant le modèle et les données que tu veux récupérer dans le modèle. Comme ça je serais sûr de ce que tu veux et tenterai de trouver une solution...

Le fichier :
 

Pièces jointes

  • Steph_v01.xlsm
    190.8 KB · Affichages: 33

steph tex

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

Robert tu es époustouflant...
merci beaucoup!
Effectivement il m'en faut un peu plus mais je cherche un peu de mon coté pour voir si je peux me dépatouiller toute seule et si je galère je reviens...
en tout cas si je ne reviens pas (mais y a de grandes chances que si) je te remercie pour tout.
bonne soirée et encore mille mercis
 

steph tex

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

Bonjour Robert
Me revoilà... alors je te joins un fichier exemple de ce que j essaie d obtenir...attention je t ai mis la totale...Encore merci pour ta precieuse aide...
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 334
Membres
103 189
dernier inscrit
Bob34000