Recherche cellules successives conditionnant un programme VBA

Résolu/Fermé
Nico-lpz Messages postés 8 Date d'inscription lundi 16 mai 2016 Statut Membre Dernière intervention 19 mai 2016 - 16 mai 2016 à 11:40
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 17 mai 2016 à 14:27
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
A voir également:

2 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
16 mai 2016 à 22:06
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
Nico-lpz Messages postés 8 Date d'inscription lundi 16 mai 2016 Statut Membre Dernière intervention 19 mai 2016
17 mai 2016 à 11:58
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
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
17 mai 2016 à 14:27
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
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
16 mai 2016 à 15:22
0
Nico-lpz Messages postés 8 Date d'inscription lundi 16 mai 2016 Statut Membre Dernière intervention 19 mai 2016
16 mai 2016 à 16:04
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