Copier/Coller de valeurs sous conditions

Résolu
Bendit0044 Messages postés 8 Statut Membre -  
Bendit0044 Messages postés 8 Statut Membre -
Bonjour,

Voici ma situation, je souhaiterai recopier depuis un fichier "Base de données" toute les lignes qui ont sur la première colonne la même référence (clef) sur le fichier "de travail" d'ou l'utilisateur rentre cette référence?

J'ai essayé dans un premier temps avec une fonction RechercheV() mais cela me renvois toujours la même valeur( celle de la première ligne)...C'est pour quoi j'ai essayé de créer une macro mais hélas je n'y parviens pas.

Je vous remercie par avance.

Sylvain

5 réponses

  1. ThauTheme Messages postés 1564 Statut Membre 160
     
    Bonjour Sylain,

    Pas très clair tous ça !...
    Dans quel onglet du fichier "base de données"se trouvent les lignes ?
    Dans quel onglet, puis dans quelle cellule cet onglet l'utilisateur rentre-t-il la référence ?
    À partir de quelle cellule doit-on copier les lignes ?
    Le copier/coller se fera via un bouton ou à l'édition de la fameuse cellule ?

    0
  2. Bendit0044 Messages postés 8 Statut Membre
     
    Bonjour ThauTheme,

    Le fichier "base de données" se trouve à l'adresse suivante
    C:\Users\10147920\Desktop\Lean project\Miniflow\DataBase Part Price.xlsx
    L'onglet dans lequel il se trouve est le seul du fichier et il se nomme "DataBase".

    La référence se trouve dans le fichier C:\Users\10147920\Desktop\Lean project\Lean Project - SB.xlms
    dans l'onglet "General"
    Dans la cellule D23.

    J'aimerai copier les lignes dans l'onglet "Calcul prix pièce" à partir de la cellule B17 (Cet onglet est dans le fichier Lean Project - SB.xlms).

    Je pensais mettre un bouton et lancer la macro une fois la saisie terminée.

    Voila j'espère que c'est un peu plus clair.

    Merci encore.

    Sylvain
    0
  3. ThauTheme Messages postés 1564 Statut Membre 160
     
    Bonsoir Sylvain, bonsoir le forum,

    Le code ci-dessous est à placer dans l'onglet General. C'est la macro événementielle Change qui va réagir automatiquement à chaque changement dans cet onglet. Cela évite un bouton...
    J'ai utilisé un filtre avancé qui va écrire des données à partir de AA1 de l'onglet DataBase puis va les effacer. Attention ! Si ces cellules contiennent déjà des valeurs il faudra modifié le code...
    Tu tapes la référence dans la cellule D23 de l'onglet General et automatiquement le copier/coller des lignes contenant cette référence se fait à partir de B17 de l'onglet Calcul prix pièce.

    Le code :
    Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
    Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
    Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
    Dim CS As Workbook 'déclare la variable CS (Classeur Source)
    Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
    Dim PL As Range 'déclare la variable PL (PLage)
    
    If Target.Address <> "$D$23" Then Exit Sub 'si le changement a lieu ailleurs que dans la cellule D23, sort de la procédure
    Set CD = ThisWorkbook 'définit le classeur destination CD
    Set OD = CD.Sheets("Calcul prix pièce") 'définit l'onglet destination OD
    On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
    Set CS = Workbooks("DataBase Part Price.xlsx") 'définit le classeur source (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 'efface l'erreur
        Workbooks.Open ("C:\Users\10147920\Desktop\Lean project\Miniflow\DataBase Part Price.xlsx") 'ouvre le classeur
        Set CS = ActiveWorkbook 'définit le classeur source CS
    End If 'fin de la condition
    On Error GoTo 0 'annule la gestion des erreurs
    Set OS = CS.Sheets("DataBase") 'définit l'onglet source OS
    OD.Range("B17").CurrentRegion.ClearContents 'efface d'éventuelles ancienne données
    If Target.Value = "" Then Exit Sub 'si D23 est efacée, sort de la procédure
    Set PL = OS.Range("A1").CurrentRegion 'définit la plage PL (tu ne m'as pas dit où commençaient les donnés j'ai pris A1, tu adapteras)
    PL.Rows(1).Copy OS.Range("AA1") 'copie en AA1 la première ligne de la plage PL
    OS.Range("AA2") = Target.Value 'copie en AA2 la valeur éditée dans D23 (cellule cible)
    On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
    'filtre avancé de la plage PL par rapport au critère édité en D23 (=AA2), renvoyé à partir de la cellule B17 de l'onglet destination OD
    PL.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=OS.Range( _
        "AA1:AC2"), CopyToRange:=OD.Range("B17"), Unique:=False 'si aucune donnée ne correspond au critère, cela génère une erreur)
    OS.Range("AA1").CurrentRegion.Clear 'efface les données qui ont permis le filtre avancé
    End Sub


    0
  4. Bendit0044 Messages postés 8 Statut Membre
     
    Bonjour ThauTheme,

    Je te remercie pour ton code, il fonctionne parfaitement.

    Merci beaucoup de ton aide.

    Sylvain
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Bendit0044 Messages postés 8 Statut Membre
     
    Bonjour ThauTheme,

    Est ce qu'il est possible de modifier ton cade pour réaliser une seconde recherche depuis le cellule D24.

    J'ai essayé de le faire, mais je ne parviens a rien...

    Je te remercie d'avance,

    Sylvain
    0