Copier si 2 cellules sont égales

Salut à tous,

Je suis débutante en VBA mais grâce à toutes les réponses que j'ai déjà trouvé ici j'ai pu développé un sur fichier d'analyse de données (que mon boss m'a demandé de développer)

Mais une chose m'échappe encore.

Mon fichier comporte plusieurs onglets. Un premier dans lequel on rentre des plans de plaque 96 puits (plan), un deuxième dans lequel on rentre les données expérimentales (Raw data) et un 3° qui compile ra les données des 2 onglets (results).

Mon problème est que le nombre de plaque dans Raw data n'est pas toujours égal au nombre de plaque dans le plan.

Je voudrais donc ajouter une condition qui dit que si le N° de plaque Raw data = N° plaque plan alors il faut copier les données dans la plaque correspondante de l'onglet results, et si non rechercher tester les plaques suivantes jusqu'à trouver la bonne.

J'ai essayé 2-3 trucs mais rien n'a fonctionné jusqu'à maintenant, après étant novice je n'ai surement pas penser à tout.

Une idée de comment je peux faire ça ?

Merci,

Marie

Bonjour Marie et

Pas certain d'avoir bien compris, mais une simple RECHERCHEV ne ferait-elle pas l'affaire ?

Pour augmenter tes chances d'obtenir une (autre) réponse, pense à joindre un fichier représentatif de l'existant (sans données confidentielles).

Merci de ta réponse.

Non la recherchev ne fonctionne pas...

Je joins un exemple de fichier. en gros je voudrais que l'onglet result compile les infos [c] depuis l'onglet plan et les valeurs observées qui sont dans l'onglet raw data. Et qu'il prenne en compte les plaques vides

58results.xlsx (26.94 Ko)

Re-bonjour,

Un fichier c'est déjà mieux!

Maintenant, il faudrait préciser ce que tu appelles "compiler" les données des deux feuilles ...

  • en colonne C de la feuille "results", tu transposes les données de la première ligne de chaque tableau de la feuille "plan" (mais pourquoi la première ligne ? Uniquement celle-là ?)
  • les tableaux de la feuille "raw data" sont vides ... il faut aussi "transposer" chaque tableau "Plate" dans la feuille "results" ?
  • qu'entends-tu par "Et qu'il prenne en compte les plaques vides" ?
  • si le nombre de plaques des 2 premières feuilles n'est pas le même ... on fait quoi ??

Le mieux aurait été de laisser les données de 2-3 tableaux, en feuille "raw data" et d'inscrire "à la main" ce qui devrait apparaître en "results", le tout agrémenté d'explications bien concrètes (dans tel cas, on copie telles données, pour telles raisons, à tel endroit)

Tu connais bien ton fichier ... nous, absolument pas !

En colonne C de la feuille "results", tu transposes les données de la première ligne de chaque tableau de la feuille "plan" (mais pourquoi la première ligne ? Uniquement celle-là ?)

=> Dans la feuille plan je souhaite récupéré le nom de la souche et la première ligne du tableau uniquement

les tableaux de la feuille "raw data" sont vides ... il faut aussi "transposer" chaque tableau "Plate" dans la feuille "results" ?

=> j'ai remplis seulement quelques cellules, mais j'aimrais copier l'ensemble des cellules de chaque "plate" (pour la plate1 range C4:N11)

qu'entends-tu par "Et qu'il prenne en compte les plaques vides" ?

si le nombre de plaques des 2 premières feuilles n'est pas le même ... on fait quoi ??

=> En fait dans l'onglet "plan", j'ai une première macro qui rempli les tableaux en fonction des produit,souches,.... Mais le nombre de tableau est fixe (ici 6 alors que seulement 4 sont remplis et seront utilisés pour la manipulation).

Le fichier raw data obtenu après la manipulation me donne les résultats sous le format de l'onglet "raw data" c'est à dire seulement les 4 plaques (tableaux) utilisées pendant la manipulation.

Du coup dans l'onglet "results" j'aimerais que le numéro de chaque plaque "raw data" soit associé à un numéro de plaque "plan" que qu'on trouve les infos de concentration et de valeurs lues.

Dans l'idéal, les plaques vides de l'onglet "plan" n’apparaîtraient pas dans l'onglet "results"

Voilà j'espère que c'est plus clair...

J'ai réussi à écrire un truc qui fonctionne mais qui est assez long et qui ressemble à ça multiplié par le nombre de plaque à tester

If Worksheets("raw data").Range("B5").Value = Worksheets("plan_plaque").Range("B3").Value Then

Sheets("Raw data").Select

Range("C7:N14").Select

Selection.Copy

Sheets("Vers graphpad").Select

Range("D6").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=True

ElseIf Worksheets("raw data").Range("B5").Value = Worksheets("plan_plaque").Range("B17").Value Then

Sheets("Raw data").Select

Range("C7:N14").Select

Selection.Copy

Sheets("Vers graphpad").Select

Range("D25").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=True

ElseIf Worksheets("raw data").Range("B5").Value = Worksheets("plan_plaque").Range("B31").Value Then

Sheets("Raw data").Select

Range("C7:N14").Select

Selection.Copy

Sheets("Vers graphpad").Select

Range("D44").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=True

ElseIf Worksheets("raw data").Range("B5").Value = Worksheets("plan_plaque").Range("B45").Value Then

Sheets("Raw data").Select

Range("C7:N14").Select

Selection.Copy

Sheets("Vers graphpad").Select

Range("D63").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=True

ElseIf Worksheets("raw data").Range("B5").Value = Worksheets("plan_plaque").Range("B59").Value Then

Sheets("Raw data").Select

Range("C7:N14").Select

Selection.Copy

Sheets("Vers graphpad").Select

Range("D82").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=True

ElseIf Worksheets("raw data").Range("B5").Value = Worksheets("plan_plaque").Range("B73").Value Then

Sheets("Raw data").Select

Range("C7:N14").Select

Selection.Copy

Sheets("Vers graphpad").Select

Range("D101").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=True

Else

End If

Du coup je pense qu'il qu'il y a largement plus simple et moins long du coup je suis toujours preneuse de conseils pour améliorer mon code.

Voilà j'espère que c'est plus clair...

Franchement, si tu te mettais à notre place 2 secondes, tu saurais quoi répondre

Si tu as déjà une macro qui "tourne", il aurait été intéressant de voir si ces opérations-ci ne pouvaient pas s'articuler au code déjà existant.

Avec ce que j'ai compris, ce que j'ai extrapolé, ce que j'ai pressenti, etc, teste le code suivant dans un module standard.

Il reste plein de zones d'ombres ... tu essaieras d'adapter.

Il est impératif que chaque tableau de chaque feuille reste au même emplacement que dans ton exemple!

Sub compil()
    Set plan = Sheets("plan")
    Set rawD = Sheets("raw data")
    nbLignesPlan = plan.Cells(Rows.Count, 1).End(xlUp).Row
    With Sheets("results")
    décal = 1
    For lig = 3 To nbLignesPlan Step 14
        If Application.CountA(plan.Cells(lig, 1).Offset(4, 4).Resize(8, 10)) > 0 Then 'tester si tableau vide
            .Cells(décal, 2) = plan.Cells(lig, 1).Offset(0, 1) 'n° plaque
            .Cells(décal + 1, 1) = plan.Cells(lig, 1).Offset(1, 0) 'nom souche
            .Cells(décal + 5, 3).Resize(12, 1) = Application.Transpose(plan.Cells(lig, 1).Offset(4, 3).Resize(1, 12)) 'première ligne de chaque tableau dans plan
            For x = 2 To 67 Step 13
                If rawD.Cells(x, 2) = plan.Cells(lig, 1).Offset(0, 1) Then 'chaque tableau de raw data si même plaque
                    .Cells(décal + 5, 4).Resize(12, 8) = Application.Transpose(rawD.Cells(x + 2, 3).Resize(8, 12))
                End If
            Next x
            décal = décal + 19
        End If
    Next lig
    End With
End Sub

Merci de ton aide. J'ai pu adapter ton code à mon fichier. Et il est nettement plus court que celui que j'avais écrit

Pour info le code qui tourne je l'ai écrit moi en même temps que je demandais de l'aide.

Je suis partie de rien en fait

Rechercher des sujets similaires à "copier egales"