Transformer formule "Si", en fonction VBA

Bonjour,

J'aurais besoin d'un coup de pouce pour transformer une formule "si", en fonction vba, pour ensuite l'inclure dans une macro.

Possible de m'aider? Voici la formule en question:

=SI(B2="QUE_LVL1_IR5560";"CAYQB";
SI(B2="Canon iR-ADV 4245/4251 PCL6";"CAYUL";
SI(B2="Canon iR-ADV 8285/8295 PCL6";"CAYUL";
SI(B2="Canon_accMTL";"CAYUL";
SI(B2="Canon_salesmtl";"CAYUL";
SI(B2="Montreal Canon Ocean";"CAYUL";
SI(B2="MTR_CANON_CUSTOMS";"CAYUL";
SI(B2="MTR_LVL2_IRADV6275_AIR";"CAYUL";
SI(B2="VAN_LVL1_IR6255_CUSTOMS";"CAYVR";
SI(B2="VAN_LVL1_IR6255_SALES";"CAYVR";
SI(B2="iR-Adv C5560III-Winnepeg OutPut";"CAYWG";
SI(B2="CAL_LVL1_IR6275";"CAYYC";
SI(B2="TOR_LVL1_IR8285";"CAYYZ";
SI(B2="TOR_LVL2_IR5255";"CAYYZ";" "))))))))))))))

Merci infiniment!

Bonsoir,

2 solutions :

Range("B3").FormulaLocal = "=SI(B2=""QUE_LVL1_IR5560"";""CAYQB"";SI(B2=""Canon iR-ADV 4245/4251 PCL6"";""CAYUL"";SI(B2=""Canon iR-ADV 8285/8295 PCL6"";""CAYUL"";SI(B2=""Canon_accMTL"";""CAYUL"";SI(B2=""Canon_salesmtl"";""CAYUL"";SI(B2=""Montreal Canon Ocean"";""CAYUL"";SI(B2=""MTR_CANON_CUSTOMS"";""CAYUL"";SI(B2=""MTR_LVL2_IRADV6275_AIR"";""CAYUL"";SI(B2=""VAN_LVL1_IR6255_CUSTOMS"";""CAYVR"";SI(B2=""VAN_LVL1_IR6255_SALES"";""CAYVR"";SI(B2=""iR-Adv C5560III-Winnepeg OutPut"";""CAYWG"";SI(B2=""CAL_LVL1_IR6275"";""CAYYC"";SI(B2=""TOR_LVL1_IR8285"";""CAYYZ"";SI(B2=""TOR_LVL2_IR5255"";""CAYYZ"";"" ""))))))))))))))"

Range("B4").Formula = "=IF(B2=""QUE_LVL1_IR5560"",""CAYQB"",IF(B2=""Canon iR-ADV 4245/4251 PCL6"",""CAYUL"",IF(B2=""Canon iR-ADV 8285/8295 PCL6"",""CAYUL"",IF(B2=""Canon_accMTL"",""CAYUL"",IF(B2=""Canon_salesmtl"",""CAYUL"",IF(B2=""Montreal Canon Ocean"",""CAYUL"",IF(B2=""MTR_CANON_CUSTOMS"",""CAYUL"",IF(B2=""MTR_LVL2_IRADV6275_AIR"",""CAYUL"",IF(B2=""VAN_LVL1_IR6255_CUSTOMS"",""CAYVR"",IF(B2=""VAN_LVL1_IR6255_SALES"",""CAYVR"",IF(B2=""iR-Adv C5560III-Winnepeg OutPut"",""CAYWG"",IF(B2=""CAL_LVL1_IR6275"",""CAYYC"",IF(B2=""TOR_LVL1_IR8285"",""CAYYZ"",IF(B2=""TOR_LVL2_IR5255"",""CAYYZ"","" ""))))))))))))))"

Bonjour

avec case ?

Sub Macro1()
Dim result As String, traiter As String
traiter = Cells(2, 2).Value
Select Case traiter
    Case Is = "QUE_LVL1_IR5560"
        result = "CAYQB"
    Case Is = "Canon iR-ADV 4245/4251 PCL6"
        result = "CAYUL"
    Case Is = "Canon iR-ADV 8285/8295 PCL6"
        result = "CAYUL"
    Case Is = "Canon_accMTL"
        result = "CAYUL"
    Case Is = "Canon_salesmtl"
        result = "CAYUL"
    Case Is = "Montreal Canon Ocean"
        result = "CAYUL"
    Case Is = "MTR_CANON_CUSTOMS"
        result = "CAYUL"
    Case Is = "MTR_LVL2_IRADV6275_AIR"
        result = "CAYUL"
    Case Is = "VAN_LVL1_IR6255_CUSTOMS"
        result = "CAYVR"
    Case Is = "VAN_LVL1_IR6255_SALES"
        result = "CAYVR"
    Case Is = "iR-Adv C5560III-Winnepeg OutPut"
        result = "CAYWG"
    Case Is = "CAL_LVL1_IR6275"
        result = "CAYYC"
    Case Is = "TOR_LVL1_IR8285"
        result = "CAYYZ"
    Case Is = "TOR_LVL2_IR5255"
        result = "CAYYZ"
    Case Else
        result = "Aucun résultat"
End Select
Cells(2, 3).Value = result
End Sub

le résultat est mis en C3

A plus sur le forum

7macro.xlsm (16.21 Ko)

Bonjour,

La procédure case me semble plus adaptée, mais je dois faire en sorte qu'elle s'exécute pour toutes les cellules de la colonne A, si un nom apparaît dans colonne B. Le nombre de ligne du rapport change chaque mois.

Voir fichier joint...

Merci, une fois de plus

re

comme ceci ?

A plus sur le forum

36report-3.xlsm (561.98 Ko)

Ahhh yess!!! Excellent!

Merci infiniment Papyg

Zut! Désolé de relancer, la macro fonctionne bien, mais s'arrête systématiquement à 100744 lignes... j'ai un rapport trimestriel qui en compte plus de 300000, j'arrive pas à la faire prendre la dernière ligne. Vous pouvez m'aider une fois de plus?

bonsoir

tu fais bien de relancer si il y a un problème

quoi que je ne voie pas très bien lequel

mon compteur de boucle 'i' et le nombre de ligne 'derlig' est de type long (Nombre entier de - 2'147'483'648 à 2'147'483'647)

Dim i As Long, result As String, traiter As String, derlig As Long

le nombre de ligne est compté en début de programme sur feuil1

derlig = Feuil1.Range("B" & Rows.Count).End(xlUp).Row

et chose étrange 100744 et le nombre de lignes du classeur que tu avais mis en test

c'est comme si tu avais ajouté ta feuille avec les 300000 lignes sur ce classeur, ce serait alors une feuille 2, et la macro prendrait pour traitement le nombre de ligne de feuille 1 ?

je te renvoi le fichier avec la macro modifiée

derlig = Sheets("Jan 2020 UNIFLOW Report").Range("B" & Rows.Count).End(xlUp).Row 

il faut impérativement que ta feuille avec les 300000 lignes se nomme Jan 2020 UNIFLOW Report.

Sinon si elle se nomme "Toto" il faut dans la macro remplacer "Jan 2020 UNIFLOW Report" par "Toto"

je ne voie pas d'autre raison pour que ça ne marche pas

14report-3.xlsm (562.01 Ko)

re moi

redis moi si ça marche

en fait un dernier recours

si c'est pas bon tu remplace

derlig = Sheets("Jan 2020 UNIFLOW Report").Range("B" & Rows.Count).End(xlUp).Row

par

derlig = 300000

A plus sur le forum

Ça fonctionne, et j'ai résolu mon problème pour l'utiliser dans tous mes fichiers (qui n'ont pas le même nom), en supprimant la référence à la feuille. ça donne

derlig = Range("B" & Rows.Count).End(xlUp).Row

Et ça fonctionne super bien! Je pense que le dossier est maintenant clos!

À bientôt, et merci encore

Re

oui bien ! comme ceci c'est derlig de la feuille active

A plus sur le forum

Rechercher des sujets similaires à "transformer formule fonction vba"