Copie automatique donnée dans une autre feuille

bichmult

XLDnaute Nouveau
Bonjour à tous,

et merci d'avance pour vos réponses.

Alors le problème est bien compliqué pour moi qui suis "débutant" mais qui je l'espère sera simple pour vous...

J'ai dans une feuille plusieurs noms de prospect avec plusieurs données comme le mois, departement,... et surtout le nom du commercial en charge du prospect.
J'aimerais que dans une autre feuille appelé par le nom du commercial, toutes les données d'un prospect soit rebalancé automatiquement sur chaque feuille et vis versa...

Si je n'ai pas été clair je vous laisse le fichier ci joint qui sera plus compréhensible...

Merci Beaucoup pour votre aide

Cordialement
 

Pièces jointes

mth

XLDnaute Barbatruc
Re : Copie automatique donnée dans une autre feuille

Bonjour,

Un petit essai dans ton fichier en PJ, sur la base d'un filtre avancé avec ce code:
Code:
Option Explicit
Sub Macro1()
Dim Derlig As Long
With ActiveSheet
Derlig = Sheets("Bdd prospect").Cells(Rows.Count, 1).End(xlUp).Row
    .Columns("C:I").ClearContents
    Sheets("Bdd prospect").Range("A2:G" & Derlig).AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=.Range("a1:a2"), CopyToRange:=.Range("c1:i1"), Unique:=False
End With
End Sub

Bien à toi,

mth
 

Pièces jointes

bichmult

XLDnaute Nouveau
Re : Copie automatique donnée dans une autre feuille

Merci pour ta réponse si rapide,

Alors c'est tout à fait ce que je voulais, cependant je n'ai pas une si grande maitrise et n'arrive pas a le retranscrire sur mon fichier de départ....

Peux tu me donner plus d'infos sur la manière de réaliser la chose ou préfères tu que je t'envoie mon fichier d'origine....

A+
 

mth

XLDnaute Barbatruc
Re : Copie automatique donnée dans une autre feuille

re :)

Est-ce pour intégrer la macro? ou les boutons ? ou est-ce que la structure de ton fichier est légèrement différente? ou as-tu un message d'erreur?

Je ne sais pas trop comment te répondre, mais oui si tu veux tu peux m'envoyer ton fichier réel, et je te le renverrai en te décrivant pas à pas ce que j'ai fait dedans, de telle sorte que tu ne perdes pas la maîtrise de ton fichier si tu dois le faire évoluer dans le futur.

On roule comme ça ?

@+

mth
 

bichmult

XLDnaute Nouveau
Re : Copie automatique donnée dans une autre feuille

Impec génial j'envoie la vrai base qui n'est pas bcp différente.

Comme je te le disais dans le premier je voudrais je sais pas si c'est possible, mais les commerciaux mettrons si il ont pris un rdv , fait un devis ou encore signer un contrat et donc que c'est infos viennent se greffer dans la premiere feuille de prospect....

Merci encore enormement
 

Pièces jointes

mth

XLDnaute Barbatruc
Re : Copie automatique donnée dans une autre feuille

Bonsoir bichmult,

Voici ton fichier en retour, tu verras que j'ai inséré dans chaque onglet nominatif une colonne pour placer le critère du filtre élaboré (cellules A1:A2, mais on peut les mettre ailleurs), également inséré (avec une largeur zéro) la colonne "commercial" qui manquait dans ces onglets, puis placé le bouton.

Dans l'éditeur VBA j'ai placé ce code:
Code:
Option Explicit 'pour forcer la définition des variables
Sub Macro1()
Dim Derlig As Long 'Définit la variable Derlig
With ActiveSheet 'L'onglet de travail est l'onglet actif 
Derlig = Sheets("Tous les contacts").Cells(Rows.Count, 1).End(xlUp).Row 'Derlig est la dernière ligne remplie de la colonne A de l'onglet "Tous les contacts"
If Derlig <= 2 Then Exit Sub 'si Derlig<=2 on sort de la macro (rien à filtrer)
    .Columns("C:J").ClearContents 'on efface le contenu précédent des colonnes C à I
    Sheets("Tous les contacts").Range("A2:H" & Derlig).AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=.Range("a1:a2"), CopyToRange:=.Range("C1:J1"), Unique:=False 'instruction pour filtrer l'onglet "Tous les contacts" selon le critère situé en A1:A2 et copier le résultat à partie de C1:J1
End With
End Sub

Pour voir ou modifier le code, touches ALT et F11, il est dans le Module1.

Voilà, j'espère que cela pourra t'aider, du moins pour la première partie de ta question, c'est à dire copier les infos du 1er onglet vers les autres.

On peut également faire l'inverse, considérer que les saisies s'effectuent dans les onglets nominatifs, et sont reprises dans le premier onglet, la macro serait différente mais c'est possible.

Quant à faire les deux à la fois, je ne vois pas trop, on risque de se retrouver avec des doublons de tous les cotés que l'on peut traiter bien sûr, mais finalement à quel endroit sera la bonne info si on saisit partout, dans l'onglet "tous les prospects", dans les onglets nominatifs, ou plus vraissemblablement un peu les deux ? Là tout de suite je ne vois pas trop comment traiter cela de façon simple ... (déjà là on a un peu compliqué, car pour afficher les données d'un commercial il suffirait de mettre un filtre automatique dans le premier onglet ...)

Bonne soirée à toi et @ +

mth
 

Pièces jointes

bichmult

XLDnaute Nouveau
Re : Copie automatique donnée dans une autre feuille

dernière petite question et oui je ne suis vraiment pas très bon...

Je voudrais rajouter 2 colonnes dans toutes les feuilles (mail du prospect et raison du refus...)???? la macro ne fonctionne plus même quand le change tout cela dans le code....

Et aussi je pense finalement qu'il serait plus simple que je remplisse directement sur les feuilles dédié a chaque commerciaux et que ca s'incrémente dans la première feuille...

Merci mth
 

mth

XLDnaute Barbatruc
Re : Copie automatique donnée dans une autre feuille

Bonjour :)

Voici ton fichier ci-joint avec deux colonnes supplémentaires.
Je les ai ajoutées dans chaque onglet, ainsi que dans la macro:

Code:
[COLOR=blue]Option Explicit[/COLOR] [COLOR=green]'pour forcer la définition des variables[/COLOR]
[COLOR=blue]Sub[/COLOR] Macro1()
[COLOR=blue]Dim[/COLOR] Derlig [COLOR=blue]As Long[/COLOR] [COLOR=green]'Définit la variable Derlig[/COLOR]
[COLOR=blue]With[/COLOR] ActiveSheet [COLOR=green]'L'onglet de travail est l'onglet actif[/COLOR]
    [COLOR=green]'Derlig est la dernière ligne remplie de la colonne A de l'onglet "Tous les contacts"[/COLOR]
    [COLOR=green]'on prend la dernière ligne et on remonte avec xlup sur la dernière remplie[/COLOR]
    Derlig = Sheets("Tous les contacts").Cells(Rows.Count, 1).End(xlUp).Row
    [COLOR=blue]If[/COLOR] Derlig <= 2 [COLOR=blue]Then Exit Sub[/COLOR] [COLOR=green]'si Derlig<=2 on sort de la macro (rien à filtrer)[/COLOR]
        .Columns("C:L").ClearContents [COLOR=green]'on efface le contenu précédent des colonnes C à L[/COLOR]
        [COLOR=green]''instruction pour filtrer l'onglet "Tous les contacts" selon le critère situé en A1:A2[/COLOR]
        [COLOR=green]'et copier le résultat à partie de C1:L1[/COLOR]
        Sheets("Tous les contacts").Range("A2:J" & Derlig).AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:=.Range("a1:a2"), CopyToRange:=.Range("c1:L1"), Unique:=False
[COLOR=blue]End With[/COLOR]
[COLOR=blue]End Sub[/COLOR]

Là c'est pour rester dans la même logique, on remplit la feuille récap et on alimente les autres.

Je repasserai un peu plus tard pour faire l'inverse, on remplit les onglets nominatifs et on alimente le récap par macro (sauf si tu as d'autres réponses d'ici tout à l'heure :) )

Bon après-midi :)

mth
 

Pièces jointes

Dernière édition:

mth

XLDnaute Barbatruc
Re : Copie automatique donnée dans une autre feuille

re :)

Comme promis voici un essai en PJ pour faire la même chose mais à l'envers, à savoir copier le contenu des onglets nominatifs pour alimenter l'onglet de synthèse.
Le code:

Code:
[COLOR=blue]Option Explicit[/COLOR] [COLOR=green]'pour forcer la définition des variables[/COLOR]
[COLOR=blue]Sub[/COLOR] Synthèse()
Application.ScreenUpdating = [COLOR=blue]False[/COLOR] [COLOR=green]'Bloque l'affichage écran[/COLOR]
[COLOR=blue]Dim[/COLOR] i [COLOR=blue]As Long[/COLOR], derlig [COLOR=blue]As Long[/COLOR] [COLOR=green]'Définit les variables[/COLOR]
[COLOR=blue]With[/COLOR] Sheets("Tous les contacts") [COLOR=green]'Travaille sur l'onglet "Tous les contacts"[/COLOR]
    [COLOR=blue]If[/COLOR] .AutoFilterMode [COLOR=blue]And[/COLOR] .FilterMode [COLOR=blue]Then[/COLOR] .ShowAllData [COLOR=green]'gère les filtres (pour afficher toutes les données  si filtre activé)[/COLOR]
    derlig = .Cells(Rows.Count, 1).End(xlUp).Row [COLOR=green]'Calcule la dernière ligne remplie de l'onglet en colonne A[/COLOR]
    [COLOR=blue]If[/COLOR] derlig > 2 [COLOR=blue]Then[/COLOR] [COLOR=green]'si cette ligne est supérieure à 2[/COLOR]
        .Range(Cells(3, 1), Cells(derlig, 10)).ClearContents [COLOR=green]' Efface le contenu de la ligne 2 jusqu'à la dernière ligne[/COLOR]
    [COLOR=blue]End If[/COLOR] [COLOR=green]'fin du IF[/COLOR]
[COLOR=blue]End With[/COLOR] [COLOR=green]' Termine le With ci-dessus[/COLOR]
[COLOR=blue]For[/COLOR] i = 1 [COLOR=blue]To[/COLOR] Worksheets.Count [COLOR=green]'de i = 1 au nombre d'onglets du classeur (i est juste un compteur)[/COLOR]
    [COLOR=blue]If[/COLOR] Sheets(i).Name <> "Tous les contacts" [COLOR=blue]Then[/COLOR] [COLOR=green]'si l'onglet est différent de "Tous les contacts"[/COLOR]
        derlig = Sheets(i).Cells(Rows.Count, 1).End(xlUp).Row [COLOR=green]'calcul de la dernière ligne remplie sur la base de la colonne A[/COLOR]
        [COLOR=blue]If[/COLOR] derlig >= 2 [COLOR=blue]Then[/COLOR] [COLOR=green]'si cette ligne est supérieure à 2[/COLOR]
            [COLOR=green]'Copie le contenu de l'onglet i dans la feuille "Tous les contacts"[/COLOR]
            Sheets(i).Range("A2:J" & derlig).Copy Sheets("Tous les contacts").Cells(Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row, 1)
        [COLOR=blue]End If[/COLOR] [COLOR=green]'Fin du if[/COLOR]
    [COLOR=blue]End If[/COLOR] [COLOR=green]'Fin du If[/COLOR]
[COLOR=blue]Next[/COLOR] i [COLOR=green]' Passe à l'onglet suivant[/COLOR]
[COLOR=blue]With[/COLOR] Sheets("Tous les contacts") [COLOR=green]'Travaille sur l'onglet "Tous les contacts"[/COLOR]
    derlig = .Cells(Rows.Count, 1).End(xlUp).Row [COLOR=green]'Calcule la dernière ligne remplie colonne A[/COLOR]
    Range("A2:J" & derlig).RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7 _
            , 8, 9, 10), Header:=xlYes [COLOR=green]'Elimine les éventuels doublons[/COLOR]
    [COLOR=green]'Et au cas où il y aurait des lignes vides dans les onglets nominatifs[/COLOR]
    [COLOR=green]'on trie l'onglet de synthèse pour faire plus joli :) :) (et aussi pour être sûr de pouvoir utiliser les filtres[/COLOR]
    [COLOR=blue]With[/COLOR] .Sort
 
        .SortFields.Clear [COLOR=green]'on réinitialise les clés de tri[/COLOR]
        .SortFields.Add Key:=Range("A3:A6"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortNormal
        .SortFields.Add Key:=Range("C3:C6"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortNormal
        .SortFields.Add Key:=Range("D3:D6"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortNormal
        .SetRange Range("A2:J" & derlig)
        .Header = xlYes
        .MatchCase = [COLOR=blue]False[/COLOR]
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    [COLOR=blue]End With[/COLOR] [COLOR=green]'fin du with[/COLOR]
[COLOR=blue]End With[/COLOR] [COLOR=green]'Fin du With[/COLOR]
Application.ScreenUpdating = [COLOR=blue]True[/COLOR] [COLOR=green]'Rétablit l'affichage écran[/COLOR]
[COLOR=blue]End Sub[/COLOR]

J'ai pris une 'tit initiative :) ...
J'ai placé un filtre dans l'onglet de synthèse car cela me semble pratique (mais à virer en fonction de ce que tu en penses et de toute façon c'est géré dans la macro)

Vois si cela peut te convenir et @ +

mth
 

Pièces jointes

Dernière édition:

Discussions similaires

Réponses
4
Affichages
773
Réponses
4
Affichages
311
Réponses
14
Affichages
364
Réponses
3
Affichages
508

Statistiques des forums

Discussions
315 297
Messages
2 118 173
Membres
113 445
dernier inscrit
lmomo