Recherche cellules successives conditionnant un programme VBA
Résolu
Nico-lpz
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
Patrice33740 Messages postés 8561 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.
Comment faire pour raccourcir ce programme?
Je vous remercie de votre attention
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:
- Recherche cellules successives conditionnant un programme VBA
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Verrouiller cellules excel - Guide
2 réponses
Bonjour,
Essaies ce code :
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
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
Ci-joint le lien de mon exemple de programmation et son application : https://www.cjoint.com/c/FEqoazMF6Ee
Cordialement
Nicolas
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