XL 2010 copie automatique sans doublon et avec condition sur plusieurs feuilles RÉSOLU

br44

XLDnaute Impliqué
Bonjour le forum ,

je reviens vers pour vous poser une question . peut-on crées une listes de nom sans doublons à partir de listes située sur 4 plages différentes sur le même feuille ?avec pour option le regroupement de nom .
exemple de regroupement les blés d'or et germaine même joueur où alors modification du nom :
la grande ferme de jojo qui devient jojo pour regrouper je peut le faire avec la fonction " concatener " , mais le souci c'est de faire comprendre à excel qu'ils ne s' agit pas d'une nouvelles personne mais d'un regroupement pour la procédure qui suit puisse s'applique en regroupent les résultat de chaque noms sur le même lignes voir exemple dans le feuille 2 de mon fichier joint
Et dans un deuxième temps faire la même procédure pour des plage situé dans le même colonne dune feuille mais ne regrouper que 3 plages pour feuille 3 vers feuilles 4 et de 4 vers 5 .

en vous remerciant par avance du coup de pousse et en espérant être claire je vous dit à bientôt . amicalement br44

P.S N'hésiter pas à me dire si se n'est pas claire où si vous aves des question ;
 

Pièces jointes

  • EXPLAIRE FORUM.xlsx
    506.6 KB · Affichages: 45

br44

XLDnaute Impliqué
Bonjour le forum ,

en attendant d'avoir une réponse j'ai continuer de mon côté à chercher une solution après des testes avec l'enregistreur de macro voilà se que j'ai obtenu ; peut-êtres il y a plus simple ?
pour info j'ai pris les feuilles "Classement TRIMESTRIEL " ET CLASSEMENT ANNUEL " comme base pour mon essaie :

Sheets ("Classement Trimestriel").range ("B6:b55,B61:B110,B116:B165,B171:B220").Selection.Copy
Sheets("Classement Annuel").range("$AS$1:$AS$136").RemoveDuplicates columns:=1 ,header:=xlno
activewindow.SmallScroll.Down:=-138

Cette macro est issus des manipes suivantes:
Sélection des plages ("b6:55,b61:b110,b116:b165,b171:220") copier , puis selection de la colonne AS de feuille"classement annuel" et colle de la ligne 1 à lignes 136 .
Sélectionner la plage As1:as136 aller dans "donnée " et sélectionner sans doublon
une fois valider le message qui s'affiche le résultat est de 76 noms restant qu'ils faut a nouveau copier et placer dans la colonne B de la feuille "Classement annuel"
Voilà où j'en suis le but est en de coller le résultats sans doublon directement à partir de la cellule "B6" de la feuille "Classement annuel " . Pour le parti la fonction :"CONCATENER" on verras plus tard si c'est possible .

vous remerciant part . n'hésiter pas à me dire si ce n'est pas possible de le faire où si il y quelque chose que vous ne comprenez pas .Merci d'avance pour le temps que vous prendrais pour lire se message . Amicalement br44
 

youky(BJ)

XLDnaute Barbatruc
Bonsoir Br44,
Je viens de réaliser ceci….
Cette macro copie sans doublon les noms de la col B de classement Trimestriel
en Classement Annuel à partir de B43
Inserer un Module au fichier et coller cela
Bruno
VB:
Sub mesnoms()
lig = -49
Set dico = CreateObject("Scripting.Dictionary")
For k = 1 To 4
lig = lig + 55
For Each c In Feuil4.Range("B" & lig & ":B" & lig + 50)
If c.Value <> "" Then
dico.Item(c.Value) = dico.Item(c.Value)
End If
Next
Next
Feuil5.Range("B43").Resize(dico.Count) = Application.Transpose(dico.keys)
End Sub
 

br44

XLDnaute Impliqué
re youky(B)

je viens d'adapter et essayer vôtre macro qui fonctionne parfaitement . pourriez vous me dire si l'ont peut l'adapter pour qu'elle face la même chose mais cette fois si pour alimenter la feuil4 a partir de la feuil 3 , mais les plage seront différentes .
la feuille contient 12 périodes il faut donc faires des boucle que sur 3 périodes dont voici le détail :
les périodes 1 , 2 , 3 sont = 1 trimestre ; les périodes 4, 5, 6 sont = 2 trimestre ….
je vais me baser sur vôtre macro mais comment faire pour que les boucle s'en chaine et affect la bonne liste au bon trimestre .
Je vous remercie beaucoup pour le coup de main et espère pouvoir vous relire bientôt .Amicalement Br44
 

youky(BJ)

XLDnaute Barbatruc
Voici une macro
J'ai bataillé car les tableaux ne sont pas positionnés tous pareils
Essayer ceci.
Bruno
VB:
Sub lesnoms()
deb = 6 ' lig ou mettre
lig = 1
lg = 0
For an = 1 To 4
Set dico = CreateObject("Scripting.Dictionary")
For k = 1 To 3
lig = Application.Match("NOMS  DES  JOUEURS", Feuil3.Range("B" & lig & ":B" & lig + 60), 0)
lig = lig + lg + 1
lg = lig - 1
For Each c In Feuil3.Range("B" & lig & ":B" & lig + 37)
If c.Value <> "" Then
dico.Item(c.Value) = dico.Item(c.Value)
End If
Next
Next
Feuil4.Range("B" & deb).Resize(dico.Count) = Application.Transpose(dico.keys)
Set dico = Nothing
deb = deb + 55
Next
End Sub
 

br44

XLDnaute Impliqué
Bonsoir Youky (B)
merci pour cette macro et je comprend bien le souci qui est d'ailleurs régler pour l'année prochaine car les deux premier tableaux de la feuille 3 seront tous identique pour que se soit plus simple .
Il faut que je regarde mais si je cale la feuille 4 sur la 3 il faudra que je modifie la macro qui vas de 4 à la 5 mais bon pas grave .
j'aurais une petite question . pourquoi ne voie-je pas de déclaration de variable de type " dim" dans vôtres macro ? c' est juste pour savoir et comprendre et dep = feuil3 lign6 çà j 'ai compris , le et les "lig" et lg qui sont des raccourci de ligne je suppose , mais a quoi corresponde les chiffre s associés
Je m'excuse de vous demander tout c'est explications , mais c'est pour moi le meilleur moyen de comprendre et après de pouvoir l'appliquer .
En vous remerciant beaucoup pour le coup de pouce et tu temps passer je vous dit a bientôt le temps de tester vôtre proposition . Amicalement Br44
 

youky(BJ)

XLDnaute Barbatruc
Bonsoir,
En entête de Module si il y a Option Explicite, il faut obligatoirement déclarer les variables et cela utilise moins de place en mémoire
Si on déclare lig As long Excel c'est de suite que c'est numéric.
Pour ma part je préfère omettre cette instruction qui me donne plus d'aisance.
Je fais attention de ne pas utiliser un coup des chiffres ensuite du texte avec la même variable.
J'utilise jamais le .Name des onglets mais le .Codename (au cas ou l'on renomme un onglet AIE) donc Feuil3 ou Feuil4
deb.….. comme N°ligne de début
lig et lg sont des N° lignes
Important pour voir le déroulement d'une macro en pas à pas…
Mettre un point d'arrêt (1 click dans la marge gauche du code)
Presser F8 autant de fois que désiré, passer le curseur sur les mots clés ou variable pour voir la valeur
Ou encore afficher la fenêtre Exécution et pour questionner une valeur mettre exemple ?lig ou ?deb ou ?c.value et faire entrée.
Clicker dans la flèche verte du menu VBA pour poursuivre (reclick pour enlever le point d'arrêt).
Il faut bugger beaucoup pour avancer un peu, le tout c'est d'apprendre.
Bruno
 

br44

XLDnaute Impliqué
Bonsoir YOUKY (b) ,
Bon j'ai tester vôtres macro et elle fonctionne sur le principe j'ai juste des petit beug dût certainement : 1) au décalage des tableaux 2) à la mise en forme de mes cellules ( pas la même orthographe , difference d'espace ) . je vous remercie pour tout je vous tiens au courant pour la suite et vous dire si j'ai encore des question . de mon coter j 'ai modifier la première feuille en éliminant les doublons des le départ et j'ai les automatiser avec la feuille 2 . il reste a trouver la formule qui me permettrais de copier la feuilles 2 vers la 3 mais en tenant comptes du n° de période pour que la copie vas dans le bon tableau . Pour cela j'ai deux option soit une commande VBA avec un bouton où alors si je trouve la bonne formule feui2.range("C9") = feuil3("C9") alors copier la plage ("B11:B145") dans la plage correspondante ex si feuil2.c9=3 alors sera égal la cellule C106 de la feuil3 et coller dans la plage allant de B108 à b145 mais bon une chose à la fois . . voilà où j'en suis des la trois première feuilles seront prête je remettrai un ficher pour que vous puissiez voir le résultat . vous remerciant pour le coup de pousse . Je vous à bientôt. amicalement Br 44
 

br44

XLDnaute Impliqué
BONJOUR A TOUS LE FORUM ET TOUS MES VOEUX A TOUS ?,

Youky (Bl) . je reviens vers vous avec mon fichier modifier comme je l'est indiqué dans mon dernier message . J'ai essayer de faire la macro pour la copier transpose mais j'ai une erreur n°9 dés le début et je n'est bien paramètre la condition qui détermineras l'emplacement de destination .

rappel : recopier les informations de la feuil 2 vers la feuil 3 dans le modèle correspondant au n° de la période concerné valeur de la cellule C9 de la feuil2 = à la valeur affiche dans une cellule C*de la feuil3 .

pour le transfer de le feuil3 vers la feuil4 je vais rajouter un bouton pour chaque trimestre l de cette façon il faudrait adapté vôtres deuxième macro que pour le premier bouton après je la modifierais juste les plage de destinations pour les 3 autres et il n'y aurais juste que les noms de la colonne B a trier et à déplacer car la feuille 3et 4 sont déjà en liaison . Vous remerciant par avance pour vôtre aide je vous dit à bientôt . Amicalement Br 44
Ci joint mon fichier modifier . a bientôt merci
 

Pièces jointes

  • EXPLAIRE FORUM.xlsx
    512.4 KB · Affichages: 21

br44

XLDnaute Impliqué
Bonjour Youky
tout d'abord merci pour avoir répondu aussi vite et pardon pour le temps mis a te répondre .
j'ai procéder a des teste et j'ai un souci d'incompatibilité de type (erreur d'exécution 13) sur cette lignes :
"Feuil4.Range("B" & deb).Resize(dico.Count) = Application.Transpose(dico.keys)".
j'ai procédé au découpage par trimestre avec un bouton pour chacun deux .

J'ai donc redéfinis la ligne de départ en me basant sur ta macro .
j'ai une petit question en passant a quoi sert cette ligne : "deb = deb + 55"
et pourquoi +55 ligne en fin de programme ?
d'autres part pourrais tu m'aider a faire le code pour le transfert de la feuil2 vers la feuil 3
avec pour condition que la transposition de se faire en fonction de la valeur de la cellule c9 de la feuille 2 à retrouver dans la feuil3 entrent les cellules C9 à C555 avec une valeur placée toutes les 50 lignes .
il me semble évident qu'il faut que je fasse une boucle sur la feuille de destination pour que la condition puisse 'appliquer , mais je but sur structure de la procédure .
la première partie pourrait être :

With feuil2. select
.range ("A6:C47") . copy
end With
With Feuil3.select
if C.value= C.value then
RP = .range("C9:C555").value
For each RP in c
C= 1 to 12 steep 50
end if
est ainsi de suite , mais pas sur que se soit la bonne solution .
je remets un fichier à jour avec les macros de mis en place l'erreur étant signaler par un ligne verte.
te remerciant d'avance pour tout et ne t'inquiètes pas pour le temps je comprend . Amicalement BR44
 

Pièces jointes

  • EXPLAIRE FORUM version 1.1.xlsm
    613.9 KB · Affichages: 10

youky(BJ)

XLDnaute Barbatruc
Bon j'ai revu et corrigé ma copie,
Donc macro modifié, j'avais pas tout compris je crois car en Archive on vois pas les mois indiqués.
D'où confusion
Attention j'ai inséré qlq lignes pour retomber bon tout les 50
J'ai fait une macro "verif " qui te montre en sélectionnant les cellules "Nom du coureur"
c'est juste pour voir si décalage, click 12 fois sur OK.
Pas fait ta question 2 pour l'instant (voir déjà si c'est bon)
Bruno
 

Pièces jointes

  • EXPLAIRE FORUM version 1.1 (1).xlsm
    599 KB · Affichages: 10

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 926
Membres
101 841
dernier inscrit
ferid87