Macro Copier cellules vers autres feuilles

vincent6262

XLDnaute Nouveau
Bonjour à tous,

Je vous mets mon fichier type en pièce jointe.

J’ai déjà commencé une macro, mais je bloque.

Je souhaite :
- Remplir la feuille « Commandes » et lorsque je clique sur « Commander » les données de la feuille « Commandes » arrivent à la fin de me tableau en créant une nouvelle ligne dans la feuille « Achats ». J’ai réussi à faire cela mais les données arrivent dans le mauvais ordre, j’ai besoin que les données arrivent dans cet ordre : E7 vers colonne A, E9 vers colonne D, E11 vers colonne I, E3 vers colonne J, E38 vers colonne B, 41 vers colonne E, E44 vers colonne F, E47 vers colonne G, E50 vers colonne H, E53 vers colonne Q.

Merci d’avance pour votre aide,

Cordialement,

Vincent
 

Pièces jointes

  • Test Vincent.xlsm
    32.1 KB · Affichages: 130
  • Test Vincent.xlsm
    32.1 KB · Affichages: 152
  • Test Vincent.xlsm
    32.1 KB · Affichages: 157
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Macro Copier cellules vers autres feuilles

Bonsoir Vincent et bienvenue à toi,

Déposer sur le forum un fichier déjà protégé, sans fournir le mot de passe n'aide guère ... Heureusement, tu devais être le 3ème à choisir "toto" aujourd'hui ;)Ceci dit, je dirais que dans le cas que tu évoques, le plus simple serait d'utiliser une instruction comme
Code:
Sheets("Achats").Protect Password:="toto", UserInterfaceOnly:=True
Le dernier paramètre permet d'appliquer la protection uniquement aux manipulations faites par l'utilisateur et pas aux macros! ... ton collage spécial va donc fonctionner sans problème.
L'autre solution serait de faire un "Sheets("Achats").Unprotect ..." avant chaque manip et reprotéger la feuille juste après!

Si tu places l'instruction proposée ci-dessus, dans l'événement Workbook_Open, je pense que ça devrait convenir. Pense à consulter l'aide pour vérifier quels autres paramètres sont disponibles!
 

vincent6262

XLDnaute Nouveau
Re : Macro Copier cellules vers autres feuilles

Merci Beaucoup modeste, j'ai réussi à faire sauter la protection :)

Maintenant, sais-tu comment je peux faire pour la 1ere partie de mon 1er message?

"Je souhaite :
- Remplir la feuille « Commandes » et lorsque je clique sur « Commander » les données de la feuille « Commandes » arrivent à la fin de me tableau en créant une nouvelle ligne dans la feuille « Achats ». J’ai réussi à faire cela mais les données arrivent dans le mauvais ordre, j’ai besoin que les données arrivent dans cet ordre : E7 vers colonne A, E9 vers colonne D, E11 vers colonne I, E3 vers colonne J, E38 vers colonne B, 41 vers colonne E, E44 vers colonne F, E47 vers colonne G, E50 vers colonne H, E53 vers colonne Q."

Merci d'avance et bonne soir
 

Modeste

XLDnaute Barbatruc
Re : Macro Copier cellules vers autres feuilles

Re-bonsoir,

et je n'ai pas mis de mot de passe ;)
... Pas même sur la feuille "Commandes" :rolleyes:

Bref, je concède qu'il n'y en avait pas sur "Achats". J'ai donc testé ce qui suit:
- ôter la protection
- mettre l'instruction proposée précédemment dans la Sub WorkBook_Open
- placer le code suivant dans un module standard (j'utilise un tableau dont je ne garnis pas toutes les entrées, partant du principe que tu complètes les autres cellules de la feuille Achats" après avoir recopié le reste). Ce code remplace le tien:
VB:
Sub recopie()
    Application.ScreenUpdating = False
    Dim monTablo(16)
    With Sheets("Commandes")
    monTablo(0) = .[E7]
    monTablo(1) = .[E38]
    monTablo(3) = .[E9]
    monTablo(4) = .[E41]
    monTablo(5) = .[E44]
    monTablo(6) = .[E47]
    monTablo(7) = .[E50]
    monTablo(8) = .[E11]
    monTablo(9) = .[E3]
    monTablo(16) = .[E53]
    Set Derligne = Sheets("Achats").Range("$A$65536").End(xlUp).Offset(1, 0)
    Derligne.Resize(1, 17) = monTablo
    'Sheets("Commandes").Range("E7,E9,E11,E13,E16,E19,E22,E25,E28,E31").ClearContents 'à vérifier
End With
End Sub
... à tester soigneusement!
 

vincent6262

XLDnaute Nouveau
Re : Macro Copier cellules vers autres feuilles

Bonjour Modeste,

Merci beaucoup, j'ai légèrement adapté et ça fonctionne parfaitement. Quel plaisir d'avoir de l'aide, j'ai déjà passé une centaine d'heures sur ce fichier, et je commencé à désespérer, j'ai pourtant cherché des heures la solution à mon problème, sans succés, et grâce a ton aide, en une petite heure, c'est réglé ;)

Je souhaite réaliser autre chose:

- Je souhaite faire un lien entre ma feuille "Ventes" et ma feuille "Clients". Je souhaite créer un automatisme (formule ou macro) qui copie les noms des clients de la colonne B de la feuille "Ventes" vers la colonne A de la feuille "Clients". Aujourd'hui, j'ai fait un vulgaire copier/coller, mais j'ai 2 fois le même client, en fait j'ai besoin qu'Excel comprenne que si le client existe déjà alors il ne crée pas de ligne et que si le client n'existe pas, il crée une nouvelle ligne tout en gardant les formules déjà existante sur la feuille "Clients" des colonnes B,C et D. Ensuite l'idéal serait qu'il trie par ordre alphabétique en fonction de la colonne A de la feuille "Clients".

Merci d'avance, je joins le fichier nécessaire.

Désolé pour les explications, c'est pas évident.

BOnne journée,

Vincent
 

Pièces jointes

  • Test Vincent.xlsm
    45.4 KB · Affichages: 121
  • Test Vincent.xlsm
    45.4 KB · Affichages: 130
  • Test Vincent.xlsm
    45.4 KB · Affichages: 125

Modeste

XLDnaute Barbatruc
Re : Macro Copier cellules vers autres feuilles

Bonjour Vincent,

Une nouvelle question aurait peut-être valu l'ouverture d'un autre fil (et puis ça t'aurait évité que ce soit moi qui revienne ;))
Me suis pas occupé du tri (je voudrais profiter du fait qu'il ne pleut pas, pour le moment!). Le code ci-dessous (à tester soigneusement, bien sûr!!) est à placer dans le module de la feuille "Clients". La macro s'exécute à chaque activation de la feuille et met à jour les noms de clients en colonne A de cette même feuille:
VB:
Private Sub Worksheet_Activate()
Set liste = CreateObject("scripting.dictionary")
With Sheets("Ventes")
    For Each c In .Range("B3:B" & .Range("B" & Rows.Count).End(xlUp).Row)
        liste(c.Value) = c.Value
    Next c
End With
With Sheets("Clients")
    .[A4:A500].ClearContents
    .[A4].Resize(liste.Count, 1) = Application.Transpose(liste.items)
End With
End Sub

A plus tard,
 

vincent6262

XLDnaute Nouveau
Re : Macro Copier cellules vers autres feuilles

Merci Modeste,

J'ai testé ça fonctionne, encore merci. J'ai cherché a ajouter un tri automatique croissant de la colonne A mais je n'y arrive pas. Peux-tu m'aider stp?

Prends ton temps, profite d'abord de ton week end, je suis patient quand il s'agit de me rendre service ;)

Bonne journée,

Vincent
 

Pièces jointes

  • Test Vincent.xlsm
    46.6 KB · Affichages: 110
  • Test Vincent.xlsm
    46.6 KB · Affichages: 99
  • Test Vincent.xlsm
    46.6 KB · Affichages: 97

Modeste

XLDnaute Barbatruc
Re : Macro Copier cellules vers autres feuilles

Bonsoir,

Ne connaissant pas la structure réelle de ton fichier, j'ai utilisé une feuille supplémentaire pour trier les clients.
Si on sait que certaines colonnes de la même feuille ne seront jamais utilisées, on pourrait faire plus "simple".
Par contre, si la liste de tes clients s'allonge de manière sensible, il faudra sans doute travailler autrement (utiliser un tableau et faire un "Quick Sort") ... à voir donc!?

VB:
Private Sub Worksheet_Activate()
    Application.ScreenUpdating = False
    Set liste = CreateObject("scripting.dictionary")
    Me.[A4:A500].ClearContents
    With Sheets("Ventes")
        For Each c In .Range("B3:B" & .Range("B" & Rows.Count).End(xlUp).Row)
            liste(c.Value) = c.Value
        Next c
    End With
    Sheets.Add after:=Sheets(Sheets.Count) 'pour faire le tri
    With ActiveSheet
        .[A1].Resize(liste.Count, 1) = Application.Transpose(liste.items)
        .[A1].CurrentRegion.Sort key1:=.[A1], order1:=xlAscending, Header:=xlNo
        .[A1].CurrentRegion.Copy
    End With
    Application.EnableEvents = False 'la feuille est ré-activée lors du paste
    Me.[A4].Resize(liste.Count, 1).PasteSpecial Paste:=xlValues
    Application.DisplayAlerts = False 'éviter msg à la suppression de la feuille
    Sheets(Sheets.Count).Delete
    Application.DisplayAlerts = True 'facultatif
    Me.Activate
    Application.EnableEvents = True 'facultatif aussi
End Sub

... Tu nous diras!?
 

vincent6262

XLDnaute Nouveau
Re : Macro Copier cellules vers autres feuilles

Bonjour Modeste,

Je n'y arrive pas. J'ai tenté de modifier la 1ere macro que tu m'a donné et ajouter le tri automatique mais ça ne fonctionne pas. En fait je souhaite ajouter le tri à cette macro:

Private Sub Worksheet_Activate()
Set liste = CreateObject("scripting.dictionary")
With Sheets("Ventes")
For Each c In .Range("B3:B" & .Range("B" & Rows.Count).End(xlUp).Row)
liste(c.Value) = c.Value
Next c
End With
With Sheets("Clients")
.[A4:A500].ClearContents
.[A4].Resize(liste.Count, 1) = Application.Transpose(liste.items)
End With

End Sub


Comment dois-je faire?

Je te remercie et bonne journée,

Vincent
 

Modeste

XLDnaute Barbatruc
Re : Macro Copier cellules vers autres feuilles

Bonjour Vincent ... et puis tous les autres,

Tu m'inquiètes: je viens de télécharger ton dernier fichier, copier le code proposé dans mon dernier message et coller celui-ci dans le module de la feuille Clients, à la place de l'ancien code ... et je ne vois pas ce qui ne fonctionne pas :confused:
 

vincent6262

XLDnaute Nouveau
Re : Macro Copier cellules vers autres feuilles

Oui dans la feuille "ventes" tous les clients sont en colonne B, cependant, il y a des lignes vides

Encore merci

Je te mets le fichier type en pj, avec la derniere macro et tous les clients ne sont pas copiés :(
 

Pièces jointes

  • Test Vincent.xlsm
    49.7 KB · Affichages: 101
  • Test Vincent.xlsm
    49.7 KB · Affichages: 117
  • Test Vincent.xlsm
    49.7 KB · Affichages: 113

Discussions similaires

Statistiques des forums

Discussions
312 074
Messages
2 085 066
Membres
102 770
dernier inscrit
mathieu.lemaitre