Copier cellules d'une feuile a une autre avec conditions

Résolu/Fermé
fikou Messages postés 7 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 11 février 2019 - 9 févr. 2019 à 06:54
fikou Messages postés 7 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 11 février 2019 - 11 févr. 2019 à 14:23
Bonjour,
J'ai une ancienne base de données dbf que j'ai importé dans Excel.
Cette base est composée de plusieurs tables avec relations.
J'aimerai copier une plage de cellules d'une feuille vers une autre selon condition.
Dans chacune des 2 feuilles j'ai une colonne identique (colonne qui servait de relation dans la base).
Je recherche une formule permettant de copier une plage Feuil1 B1:F1 vers Feuil2 A1:F1 si feuil1 A1 est égal à Feuil2 G2.
Je n'ai pas trouvé de formule sur le web.
Je ne sait pas si c'est possible avec une formule ou si il faut passer par Vba.
Merci d'avance
FikoU
A voir également:

7 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié le 9 févr. 2019 à 08:52
Bonjour


Option Explicit
'-----------------------------------
Sub copier_si()

If Sheets(1).Range("A1") = Sheets(2).Range("G2") Then
Sheets(2).Range("A1:E1") = Sheets(1).Range("B1:F1").Value
End If

End Sub


0
fikou Messages postés 7 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 11 février 2019
10 févr. 2019 à 07:28
Bonjour,
Merci pour ce bout de code.
Ce que j'ai oublié de dire c'est que la colonne de la feuil1 est une clé unique et pas dans la feuil2 qui a plusieurs occurrences et que j'ai 300 lignes à copier.
Donc il faut que j'implémente une boucle. Je connais le VB mais pas trop le VBA et les spécificité Excel.
Il faut sortir de la boucle dès la première ligne vide de feuil2 et c'est la dessus que je sèche.
Bon dimanche
FikoU
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
11 févr. 2019 à 11:05
bonjour

pour la première ligne vide d'une colonne

ligvid=columns("A")Find(what:="",after:=Range("A1"), lookin:=xlvalues).Row

en supposant qu'il y ait quelque chose dans A1 et pas de cellule vide avant la dernière ligne occupée dans la colonne
0
fikou Messages postés 7 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 11 février 2019
11 févr. 2019 à 11:39
Merci Michel,
J'ai tenter d'écrire un bout de code mais cela ne fonctionne pas

Option Explicit
'-----------------------------------
Sub copier_si()

Dim i, j As Integer

j = 2
i = 2
While i <> 289
If Sheets(2).Range("A" & i) = Sheets(1).Range("G" & j) Then
Sheets(1).Range("A" & j & ":F" & j).Value = Sheets(2).Range("A" & i & ":F" & i).Value
j = j + 1
Else
i = i + 1
End If
Wend

End Sub

A bientôt et encore merci
FikoU
0

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

Posez votre question
fikou Messages postés 7 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 11 février 2019
11 févr. 2019 à 11:41
En fait je n'ai plus d'erreur mais rien ne se copie ?
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
11 févr. 2019 à 14:11
Pourquoi ne pas créer une requete dans ta base entre la clé primaire et la clé étrangère et transporter le résultat dans Excel ?
0
fikou Messages postés 7 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 11 février 2019
11 févr. 2019 à 14:23
Je ne connais pas les requêtes sous Excel……
Si tu as une piste cela m'intéresse.

J'ai réussi avec ce code :

Option Explicit
'-----------------------------------
Sub copier_si()

Dim i, j As Integer

j = 2
i = 2

While i <> 296
While Sheets("DB_PINN").Range("A" & i) = Sheets("DB_MILL").Range("G" & j)

''On copie
Sheets(1).Range("A" & j & ":F" & j).Value = Sheets(2).Range("A" & i & ":F" & i).Value
j = j + 1
Wend
i = i + 1
Wend

End Sub

Je cherchais du compliqué mais pour finir c'est asser simple.
Je ne programme pas souvent donc la machine est longue à relancer

Un grand merci à toi
@+FikoU
0