Code VBA dans Userform Fonction somme.si matricielle

Bonjour,

Je suis nouvelle sur ce forum mais après des heures de recherche, je me vois contrainte de demander l'aide de personnes éclairées.

Je suis actuellement en train de faire un Userform qui me permet d'entrer des données les unes à la suite des autres dans ma première feuille.

- Partant d'une base toute simple pour l'exemple. Un Userform avec une seule Textbox (Tbx_num) et un bouton "valider" qui me permet d'insérer mes données les unes après les autres dans ma feuille 1.

Private Sub CommandButton1_Click()

Maligne = Sheets("feuill1").Range("A65536").End(xlUp).Row + 1

Sheets("feuil1").Range("A" & Maligne) = Me.Tbx_num

End Sub

- Dans une deuxième feuille, ma colonne A comporte des chiffres et la colonne B d'autres chiffres.

MA RECHERCHE : Je souhaiterai, lorsque la valeur de ma textbox arrive dans ma cellule en colonne A (disons A2 sachant que la ligne sera variable):

Si A2 (feuill1) = une valeur de A:A (feuill2)

Alors A3 (feuill1) = valeur B:B (feuill2) de la même ligne que la valeur A:A (feuill2)

J'ai tenté la technique d'incrémentation avec cette formule-ci qui marche très bien dans une cellule Excel

{=SOMME(SI(A4=feuil2!A:A;feuill!B:B;0))}

mais qui ralenti mon Excel et fini par le faire planter.

Merci pour votre aide précieuse...

Béné.

Bonjour,

y a t il possibilité de redondance dans les valeurs ?

Une valeur inscrite en feuil1 colonne A sera unique et est unique en feuille 2 colonne A ?

@ bientôt

LouReeD

Et pour plus de compatibilité vous pouvez écrire la recherche de la dernière ligne comme ceci :

Maligne = Sheets("feuill1").Range("A"&Cells.Rows.Count).End(xlUp).Row + 1

Comme cela au lie de cibler la dernière ligne d'une feuille Excel version antérieur à 2007, vous ciblez bien la dernière lignes existante de la feuille en cours car on compte le nombre de ligne de toutes les cellules : Cells.Rows.count

@ bientôt

LouReeD

Un fichier exemple avec l'utilisation d'EVALUATE qui simule une formule Excel mais sous VBA, la formule utilisée est EQUIV (MATCH sous VBA) :

EQUIV ( VALEUR CHERCHEE ; PLAGE DE RECHERCHE ; 0 ) où 0 vaut pour une recherche de valeur exacte.

Sous VBA la retranscription se fait avec MATCH et des "," en lieu et place des ";".

Le IFERROR est là pour renvoyer 0, comme cela si rien n'est trouvé, 0 est renvoyé par EVALUATE, du coup on test la grandeur de Résultat : si Résultat >0 alors on a trouvé une correspondance et on l'inscrit.

Le "*1" permet de transformer un nombre texte en nombre numérique, car les TextBox c'est du texte, alors on ne sait jamais...

Pour l'exemple "Maligne" vaut 13...

Le code :

Sub LouReeD()

Dim Maligne As Long, Formule As String, Résultat

Maligne = 13

Formule = "=IFERROR(MATCH(" & Sheets("Feuil1").Cells(Maligne, 1).Value * 1 & ",Feuil2!A:A,0),0)"

Résultat = Evaluate(Formule)

If Résultat > 0 Then Sheets("Feuil1").Cells(Maligne + 1, 1).Value = Sheets("Feuil2").Cells(Résultat, 2).Value

End Sub

Le fichier :

@ bientôt

LouReeD

Rechercher des sujets similaires à "code vba userform fonction somme matricielle"