1. Ce site utilise des "témoins de connexion" (cookies) conformes aux textes de l'Union Européenne. Continuer à naviguer sur nos pages vaut acceptation de notre règlement en la matière. En savoir plus.

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

Discussion dans 'Forum Excel' démarrée par br44, 10 Décembre 2018.

  1. br44

    br44 XLDnaute Impliqué

    Inscrit depuis le :
    28 Juin 2005
    Messages :
    807
    "J'aime" reçus :
    2
    Sexe :
    Masculin
    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:

  2. Chargement...

    Discussions similaires - copie automatique sans Forum Date
    XL 2013 Recopier automatiquement une colonne dans une autre sans certaines valeurs Forum Excel 31 Mars 2016
    Copier Coller automatique de texte sans utiliser VBA Forum Excel 5 Décembre 2012
    Copie automatique de lignes dans un autre classeur à la 1ère ligne vide sans doublons Forum Excel 31 Mars 2011
    Recopier automatiquement données dans une autre feuille Forum Excel 3 Janvier 2019
    XL 2016 recopier des lignes automatiquement Forum Excel 2 Janvier 2019

  3. br44

    br44 XLDnaute Impliqué

    Inscrit depuis le :
    28 Juin 2005
    Messages :
    807
    "J'aime" reçus :
    2
    Sexe :
    Masculin
    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
     
  4. youky(BJ)

    youky(BJ) XLDnaute Barbatruc

    Inscrit depuis le :
    4 Février 2009
    Messages :
    2560
    "J'aime" reçus :
    127
    Sexe :
    Masculin
    Habite à:
    69 CALUIRE
    Utilise:
    Excel 2016 (PC)
    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
    Code (Visual Basic):

    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
     
  5. br44

    br44 XLDnaute Impliqué

    Inscrit depuis le :
    28 Juin 2005
    Messages :
    807
    "J'aime" reçus :
    2
    Sexe :
    Masculin
    Bonjour Youky(B),
    un grand merci à vous pour cette macro que je vais de se pas tester et je reviens vers vous dés que possible . amicalement Br44
     
  6. br44

    br44 XLDnaute Impliqué

    Inscrit depuis le :
    28 Juin 2005
    Messages :
    807
    "J'aime" reçus :
    2
    Sexe :
    Masculin
    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
     
  7. youky(BJ)

    youky(BJ) XLDnaute Barbatruc

    Inscrit depuis le :
    4 Février 2009
    Messages :
    2560
    "J'aime" reçus :
    127
    Sexe :
    Masculin
    Habite à:
    69 CALUIRE
    Utilise:
    Excel 2016 (PC)
    Voici une macro
    J'ai bataillé car les tableaux ne sont pas positionnés tous pareils
    Essayer ceci.
    Bruno
    Code (Visual Basic):

    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
     
     
  8. br44

    br44 XLDnaute Impliqué

    Inscrit depuis le :
    28 Juin 2005
    Messages :
    807
    "J'aime" reçus :
    2
    Sexe :
    Masculin
    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
     
  9. youky(BJ)

    youky(BJ) XLDnaute Barbatruc

    Inscrit depuis le :
    4 Février 2009
    Messages :
    2560
    "J'aime" reçus :
    127
    Sexe :
    Masculin
    Habite à:
    69 CALUIRE
    Utilise:
    Excel 2016 (PC)
    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
     
  10. br44

    br44 XLDnaute Impliqué

    Inscrit depuis le :
    28 Juin 2005
    Messages :
    807
    "J'aime" reçus :
    2
    Sexe :
    Masculin
    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
     
  11. br44

    br44 XLDnaute Impliqué

    Inscrit depuis le :
    28 Juin 2005
    Messages :
    807
    "J'aime" reçus :
    2
    Sexe :
    Masculin
    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:

  12. youky(BJ)

    youky(BJ) XLDnaute Barbatruc

    Inscrit depuis le :
    4 Février 2009
    Messages :
    2560
    "J'aime" reçus :
    127
    Sexe :
    Masculin
    Habite à:
    69 CALUIRE
    Utilise:
    Excel 2016 (PC)
    Hello br44,
    J'ai fait ca vite car trop peu de temps
    J'ai ajouté des lignes entre certain tableaux pour avoir par tranche de 50
    A vérifier si j'ai compris
    Bruno
     

    Pièces jointes:

  13. br44

    br44 XLDnaute Impliqué

    Inscrit depuis le :
    28 Juin 2005
    Messages :
    807
    "J'aime" reçus :
    2
    Sexe :
    Masculin
    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:

  14. youky(BJ)

    youky(BJ) XLDnaute Barbatruc

    Inscrit depuis le :
    4 Février 2009
    Messages :
    2560
    "J'aime" reçus :
    127
    Sexe :
    Masculin
    Habite à:
    69 CALUIRE
    Utilise:
    Excel 2016 (PC)
    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:

  15. youky(BJ)

    youky(BJ) XLDnaute Barbatruc

    Inscrit depuis le :
    4 Février 2009
    Messages :
    2560
    "J'aime" reçus :
    127
    Sexe :
    Masculin
    Habite à:
    69 CALUIRE
    Utilise:
    Excel 2016 (PC)
    Bon encore avec les nouvelles macros
    Les voir toutes en Module1 les autres sont sous les boutons.
    Bruno
     

    Pièces jointes:

  16. br44

    br44 XLDnaute Impliqué

    Inscrit depuis le :
    28 Juin 2005
    Messages :
    807
    "J'aime" reçus :
    2
    Sexe :
    Masculin
    Bonjour YoukY ,
    un très grand merci pour tout çà le temps de vérifier et de tester et je reviens vers toit .
     
  17. br44

    br44 XLDnaute Impliqué

    Inscrit depuis le :
    28 Juin 2005
    Messages :
    807
    "J'aime" reçus :
    2
    Sexe :
    Masculin
    Bonjour Youky ,
    Se petit message pour faire le point après mes teste . se qui fonctionne c'est la liaison entres le feuil 3 et 4 . c'est bon j'ai testes il ne reste plus qu'a modifier les formule pour l'affichage se face donc pas de souci à première vue . mais la liaison entre le feuille 2 vers la feuille 3 ne fonctionne pas surtout au niveau du décalage qui ne fait pas .A moins qu'il faut remplir le tableau pour que cela fonctionne mais je ne le pense pas . J'ai essayer de comprendre tes différentes macro mais rien compris a part que tu a mis un compteur pour enregistrer le nombre de fois tu clic et que cela donne la boucle annuel si j'ai saisi le sens de ta procédure . le souci se situe au niveau du collage des informations deans le feuille 3 car quand tu clique sur le bouton rien ne se produit la macro "archive " sur le quel il est relier na pas l'aire de s'exécuter. te remerciant pour tout et m'excusant du dérangement je te dit à plus ci joint le fichier concerner . Amicalement Br44
     

    Pièces jointes:

  18. youky(BJ)

    youky(BJ) XLDnaute Barbatruc

    Inscrit depuis le :
    4 Février 2009
    Messages :
    2560
    "J'aime" reçus :
    127
    Sexe :
    Masculin
    Habite à:
    69 CALUIRE
    Utilise:
    Excel 2016 (PC)
    Ben Oui j'avais pas bien compris ta demande de feuil2 à feuil3
    C'est bien plus simple
    Remplace la macro "archive" par celle çi
    Bruno

    Edit : Je mets que les valeurs donc plus de formules
    Code (Visual Basic):

    Sub archive()
    'mets nb course de feuil2 dans Feuil3 selon periode
    periode = [C9] - 1
    If Not IsNumeric(periode) Then MsgBox "Remplir C2 (periode)!": Exit Sub
    deb = (50 * periode) + 11
    Feuil3.Range("B" & deb & ":AC" & deb + 36).Value = _
    Feuil2.[B11:AV47].Value
    End Sub
     
     
  19. br44

    br44 XLDnaute Impliqué

    Inscrit depuis le :
    28 Juin 2005
    Messages :
    807
    "J'aime" reçus :
    2
    Sexe :
    Masculin
    bonsoir Youky ,
    Merci pour la rapidité j'ai tester ta macro je te dit merci et bravo elle fonctionne très bien . il ne me restait plus qu'a reprendre ta première macro que tu as nommé "mes noms " et ensuite faire la liaison entre le feuille 4 vers la feuille 5 . je te rassure elle fonction très bien sur le principe , mais elle prend en compte comme noms les l'entête de chaque tableau se qui correspond au ligne 8-63-118-173 , de la feuille 4 . jai essayer de modifier mais aucun résultat . je pense quand rajoutant un step de 4 lignes toutes les 50 lignes cela réglerais le problème , mais où doit -je l'insérer dans ta macro si tu veux me l'indiquer je me chargerais de faire le modification .Amoin que se soit pas cela et que je me trompe . En te remerciant de nouveau pour le coup de main.
    je te remets ci dessous ta macro :
    Code (Text):
     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
    Je te souhaites un bon dimanche et merci encore amicalement Br44
     
  20. youky(BJ)

    youky(BJ) XLDnaute Barbatruc

    Inscrit depuis le :
    4 Février 2009
    Messages :
    2560
    "J'aime" reçus :
    127
    Sexe :
    Masculin
    Habite à:
    69 CALUIRE
    Utilise:
    Excel 2016 (PC)
    Hello,
    Vite fait à vérifier
    lig=-49 ensuite lig=lig+55
    -49+55=6 donc lig commence à 6 soit 6 à56 dans la 1ere boucle du For Each
    Oups! je crois que c'est là sur le For remplace +50 par +49 sinon on va trop bas
    Voir aussi la ligne des noms des joueurs en classement trim.. commence en 6-61-116-171
    Bruno
     
  21. br44

    br44 XLDnaute Impliqué

    Inscrit depuis le :
    28 Juin 2005
    Messages :
    807
    "J'aime" reçus :
    2
    Sexe :
    Masculin
    Bonjour ,Youky
    juste se petit message pour te remercier pour toute ton aide précieuses et t'annoncer une très bonne nouvelle CA MARCHE YES !
    J'ai mis ci dessous l ta macro modifier . il ne reste plus qu'au faire le transfert de tout cela dans mon fichier principal et faire des testes après avoir rétablie les connections pour l'affichage automatique des données dans le tableau trimestriel .

    Sous reserve d'un beug j'annonce que le poste est clos et résolu . Amicalement BR44

    Code (Visual Basic):
    Private Sub CommandButton1_Click()
    [LEFT][FONT=Georgia][COLOR=rgb(20, 20, 20)]
    lig = -46

    Set dico = CreateObject("Scripting.Dictionary")

    For k = 1 To 4

    Dep = 6

    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
    [/COLOR][/FONT][/LEFT]
     

Partager cette page