Copier cellules d'une feuile a une autre avec conditions

Résolu
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

7 réponses

  1. Contributeur
    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
    1. 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
      1. Contributeur
        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
        1. 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
          1. En fait je n'ai plus d'erreur mais rien ne se copie ?
            0
            1. Contributeur
              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
              1. 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