Besoin d'aide sur une macro type "Copier/Coller"

damaelyon

XLDnaute Nouveau
Bonjour à tous,

J'ai créé une macro permettant de copier-coller des données d'un tableau source (PLANNING) vers un autre tableau cible (DDV) en dispatchant ces informations sur la totalité de la feuille afin de faire une fiche récapitulative de mes ventes. Cette macro permet d'enregistrer cette cible en fonction de l'information donné en colonne B.

Cependant, ma macro ne fonctionne que pour la première ligne et j'aimerais pouvoir mettre le bouton associé à la macro en colonne O sur l'ensemble des lignes afin de pouvoir créer ma fiche de vente dès que j'ai les informations.

Mais j'y arrive pô. :(

Merci d'avance pour votre aide.
 

Pièces jointes

  • DDV.xls
    32 KB · Affichages: 62
  • PLANNING.xls
    84 KB · Affichages: 53
  • PLANNING.xls
    84 KB · Affichages: 56
  • PLANNING.xls
    84 KB · Affichages: 61
Dernière édition:

bbb38

XLDnaute Accro
Re : Besoin d'aide sur une macro type "Copier/Coller"

Bonjour damaelyon , le forum,
J’ai essayé de lancer les macros, mais sans succès. Les noms des fichiers joints ne correspondent pas à ceux mentionnés dans les macros. Je suppose que les données mentionnées dans les colonnes de la feuille 2012_RZD peuvent être sous forme de texte, chiffres ou dates. Dans cette hypothèse (mais ce n’est qu’un humble avis personnel), il serait souhaitable d’indiquer des valeurs non confidentielles.
Cordialement,
Bernard
 

damaelyon

XLDnaute Nouveau
Re : Besoin d'aide sur une macro type "Copier/Coller"

Vraiment personne pour me donner un coup de main ?

Je ne comprends pas comment ne pas faire référence à la ligne dans ce code :

" Windows(PLANNING).Activate
Range("B2").Select
Selection.Copy
Windows(DDV).Activate
ActiveWindow.SmallScroll Down:=-36
Range("B1:C2").Select
ActiveSheet.Paste"
 

bbb38

XLDnaute Accro
Re : Besoin d'aide sur une macro type "Copier/Coller"

Bonjour damaelyon, le forum,
Ta macro fonctionne (lancement par le bouton figurant en O2), mais le résultat est surprenant. Le classeur « Planning » n’existe plus. Un classeur « info1 » a été créé contenant toutes les informations qui figuraient dans le classeur « PLANNING ». Dans le classeur « DVD », les cellules B1, D1, A4, C5, E5 ont été renseignées.
Je n’arrive pas à comprendre ta demande. Souhaites-tu créer une feuille de vente pour chaque ligne du classeur « PLANNING », avec comme intitulé le nom figurant dans la colonne B, à partir du modèle la feuille « Fiche vente » ?

Cordialement,
Bernard
 

damaelyon

XLDnaute Nouveau
Re : Besoin d'aide sur une macro type "Copier/Coller"

Bonjour Bernard et merci de ta réponse.

C'est exactement l'objet de ma demande. Le classeur PLANNING ouvre le "template" DDV, le rempli avec les informations de chaque colonne et l'enregistre avec le nom figurant dans la colonne B.

Tu as mieux résumé que moi ce que je voulais. :D

Mais ma macro est effectivement étrange et de plus, je n'arrive pas à l'appliquer pour chaque ligne. Je voudrais que cette opération puisse se faire pour chaque ligne mais à volonté en cliquant sur le bouton en colonne O.
 

bbb38

XLDnaute Accro
Re : Besoin d'aide sur une macro type "Copier/Coller"

Bonjour damaelyon, le forum,
Petite remarque : Sur la fiche vente, les cellules C5 et E5 sont alimentées par les cellules des colonnes E et F correspondantes au nom figurant en colonne B, mais celles-ci (cellules C5 et E5) possèdent un choix de libellés par une liste déroulante. A mon avis, les listes déroulantes devraient figurées sur les cellules des colonnes E et F de la feuille « planning ».
Dois-je faire les modifications, si nécessaire ?

Cordialement,
Bernard
 

camarchepas

XLDnaute Barbatruc
Re : Besoin d'aide sur une macro type "Copier/Coller"

Bonjour Damaelyon, Bernard, tous les membres de ce fabuleux Forum, et tous les curieux qui pourront passer par là lors des prochaines décennies.

Le code de transfert est à reprendre entièrement .

Ca marche jusqu'à un certain point l'enregistrement de macro , mais cela devient vite complexe si pas optimisé.

L'adressage des classeur n'est pas top non plus , activebook peut être en cas d'anomalies ou d'arret sur image n'importe le quel de tes classeurs ouvert.

Et enfin, l'usage du on error resume next doit être hyper controlé, car dès que cette ligne est lue , plus aucunes erreur n'arrete le programme, il faut donc si vraiment nécessaire, stopper cette prise en compte des erreurs par un on error goto 0 pour reprendre la gestion normale des erreurs.

Un peu de travail qu'en même, pas dispo ce matin , je repasse par là en milieu ou fin d'après midi pour vous proposer une solution qui sera j'espère bien plus fiable.

Nous verrons ensuite pour l'integration des XX boutons , pas très top je pense : un double clic sur la ligne désirée serait plus judicieux.

Mais c'est en faisant que l'on apprends donc bravo pour tous ce qui est déjà en place.

A très bientot donc , à moins qu'un Xllien passe par ici avant et vous livre une solution pérenne.
 

camarchepas

XLDnaute Barbatruc
Re : Besoin d'aide sur une macro type "Copier/Coller"

Bonsoir,

Voici le code un peu optimisé , ensuite il faudra intéger le multilignes
Code:
Option Explicit
Sub Macro1()
'
'
Dim Chemin As String, DDV As String, PLANNING As String
Dim Nom As String, Autorise As String
Dim Pointeur As Long, Longueur As Long
Chemin = ThisWorkbook.Path & "\"
DDV = "DDV.xls"
PLANNING = "PLANNING.xls"
Autorise = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefjhijklmnopqrstuvwxyz_0123456789"

Workbooks.Open Chemin & DDV
With Workbooks(PLANNING).Sheets("2012")
   Workbooks(DDV).Sheets("Fiche vente").Range("B1").Value = .Range("B2")
   Workbooks(DDV).Sheets("Fiche vente").Range("D1").Value = .Range("C2")
   Workbooks(DDV).Sheets("Fiche vente").Range("A4").Value = .Range("D2")
   Workbooks(DDV).Sheets("Fiche vente").Range("C5").Value = .Range("E2")
   Workbooks(DDV).Sheets("Fiche vente").Range("E5").Value = .Range("F2")
End With
    
    Nom = Workbooks(DDV).Sheets("Fiche vente").Range("B1") & ".xls"
    'si le document n'a jamais été enregistré
  If Workbooks(DDV).Path = "" Then
    'boîte de dialogue Enregistrer sous
    Application.GetSaveAsFilename Chemin & Nom, FileFilter:="Fichier Excel (*.xls), *.xls", Title:="Choisir un dossier"
   Else
    If Nom = "" Then
Reprise:
     Nom = InputBox("Entrez le nom du fichier ")
     Workbooks(DDV).Sheets("Fiche vente").Range ("B1") & ".xls" = Nom
    End If
     
    If MsgBox("Voulez-vous enregistrer le fichier sous le nom " & Nom & " ?", 4) = 6 Then
        If Dir(Chemin & Nom) <> "" And Nom <> "DDV.xls" Then Kill Chemin & Nom
        'Enregistre dans le même dossier

        Pointeur = 0
        Longueur = Len(Nom)
        Do
        Pointeur = Pointeur + 1
        If InStr(1, Autorise, Mid(Nom, Pointeur, 1)) = 0 Then
            MsgBox "Le nom proposé contient un caractère interdit : " & Mid(Nom, Pointeur, 1), 48
            GoTo Reprise
        End If
        Loop Until Pointeur = Longueur
        ActiveWorkbook.SaveAs ActiveWorkbook.Path & "\" & Nom
        End If

End If
 

damaelyon

XLDnaute Nouveau
Re : Besoin d'aide sur une macro type "Copier/Coller"

Merci milles fois camarchepas. Vraiment. J'essaye de comprendre ta macro pas à pas. :D

Pour le multilignes, tu as une solution en tête ?

Pareil pour le double clic sur la ligne, on fait comment ?
 
Dernière édition:

camarchepas

XLDnaute Barbatruc
Re : Besoin d'aide sur une macro type "Copier/Coller"

Bonsoir ,

en fait l'on rajoute un paramètre à la procédure Transfert indiquant la ligne à modifier.

Toutes les lignes lié à la feuille 2012 vont évoluée en .Range("B" & Ligne)

Dans un module standard

Code:
Option Explicit
Sub Transfert(Ligne As Long)
'
'
Dim Chemin As String, DDV As String, PLANNING As String
Dim Nom As String, Autorise As String
Dim Pointeur As Long, Longueur As Long
Chemin = ThisWorkbook.Path & "\"
DDV = "DDV.xls"
PLANNING = "PLANNING.xls"
Autorise = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefjhijklmnopqrstuvwxyz_0123456789"

Workbooks.Open Chemin & DDV
With Workbooks(PLANNING).Sheets("2012")
   Workbooks(DDV).Sheets("Fiche vente").Range("B1").Value = .Range("B" & Ligne)
   Workbooks(DDV).Sheets("Fiche vente").Range("D1").Value = .Range("C" & Ligne)
   Workbooks(DDV).Sheets("Fiche vente").Range("A4").Value = .Range("D" & Ligne)
   Workbooks(DDV).Sheets("Fiche vente").Range("C5").Value = .Range("E" & Ligne)
   Workbooks(DDV).Sheets("Fiche vente").Range("E5").Value = .Range("F" & Ligne)
End With
    
    Nom = Workbooks(DDV).Sheets("Fiche vente").Range("B1") & ".xls"
    'si le document n'a jamais été enregistré
  If Workbooks(DDV).Path = "" Then
    'boîte de dialogue Enregistrer sous
    Application.GetSaveAsFilename Chemin & Nom, FileFilter:="Fichier Excel (*.xls), *.xls", Title:="Choisir un dossier"
   Else
    If Nom = "" Then
Reprise:
     Nom = InputBox("Entrez le nom du fichier ")
     Workbooks(DDV).Sheets("Fiche vente").Range ("B1") & ".xls" = Nom
    End If
     
    If MsgBox("Voulez-vous enregistrer le fichier sous le nom " & Nom & " ?", 4) = 6 Then
        If Dir(Chemin & Nom) <> "" And Nom <> "DDV.xls" Then Kill Chemin & Nom
        'Enregistre dans le même dossier

        Pointeur = 0
        Longueur = Len(Nom)
        Do
        Pointeur = Pointeur + 1
        If InStr(1, Autorise, Mid(Nom, Pointeur, 1)) = 0 Then
            MsgBox "Le nom proposé contient un caractère interdit : " & Mid(Nom, Pointeur, 1), 48
            GoTo Reprise
        End If
        Loop Until Pointeur = Longueur
        ActiveWorkbook.SaveAs ActiveWorkbook.Path & "\" & Nom
        End If

End If
workbooks(DDv).close false
End Sub


puis dans le module de la feuille 2012

on traite l'événementiel Double clic et l'on récupére la ligne actuelle puis l'on appelle la procédure transfert


Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Transfert Target.Row
End Sub

et voilà.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 392
Messages
2 087 991
Membres
103 691
dernier inscrit
christophe89