Copier/Coller de valeurs sous conditions

Résolu/Fermé
Bendit0044 Messages postés 7 Date d'inscription mercredi 22 avril 2015 Statut Membre Dernière intervention 4 novembre 2015 - 1 juin 2015 à 09:53
Bendit0044 Messages postés 7 Date d'inscription mercredi 22 avril 2015 Statut Membre Dernière intervention 4 novembre 2015 - 4 nov. 2015 à 15:26
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
A voir également:

5 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
1 juin 2015 à 17:22
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
Bendit0044 Messages postés 7 Date d'inscription mercredi 22 avril 2015 Statut Membre Dernière intervention 4 novembre 2015
1 juin 2015 à 17:46
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
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
1 juin 2015 à 23:12
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
Bendit0044 Messages postés 7 Date d'inscription mercredi 22 avril 2015 Statut Membre Dernière intervention 4 novembre 2015
2 juin 2015 à 08:41
Bonjour ThauTheme,

Je te remercie pour ton code, il fonctionne parfaitement.

Merci beaucoup de ton aide.

Sylvain
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bendit0044 Messages postés 7 Date d'inscription mercredi 22 avril 2015 Statut Membre Dernière intervention 4 novembre 2015
4 nov. 2015 à 15:26
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