Excel-VBA: ceci pour la boucle LOOPS trop souvent avec les conditions IF / IfElse

Ce code à partir de maintenant:

Sub copy_paste() Worksheets(1).Activate Dim ch As Long Dim c As Variant Dim d As Variant Dim v As Range Dim w As Range Dim brow As Long Dim crow As Long Dim cc As Variant Set w = Sheets(1).Range("E:E") brow = w(w.Cells.Count).End(xlUp).Row Set w = Range(w(2), w(brow)) Set v = Sheets(1).Range("G:G") brow = v(v.Cells.Count).End(xlUp).Row Set v = Range(v(2), v(brow)) For Each c In v For Each d In w d = d.Text bbv1 = " QR " bbv2 = " HCPI " If InStr(1, d, "mini") Then c = Mid(c, 1, 5) & " <INDEX>" & bbv2 '& c.Offset(0, 3) 'Debug.Print (c) ElseIf InStr(1, d, "ix") Then 'Debug.Print (c) c = Mid(c, 1, 4) & " <INDEX>" & bbv2 'Debug.Print (c) Else c = Mid(c, 1, 4) & " <CMDTY>" & bbv2 'Debug.Print (c) End If Debug.Print (c) Next d Next c End Sub 

Qui produit cette sortie:

 Edz5 <CMDTY> HCPI Edz5 <CMDTY> HCPI Edz5 <INDEX> HCPI Edz5 <INDEX> HCPI Edz5 <INDEX> HCPI Edz5 <INDEX> HCPI Edz5 <CMDTY> HCPI Edz5 <CMDTY> HCPI Edz5 <CMDTY> HCPI Edz5 <CMDTY> HCPI Edz5 <CMDTY> HCPI Edz5 <CMDTY> HCPI Edz5 <CMDTY> HCPI Hcn5 <CMDTY> HCPI Hcn5 <CMDTY> HCPI Hcn5 <INDEX> HCPI Hcn5 <INDEX> HCPI Hcn5 <INDEX> HCPI Hcn5 <INDEX> HCPI Hcn5 <CMDTY> HCPI Hcn5 <CMDTY> HCPI Hcn5 <CMDTY> HCPI Hcn5 <CMDTY> HCPI Hcn5 <CMDTY> HCPI Hcn5 <CMDTY> HCPI Hcn5 <CMDTY> HCPI Mesu <CMDTY> HCPI Mesu <CMDTY> HCPI Mesu <INDEX> HCPI Mesu <INDEX> HCPI Mesu <INDEX> HCPI Mesu <INDEX> HCPI Mesu <CMDTY> HCPI Mesu <CMDTY> HCPI Mesu <CMDTY> HCPI Mesu <CMDTY> HCPI Mesu <CMDTY> HCPI Mesu <CMDTY> HCPI Mesu <CMDTY> HCPI Ptu5 <CMDTY> HCPI Ptu5 <CMDTY> HCPI Ptu5 <INDEX> HCPI Ptu5 <INDEX> HCPI Ptu5 <INDEX> HCPI Ptu5 <INDEX> HCPI Ptu5 <CMDTY> HCPI Ptu5 <CMDTY> HCPI Ptu5 <CMDTY> HCPI Ptu5 <CMDTY> HCPI Ptu5 <CMDTY> HCPI Ptu5 <CMDTY> HCPI Ptu5 <CMDTY> HCPI Rtau <CMDTY> HCPI Rtau <CMDTY> HCPI Rtau <INDEX> HCPI Rtau <INDEX> HCPI Rtau <INDEX> HCPI Rtau <INDEX> HCPI Rtau <CMDTY> HCPI Rtau <CMDTY> HCPI Rtau <CMDTY> HCPI Rtau <CMDTY> HCPI Rtau <CMDTY> HCPI Rtau <CMDTY> HCPI Rtau <CMDTY> HCPI Smu5 <CMDTY> HCPI Smu5 <CMDTY> HCPI Smu5 <INDEX> HCPI Smu5 <INDEX> HCPI Smu5 <INDEX> HCPI Smu5 <INDEX> HCPI Smu5 <CMDTY> HCPI Smu5 <CMDTY> HCPI Smu5 <CMDTY> HCPI Smu5 <CMDTY> HCPI Smu5 <CMDTY> HCPI Smu5 <CMDTY> HCPI Smu5 <CMDTY> HCPI Tyu5 <CMDTY> HCPI Tyu5 <CMDTY> HCPI Tyu5 <INDEX> HCPI Tyu5 <INDEX> HCPI Tyu5 <INDEX> HCPI Tyu5 <INDEX> HCPI Tyu5 <CMDTY> HCPI Tyu5 <CMDTY> HCPI Tyu5 <CMDTY> HCPI Tyu5 <CMDTY> HCPI Tyu5 <CMDTY> HCPI Tyu5 <CMDTY> HCPI Tyu5 <CMDTY> HCPI Ubu5 <CMDTY> HCPI Ubu5 <CMDTY> HCPI Ubu5 <INDEX> HCPI Ubu5 <INDEX> HCPI Ubu5 <INDEX> HCPI Ubu5 <INDEX> HCPI Ubu5 <CMDTY> HCPI Ubu5 <CMDTY> HCPI Ubu5 <CMDTY> HCPI Ubu5 <CMDTY> HCPI Ubu5 <CMDTY> HCPI Ubu5 <CMDTY> HCPI Ubu5 <CMDTY> HCPI Vgu5 <CMDTY> HCPI Vgu5 <CMDTY> HCPI Vgu5 <INDEX> HCPI Vgu5 <INDEX> HCPI Vgu5 <INDEX> HCPI Vgu5 <INDEX> HCPI Vgu5 <CMDTY> HCPI Vgu5 <CMDTY> HCPI Vgu5 <CMDTY> HCPI Vgu5 <CMDTY> HCPI Vgu5 <CMDTY> HCPI Vgu5 <CMDTY> HCPI Vgu5 <CMDTY> HCPI Wnu5 <CMDTY> HCPI Wnu5 <CMDTY> HCPI Wnu5 <INDEX> HCPI Wnu5 <INDEX> HCPI Wnu5 <INDEX> HCPI Wnu5 <INDEX> HCPI Wnu5 <CMDTY> HCPI Wnu5 <CMDTY> HCPI Wnu5 <CMDTY> HCPI Wnu5 <CMDTY> HCPI Wnu5 <CMDTY> HCPI Wnu5 <CMDTY> HCPI Wnu5 <CMDTY> HCPI Xbu5 <CMDTY> HCPI Xbu5 <CMDTY> HCPI Xbu5 <INDEX> HCPI Xbu5 <INDEX> HCPI Xbu5 <INDEX> HCPI Xbu5 <INDEX> HCPI Xbu5 <CMDTY> HCPI Xbu5 <CMDTY> HCPI Xbu5 <CMDTY> HCPI Xbu5 <CMDTY> HCPI Xbu5 <CMDTY> HCPI Xbu5 <CMDTY> HCPI Xbu5 <CMDTY> HCPI Xmu5 <CMDTY> HCPI Xmu5 <CMDTY> HCPI Xmu5 <INDEX> HCPI Xmu5 <INDEX> HCPI Xmu5 <INDEX> HCPI Xmu5 <INDEX> HCPI Xmu5 <CMDTY> HCPI Xmu5 <CMDTY> HCPI Xmu5 <CMDTY> HCPI Xmu5 <CMDTY> HCPI Xmu5 <CMDTY> HCPI Xmu5 <CMDTY> HCPI Xmu5 <CMDTY> HCPI Z u5 <CMDTY> HCPI Z u5 <CMDTY> HCPI Z u5 <INDEX> HCPI Z u5 <INDEX> HCPI Z u5 <INDEX> HCPI Z u5 <INDEX> HCPI Z u5 <CMDTY> HCPI Z u5 <CMDTY> HCPI Z u5 <CMDTY> HCPI Z u5 <CMDTY> HCPI Z u5 <CMDTY> HCPI Z u5 <CMDTY> HCPI Z u5 <CMDTY> HCPI 

Voici mes données dans Cells E1: G14

 Issue Name Ticker F/c 90day euro$ futr dec15 Edz5 xcme F/c h-shares idx fut jul15 Hcn5 xhkf F/c mini msci emg mkt sep15 Mesu5ifus F/c s&p/tsx 60 ix fut sep15 Ptu5 xmod F/c russell 2000 mini sep15 Rtau5ifus F/c swiss mkt ix futr sep15 Smu5 xeur F/c us 10yr note(cbt) sep15 Tyu5 xcbt F/c euro buxl 30y bnd sep15 Ubu5 xeur F/c euro stoxx 50 sep15 Vgu5 xeur F/c us ultra bond(cbt sep15 Wnu5 xcbt F/c gasoline rbob fut sep15 Xbu5 xnym F/c aust 10yr bond fut sep 15 Xmu5 xsfe F/c ftse 100 idx fut sep15 Z u5 ifll 

Mais c'est ce que j'aimerais que la sortie soit:

 Edz5 <CMDTY> HCPI Hcn5 <INDEX> HCPI Mesu5 <INDEX> HCPI Ptu5 <INDEX> HCPI Rtau5 <INDEX> HCPI Smu5 <INDEX> HCPI Tyu5 <CMDTY> HCPI Ubu5 <CMDTY> HCPI Vgu5 <CMDTY> HCPI Wnu5 <CMDTY> HCPI Xbu5 <CMDTY> HCPI Xmu5 <CMDTY> HCPI Z u5 <CMDTY> HCPI 

J'ai essayé de mettre un Next c après chaque instruction if mais cela ne fonctionne pas.

Je pense que ce que vous devez faire pour résoudre ceci est une "sortie" dans chacune des déclarations If, de sorte que si elle trouve une correspondance ou un "vrai", elle quittera le et ne se comparera plus sur la boucle D interne . Vous devrez également changer les commands d'printing avant cette sortie pour ou avant que la prochaine boucle commence.

Pour chaque c In v

  For Each d In w d = d.Text bbv1 = " QR " bbv2 = " HCPI " If InStr(1, d, "mini") Then c = Mid(c, 1, 5) & " <INDEX>" & bbv2 '& c.Offset(0, 3) Debug.Print (c) Exit For ElseIf InStr(1, d, "ix") Then 'Debug.Print (c) c = Mid(c, 1, 4) & " <INDEX>" & bbv2 Debug.Print (c) Exit For Else c = Mid(c, 1, 4) & " <CMDTY>" & bbv2 Debug.Print (c) Exit For End If 'Debug.Print (c) Next d Next c