Convertir une formule Excel en code vba

Résolu/Fermé
HM - 11 sept. 2020 à 10:11
HM_1234 Messages postés 2 Date d'inscription vendredi 11 septembre 2020 Statut Membre Dernière intervention 11 septembre 2020 - 11 sept. 2020 à 12:02
Bonjour,

Plutôt novice en VBA , j'aimerai automatiser un fichier mais je bloque sur une partie.
J'ai une formule Excel (Matricielle)sur toute une colonne, que je voudrais convertir en code.

En C3
'=IFERROR(LEFT(IF(A3="","",IFERROR(INDEX($A3:$A$100,SMALL(IF($B2:$B$100=$B2,ROW($A3:$A$100)-(ROW()-1)),2)),"Inconnue")),12),"")
En C6
'=IFERROR(LEFT(IF(A6="","",IFERROR(INDEX($A6:$A$100,SMALL(IF($B5:$B$100=$B5,ROW($A6:$A$100)-(ROW()-1)),2)),"Inconnue")),12),"")
En C9
=IFERROR(LEFT(IF(A9="","",IFERROR(INDEX($A9:$A$100,SMALL(IF($B8:$B$100=$B8,ROW($A9:$A$100)-(ROW()-1)),2)),"Inconnue")),12),"")
En C12
'=IFERROR(LEFT(IF(A12="","",IFERROR(INDEX($A12:$A$100,SMALL(IF($B11:$B$100=$B11,ROW($A12:$A$100)-(ROW()-1)),2)),"Inconnue")),12),"")
,...


Dans la colonne "B" j’ai deux valeurs possible LM1_ ou LM_2
A partir de la 1er valeur de la colonne B, ici B3 = « LM_1 », j’aimerai recherche la 1er valeur suivante = à B3 (1er valeur = LM_1 se trouve en B9) et renvoyer en C3 la valeur de la cellule A9
A9 = 97066595. Je dois donc retrouver en A3 la valeur 97066595.
Ensuite passer à B6. Si B6 = LM_2, ke recherche la 1er valeur de la colonne B = LM_2, elle se trouve en B15, je renvoie en C6 la valeur de A15. A15 = 219738 donc C6 doit être = à A15

Et ainsi de suite.

B9 = LM_1 prochaine valeur = à LM_1 est en B12, valeur à renvoyer en C9 (275029) = A12(275029).
B12 = LM_1 prochaine valeur = à LM_1 est en B18, valeur à renvoyer en C12(318071) = A18(318071).
B15 = LM_2 prochaine valeur = à LM_2 est en B45, valeur à renvoyer en C15(5659) = A45(5659).

Et ainsi de suite, ...

Merci pour votre aide.

HM
A voir également:

3 réponses

yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
11 sept. 2020 à 10:20
bonjour, c'est chaque fois un peu plus simple et plus fiable à faire si on peut se baser sur un fichier exemple.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
11 sept. 2020 à 10:34
je propose ceci:
Private Sub LM()
Dim b As Range, bb As Range
Set b = ActiveSheet.[B3]
Do While b <> ""
    Set bb = b.Offset(3)
    Do While bb <> "" And bb <> b
        Set bb = bb.Offset(3)
    Loop
    If bb = b Then
        b.Offset(0, 1) = bb.Offset(0, -1)
    End If
    Set b = b.Offset(3)
Loop
End Sub
0
HM_1234 Messages postés 2 Date d'inscription vendredi 11 septembre 2020 Statut Membre Dernière intervention 11 septembre 2020
11 sept. 2020 à 10:43
Bonjour,

je suis nouveau sur le site. Je ne trouve pas le moyen d’insérer le fichier. Peut-être pourriez-vous m'aider.

Je viens de tester le code. Il ne se passe rien.

Merci

hm
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
11 sept. 2020 à 11:51
pour partager un fichier, il faut le publier sur internet (cjoint.com, google drive, ...), et partager le lien ici.
0
HM_1234 Messages postés 2 Date d'inscription vendredi 11 septembre 2020 Statut Membre Dernière intervention 11 septembre 2020
11 sept. 2020 à 12:02
J'ai trouvé pourquoi votre code ne fonctionne pas avec mon fichier.
En fait il est parfait.
Le pb vient du fait que j'utilise des cellules fusionnées colonne B.
Apres modif du format, tout fonctionne parfaitement.

Merci pour votre aide.

HM
0