XL 2016 Fonction equiv en VBA

KTM

XLDnaute Impliqué
Salut chers tous
Je voudrais élaborer une macro pour lancer une recherche dans une base
j'ai fais ceci mais apparemment c'est mal élaboré ( Je suis apprenti VBA)
Pouvez vous me donner un coup de pouce ?
NB : (On peut le faire avec la combinaison index Equiv mais je voudrais essayé VBA)

Sub recherche()
Dim x As Integer
Set x = Application.Match(Range("G2"), Range("A1:A100"), 0)
If Range("A" & Rows.Count).End(xlUp).Row > 2 Then
If Not x Is Nothing Then
Range("G3").Value = Cells(x, 2)
Range("G4").Value = Cells(x, 3)
Range("G5").Value = Cells(x, 4)
End If
End If
End Sub
 

Pièces jointes

  • Classeur1.xlsm
    15.8 KB · Affichages: 20

Dranreb

XLDnaute Barbatruc
Bonjour.
VB:
Sub Recherche()
   Dim X As Variant
   X = Application.Match(Range("G2"), Range("A1:A100"), 0)
   If Range("A" & Rows.Count).End(xlUp).Row > 2 Then
   If Not IsError(X) Then
      Range("G3").Value = Cells(X, 2)
      Range("G4").Value = Cells(X, 3)
      Range("G5").Value = Cells(X, 4)
      End If
   End Sub
L'instruction Set ne peut être utilisée que pour initialiser un objet, ou à la rigueur un Variant, comme devant se référer à un autre objet.
 

KTM

XLDnaute Impliqué
Bonjour.
VB:
Sub Recherche()
   Dim X As Variant
   X = Application.Match(Range("G2"), Range("A1:A100"), 0)
   If Range("A" & Rows.Count).End(xlUp).Row > 2 Then
   If Not IsError(X) Then
      Range("G3").Value = Cells(X, 2)
      Range("G4").Value = Cells(X, 3)
      Range("G5").Value = Cells(X, 4)
      End If
   End Sub
L'instruction Set ne peut être utilisée que pour initialiser un objet, ou à la rigueur un Variant, comme devant se référer à un autre objet.
Grand merci c'est très Exact
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, KTM, Calvus, Dranreb

Juste pour le fun, une autre syntaxe possible
VB:
Sub Recherche_Bis()
Dim X As Variant
With Application
  .ScreenUpdating = False
  X = .Match(Range("G2"), Range("A1:A100"), 0)
  If Range("A" & Rows.Count).End(xlUp).Row > 2 Then
  If Not IsError(X) Then
  [G3].Resize(3) = .Transpose(Cells(X, 2).Resize(, 3))
  End If
  End If
End With
End Sub

EDITION:
Après la lecture du dernier message celui de job75 (que je salue au passage)
On peut simplifier cette ligne comme ceci
[G3:G5]=.Transpose(Cells(X, 2).Resize(, 3))
 
Dernière édition:

KTM

XLDnaute Impliqué
Bonsoir le fil, KTM, Calvus, Dranreb

Juste pour le fun, une autre syntaxe possible
VB:
Sub Recherche_Bis()
Dim X As Variant
With Application
  .ScreenUpdating = False
  X = .Match(Range("G2"), Range("A1:A100"), 0)
  If Range("A" & Rows.Count).End(xlUp).Row > 2 Then
  If Not IsError(X) Then
  [G3].Resize(3) = .Transpose(Cells(X, 2).Resize(, 3))
  End If
  End If
End With
End Sub
Phenomenal Staple 1600
 

job75

XLDnaute Barbatruc
Bonsoir tout le monde,

En VBA il est souvent plus simple d'utiliser les formules Excel :
VB:
Sub Recherche()
With [G3:G5]
    .Formula = "=IFERROR(VLOOKUP(G$2,A$1:D$100,ROW()-1,0),"""")"
    .Value = .Value
End With
End Sub
A+
 

Statistiques des forums

Discussions
312 205
Messages
2 086 199
Membres
103 156
dernier inscrit
Ludo94130