Recherche cellules successives conditionnant un programme VBA

Résolu
Nico-lpz Messages postés 8 Statut Membre -  
Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour tout le monde, je débute sur VBA et ainsi je ne maitrise pas toutes les subtilités de celui-ci. Je viens donc demander votre aide pour simplifier mon problème.
Dans mon excel, j'ai une première feuille sur laquelle je peux saisir 3 variables (Ti, Ta, HTC qui sont des nombres) dont les cellules se suivent (dans une colonne).
Ti 5
Ta 40
HTC 30
Ma deuxième feuille est une base de données dans laquelle on retrouve les 3 cellules (Ti,Ta,HTC) avec des valeurs fixes et un tableau de données correspondant à ces variables.
Je voudrais que ces 3 cellules (sheet1) me permettent de chercher dans toute ma sheet2 les données correspondantes à ces valeurs.
Cela donnerait quelque chose comme ça : cherche dans sheet2, si 3 cellules (sheet2) qui se suivent (colonne) sont égales aux 3 cellules de la sheet1, renvoyer le tableau correspondant.

Actuellement j'ai créé une macro à base de 'if' qui fonctionne comme je le souhaite mais je dois prendre individuellement chaque groupe de cellules sur sheet2 pour que ca fonctionne. Etant donné que j'ai des centaines de tableaux je ne peux pas faire ça sans avoir un code très long et répétitif. Ici je ne l'ai fait que pour 2 tableaux.

 
Sub macroA()
If Sheets("Sheet1").Range("D8") = Sheets("Sheet2").Range("D5") And Sheets("Sheet1").Range("D9") = Sheets("Sheet2").Range("D6") And Sheets("Sheet1").Range("D10") = Sheets("Sheet2").Range("D7") Then
    Sheets("Sheet2").Select
    Range("C8:F12").Select
    Selection.Copy
    Sheets("Sheet1").Select
    Range("C15:F19").Select
    ActiveSheet.Paste
End If

If Sheets("Sheet1").Range("D8") = Sheets("Sheet2").Range("D15") And Sheets("Sheet1").Range("D9") = Sheets("Sheet2").Range("D16") And Sheets("Sheet1").Range("D10") = Sheets("Sheet2").Range("D17") Then
    Sheets("Sheet2").Select
    Range("C18:F22").Select
    Selection.Copy
    Sheets("Sheet1").Select
    Range("C15:F19").Select
    ActiveSheet.Paste
End If
End Sub


Comment faire pour raccourcir ce programme?

Je vous remercie de votre attention

2 réponses

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    Bonjour,

    Essaies ce code :
    Option Explicit
    Sub macroA()
    Const s1 As String = "Ti"
    Const s2 As String = "Ta"
    Const s3 As String = "HTC "
    Dim c1 As Range
    Dim c2 As Range
    Dim r1 As Range
    Dim r2 As Range
    Dim a2 As String
    Dim ok As Boolean
      Set r1 = Worksheets("Sheet1").Range("C15:F19")
      Set c1 = Worksheets("Sheet1").Range("D8")
      r1.Clear
      Set r2 = Worksheets("Sheet2").UsedRange
      Set c2 = r2.Find(s1, , xlValues, xlWhole)
      If Not c2 Is Nothing Then
        a2 = c2.Address
        Do
          ok = c2.Offset(1).Formula = s2
          ok = ok And c2.Offset(2).Formula = s3
          ok = ok And c2.Offset(0, 1).Value = c1.Value
          ok = ok And c2.Offset(1, 1).Value = c1.Offset(1).Value
          ok = ok And c2.Offset(2, 1).Value = c1.Offset(2).Value
          If ok Then
            c2.Offset(3).Resize(r1.Rows.Count, r1.Columns.Count).Copy r1
            Exit Do
          End If
          Set c2 = r2.FindNext(c2)
        Loop While c2.Address <> a2
      End If
    End Sub
    1
    1. Nico-lpz Messages postés 8 Statut Membre
       
      Merci beaucoup Patrice33740, cela marche parfaitement, je n'ai pas compris toutes les subtilités de ce programme pour le moment mais il m'est d'une grande aide, je te remercie d'avoir pris le temps de m'aider.

      Cordialement
      Nicolas
      0
    2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
       
      Bonjour,

      Je trouve que l'aide VBA est très explicite,il permet de décortiquer chaque mot du langage. Pour y accéder, il suffit de mettre le curseur texte sur le mot et de taper F1.

      Voici aussi un excellent cours VBA (pour débutants, mais aussi pour les autres) :
      ftp://ftp-developpez.com/bidou/Cours/VBA/formationVBA.pdf

      Cdlt
      Patrice
      0
  2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    0
    1. Nico-lpz Messages postés 8 Statut Membre
       
      Merci pour l'information. En effet, je ne savais pas comment vous mettre à disposition mon exemple.

      Ci-joint le lien de mon exemple de programmation et son application : https://www.cjoint.com/c/FEqoazMF6Ee
      0