VBA Problème simple de recherche dans une matrice

yannw

XLDnaute Nouveau
Bonjour le forum,

j'ai déjà fait appel à vous il y a quelques temps et vous m'avez grandement aidés, je vous en remercie. J'aurai à nouveaux besoin de vos lumières.

J'ai joint un fichier afin que mes explications soit plus parlantes

Voilà ce que j'aimerais faire:

Sur une feuille excel(Input_trade), j'entre une date, un nom et une quantité.

Sur une deuxième feuille (history_trade) j'ai une matrice avec des dates sur la colonne A (A24:A32) et
des noms sur la ligne 7 (B7:E7).

J'aimerais que chaque fois que j'entre une quantité sur ma première feuille, elle soit automatiquement recopié sur ma deuxième feuille à l'intersection de la date et du nom choisi .


Merci à tous de votre aide !


PS: j'ai déjà tenté avec une formule excel,graphique en rose sur mon exemple à disposition. Mais le résultat n'est pas optimal car à chaque fois que je change de nom,de date ou de quantité. Celle d'avant disparait... C'est la raison pour laquelle je pense qu'un code VBA est indispensable...
 

Pièces jointes

  • example_portfolio.xls
    28.5 KB · Affichages: 83

yannw

XLDnaute Nouveau
Re : VBA Problème simple de recherche dans une matrice

Merci beaucoup pour la rapidité Roger2327,

Je vais travailler sur ce fichier cet après midi! C'est vraiment sympa de m'aider à m'avancer dans mon travail :) Surtout lorsque l on ne maitrise pas le language VBA, c'est difficile d'avancer sans aide, encore merci !

Je vais voir si je trouve pas une solution ou bidouillage pour l histoire des formules, en attendant peut être une suite... ;)
 

ROGER2327

XLDnaute Barbatruc
Re : VBA Problème simple de recherche dans une matrice

Suite...
Ceci préserve les formules des cellules qui ne sont pas modifiées. Car une cellule où on colle une valeur perd nécessairement son éventuelle formule...
Code:
[COLOR="DarkSlateGray"]Dim oTab As Range, oDat()
Dim i As Long, j As Long
Dim k As Long '*
   Set oTab = Sheets("Trade_History").Range("Table")
   oDat = Sheets("Input_Trade").Range("C23:G23").Value
   For i = 2 To oTab.Rows.Count - 1
      If oTab.Cells(1, 1).Offset(i - 1, 0).Value = oDat(1, 1) Then Exit For
   Next i
   For j = 2 To oTab.Columns.Count - 1 Step 3
      If oTab.Cells(1, 1).Offset(0, j - 1).Value = oDat(1, 2) Then Exit For
   Next j
   If i > oTab.Rows.Count Or j > oTab.Columns.Count Then
      MsgBox "Données incorrectes"
   Else
      For k = 0 To 2
         oTab.Cells(i, j + k).Value = oDat(1, 3 + k)
      Next k
   End If
End Sub[/COLOR]
ROGER2327
 

Discussions similaires

Statistiques des forums

Discussions
312 615
Messages
2 090 243
Membres
104 465
dernier inscrit
Motuss