Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 Copier/coller vers d'autre classeur

Dafaka7

XLDnaute Junior
Bonjour, j'ai le premier fichier "Format Réunion GT 2022 V1" ou je rempli le tableau ci-dessous (feuille"récupération" à l'aide d'un formulaire)

J'aimerais que lorsque dans "Service" il y a écrit qualité alors il va copier dans un autre classeur "PDCA UAP QUALITE" les 4 premières données avec N° dans N°; Indicateur dans Objet; Anomalie dans Ecart et Pilote dans responsable. Respectivement les colonnes 1,3,7 et 10.


Je précise que de base le second fichier est fermé. Voici l'emplacement du premier et du deuxième fichier :
T:\UAP EMBOUT
 

Pièces jointes

  • Copie de PDCA UAP QUALITE.xlsm
    32.9 KB · Affichages: 10
  • Format réunion GT 2022 V1.xlsm
    531.5 KB · Affichages: 5

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Dafaka, bonjour le forum,

En pièce jointe ton fichier (source) modifié. J'ai commenté les lignes de code ajoutées (non testé)...
 

Pièces jointes

  • Dafaka_ED_v01.xlsm
    533.8 KB · Affichages: 5

Dafaka7

XLDnaute Junior
Bonjour Robert,

En faite j'ai fait 2 discussion car ma première idée avec l'UserForm n'était pas la meilleure.
Puisque je vais avoir 1 PDCA par service, donc il ne faut pas que le fichier s'ouvre quand on active l'UserForm mais il faudrait qu'il s'ouvre quand on a fini de le remplir.

La macro actuel me bloque à cette partie la :
VB:
Set R = TD.DataBodyRange.Column(3).Find("")
@Robert
cordialement,
 
Dernière édition:

Dafaka7

XLDnaute Junior
J'ai modifié et mis dans un module mais ça ne fonctionne toujours pas.

Enfaite il faudrait que le fichier source envoie sur le fichier de destination et pas l'inverse.
J'ai réussi à faire en sorte que ça ouvre bien le fichier mais je n'arrive pas à que ça copie les données.
@Robert
 

Pièces jointes

  • Format réunion GT 2022 V2.xlsm
    537.1 KB · Affichages: 2
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Dafaka, bonjour le forum,

J'ai modifié ton fichier. D'abord j'ai supprimé le bouton Envoyé. L'action est automatique grâce à à l'événementielle Change dans l'onglet Récupération ci-dessous :

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim TS As ListObject 'déclare la variable TS (Tableau Structuré)

Set TS = Me.ListObjects("Tab_PDCA") 'définit le tableau structuré TS
'si le changement a lieu ailleurs que dans la dernière ligne de TS et la colonne 5, sort de la procédure
If Application.Intersect(Target, TS.DataBodyRange(TS.ListRows.Count, 5)) Is Nothing Then Exit Sub
If Target = "" Then Exit Sub 'si la cible est effacée, sort de la procédure
Module2.qualité 'lance la procédure [qualité] du module [Module2]
End Sub

Ensuite, dans la procédure qualité j'ai utilisé les mêmes variables pour les différents classeurs ouverts. Ça semble tourner sans accrocs. À tester...
Le code de qualité :

Code:
Sub qualité()
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim CS As Workbook 'définit la variable CS (classeur Source)
Dim OS As Worksheet 'définit la variable OS (Onglet Source)
Dim TS As ListObject 'définit la variable TS (Tableau Source)
Dim LI As Integer 'définit la variable LI (Ligne)
Dim CD As Workbook 'définit la variable CD (Classeur Destination)
Dim OD As Worksheet 'définit la variable OD (Onglet Destination)
Dim TD As ListObject 'définit la variable RD (Tableau Destination)
Dim R As Range 'définit la variable R (Recherche)
Dim PV As Integer 'définit la variable PV (Première ligne Vide)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
CA = "T:\UAP EMBOUT\PDCA\"
Set CS = ThisWorkbook 'définit le classeur source CS
Set OS = CS.Worksheets("Récupération") 'définit l'onglet source OS
Set TS = OS.ListObjects("Tab_PDCA") 'définit le tableau structuré source
LI = TS.ListRows.Count 'définit la ligne LI

'service Qualité
If TS.DataBodyRange(LI, 5).Value = "Qualité" Then 'condition 1 : si le service est "Qualité"
    On Error Resume Next 'gestion des erreur (en cas dérreur passe à la ligne suivante)
    Set CD = Workbooks("PDCA UAP QUALITE.xlsm") 'définit le classeur destination CQ (génère une erreur si le classeur n'est pas ouvert)
    If Err <> 0 Then 'condition : si une erreur a été générée
        Err.Clear 'supprime l'erreur
        Set CD = Application.Workbooks.Open(CA & "PDCA UAP QUALITE.xlsm") 'définit le classeur destination CQ en l'ouvrant
    End If 'fin de la condition
    On Error GoTo 0 'annule la gestion des erreurs
    Set OD = CD.Worksheets("Plan d'action") 'définit l'onglet destination OD
    Set TD = OD.ListObjects("T_action3") 'définit le tableau structuré destinatkion TD
    'ajout des valeurs dans TD
    Set R = TD.ListColumns(3).Range.Find("")  'définit la recherche R (recherche du vide dans la colonne 1 de TD)
    If R Is Nothing Or TD.ListRows.Count = 0 Then 'condition 2 : si aucune occurrence n'est trouvée
        TD.ListRows.Add 'ajoute une ligne à TD
        PV = TD.ListRows.Count 'définit la ligne PV (Première ligne Vide de la colonne 3 de TD)
    Else 'sinon (au moins une occurrence est trouvée)
        PV = R.Row - TD.HeaderRowRange.Row 'définit la ligne PV (ligne de la première occurrence trouvée moins la ligne des en-têtes de TD)
    End If 'fin de la condition 2
End If 'fin de la condition 1

'service prodution
If TS.DataBodyRange(LI, 5).Value = "Production" Then
    On Error Resume Next
    Set CD = Workbooks("PDCA Production.xlsm")
    If Err <> 0 Then
        Err.Clear
        Set CD = Application.Workbooks.Open(CA & "PDCA Production.xlsm")
    End If
    On Error GoTo 0
    Set OD = CD.Worksheets("Plan d'action")
    Set TD = OD.ListObjects("T_Prod")
    Set R = TD.ListColumns(3).Range.Find("")
    If R Is Nothing Or TD.ListRows.Count = 0 Then
        TD.ListRows.Add
        PV = TD.ListRows.Count
    Else
        PV = R.Row - TD.HeaderRowRange.Row
    End If
End If

'renvoie les données dans l'auter fichier
TD.DataBodyRange(PV, 1).Value = TS.DataBodyRange(LI, 1).Value
TD.DataBodyRange(PV, 3).Value = TS.DataBodyRange(LI, 2).Value
TD.DataBodyRange(PV, 7).Value = TS.DataBodyRange(LI, 3).Value
TD.DataBodyRange(PV, 10).Value = TS.DataBodyRange(LI, 4).Value
End Sub
Tu pourras rajouter des classeur en ne redéfinissant que certaines variable (onglet, Tableau Structuré...)
 

Pièces jointes

  • Format réunion GT 2022 V2.xlsm
    540.2 KB · Affichages: 2
Dernière édition:

Dafaka7

XLDnaute Junior
Bonjour @Robert ,

Alors c'est quasiment parfait ça fonctionne presque bien. Enfaite il rempli seulement si on va sur la page "Récupération" et qu'on change la colonne 5. Moi j'aimerais qu'il exécute quand on a fini de remplir le formulaire et que la nouvelle ligne est ajouté. Il ne detecte pas le CHANGE à l'insertion d'une nouvelle ligne.

Et deuxième chose j'ai essayé de faire pareil pour copier les lignes de la feuille "plan d'action" sur les autres classeur, sauf que je n'arrive pas à adapter pour que ça copie la ligne sélectionné donc la macro ne fonctionne seulement quand c'est la dernière ligne.
 

Pièces jointes

  • Format réunion GT 2022 V2.xlsm
    549.5 KB · Affichages: 1
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re,

En pièce jointe la version 03 qui se lance à la validation de l'UserForm. En revanche, c'est normal que cela agisse que sur la dernière ligne. Il faut savoir ce que tu veux finalement...
 

Pièces jointes

  • Format réunion GT 2022 V3.xlsm
    544.5 KB · Affichages: 6

Dafaka7

XLDnaute Junior
Bonjour @Robert ,

J'avais également fait ce module pour que le numéro soit associé au service, c'est possible que ça ce fasse directement dans la case N° ?



VB:
 If Not Intersect(Target, [Tab_PDCA]) Is Nothing Then
   tablo = [Liste_Services]
    Abrev = [Abrev]
   If Cells(Target.Row, 1) <> "" And Cells(Target.Row, 6) <> "" Then
       For i = 1 To UBound(tablo)
            If tablo(i, 1) = Cells(Target.Row, 6) Then Abrev = Abrev(i, 1)
        Next i
        Application.EnableEvents = False
        Cells(Target.Row, 2) = Cells(Target.Row, 1) & Abrev
        Application.EnableEvents = True
    End If
End If

Oui pour cette fonction c'est ce que je veux que ça ce fasse à la dernière ligne, mais j'aimerais faire pareil pour copier de la feuille "plan d'action" au autre classeur, mais pour celle-ci il faut que ce soit quand la colonne 15 change peut importe l'emplacement. Je serais adapté le reste mais je ne trouve juste pas comment le faire sur la ligne ou l'on change la valeur. EX :
Ici la ligne ou le statut est rouge quand je met Production, elle dois aller ce copier sur les autres fichiers.
Merci beaucoup pour votre aide et votre temps
 

Pièces jointes

  • Format réunion GT 2022 V2.xlsm
    547.5 KB · Affichages: 0
Dernière édition:

Discussions similaires

Réponses
7
Affichages
716
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…