Problème Fonction Macro VBA

Fermé
ljano Messages postés 1 Date d'inscription mercredi 3 juin 2015 Statut Membre Dernière intervention 3 juin 2015 - 3 juin 2015 à 11:35
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 - 4 juin 2015 à 19:09
Bonjour à tous !
Je débute en VBA et je suis déjà face à pas mal de problème.
J'ai des feuilles de calculs excel à analyser qui ont toute la même forme donc je voudrais créer une macro pour faire tout ça automatiquement.

J'ai notamment une fonction un peu lourde à utiliser pour associer des caractéristiques à un code.

J'ai une colonne "TRAJECTORY_ID" auquelle je voudrais associer une caractéristiques dans une nouvelle colonne
J'ai d'abord utilisé une formule sous excel (qui fonctionne) :
=SI(OU(DROITE([@[TRAJECTORY_ID]];2)="01";DROITE([@[TRAJECTORY_ID]];2)="21";DROITE([@[TRAJECTORY_ID]];2)="02";DROITE([@[TRAJECTORY_ID]];2)="22");"IQ_Std";SI(OU(DROITE([@[TRAJECTORY_ID]];2)="81";DROITE([@[TRAJECTORY_ID]];2)="91";DROITE([@[TRAJECTORY_ID]];2)="82";DROITE([@[TRAJECTORY_ID]];2)="92";[@[TRAJECTORY_ID]]="2031";[@[TRAJECTORY_ID]]="2032");"IQplus";SI(OU(DROITE([@[TRAJECTORY_ID]];2)="61";DROITE([@[TRAJECTORY_ID]];2)="71";DROITE([@[TRAJECTORY_ID]];2)="62";DROITE([@[TRAJECTORY_ID]];2)="72";[@[TRAJECTORY_ID]]="2021";[@[TRAJECTORY_ID]]="2022");"RDLplus";SI(OU(DROITE([@[TRAJECTORY_ID]];2)="11";DROITE([@[TRAJECTORY_ID]];2)="31";DROITE([@[TRAJECTORY_ID]];2)="12";DROITE([@[TRAJECTORY_ID]];2)="32");"RDLstd";SI(OU(DROITE([@[TRAJECTORY_ID]];2)="35";DROITE([@[TRAJECTORY_ID]];2)="36";DROITE([@[TRAJECTORY_ID]];2)="19";DROITE([@[TRAJECTORY_ID]];2)="22");"IQ_Std_5R";SI(OU(DROITE([@[TRAJECTORY_ID]];2)="41";DROITE([@[TRAJECTORY_ID]];2)="51";DROITE([@[TRAJECTORY_ID]];2)="42";DROITE([@[TRAJECTORY_ID]];2)="52");"Smart_IQ";))))))

Mais une fois que j'enregistre ce que je fais dans une macro il y a un bug : je n'arrive pas à reconnaitre l'origine du bug (peut-être que la formule est trop longue ?)

Range("AT2").Select
ActiveCell.FormulaR1C1 = _
"=IF(OR(RIGHT([@[TRAJECTORY_ID]],2)=""01"",RIGHT([@[TRAJECTORY_ID]],2)=""21"",RIGHT([@[TRAJECTORY_ID]],2)=""02"",RIGHT([@[TRAJECTORY_ID]],2)=""22""),""IQ_Std"",IF(OR(RIGHT([@[TRAJECTORY_ID]],2)=""81"",RIGHT([@[TRAJECTORY_ID]],2)=""91"",RIGHT([@[TRAJECTORY_ID]],2)=""82"",RIGHT([@[TRAJECTORY_ID]],2)=""92"",[@[TRAJECTORY_ID]]=""2031"",[@[TRAJECTORY_ID]]=""2032""),""IQpl"& _
"OR(RIGHT([@[TRAJECTORY_ID]],2)=""61"",RIGHT([@[TRAJECTORY_ID]],2)=""71"",RIGHT([@[TRAJECTORY_ID]],2)=""62"",RIGHT([@[TRAJECTORY_ID]],2)=""72"",[@[TRAJECTORY_ID]]=""2021"",[@[TRAJECTORY_ID]]=""2022""),""RDLplus"",IF(OR(RIGHT([@[TRAJECTORY_ID]],2)=""11"",RIGHT([@[TRAJECTORY_ID]],2)=""31"",RIGHT([@[TRAJECTORY_ID]],2)=""12"",RIGHT([@[TRAJECTORY_ID]],2)=""32""),""RDLstd""& _
"IGHT([@[TRAJECTORY_ID]],2)=""35"",RIGHT([@[TRAJECTORY_ID]],2)=""36"",RIGHT([@[TRAJECTORY_ID]],2)=""19"",RIGHT([@[TRAJECTORY_ID]],2)=""22""),""IQ_Std_5R"",IF(OR(RIGHT([@[TRAJECTORY_ID]],2)=""41"",RIGHT([@[TRAJECTORY_ID]],2)=""51"",RIGHT([@[TRAJECTORY_ID]],2)=""42"",RIGHT([@[TRAJECTORY_ID]],2)=""52""),""Smart_IQ"",))))))"
Range("AT3").Select

J'ai donc essayé d'écrire une fonction macro :
Function Name(cel As Range) As String
Dim Code As Variant
' Code prend la valeur de chaque cellule de la plage de cellule definie dans l'argument Note
For Each Code In Range("TRAJECTORY_ID")

If Left(Code, 1) = "1" Then

Select Case (Right(Code, 2))
Case "01", "02", "21", "22"
Autoexp = "IQ_Std"

Case "81", "91", "82", "92"
Autoexp = "IQ_Plus"

Case "61", "62", "71", "72"
Autoexp = "RDL_Plus"

Case "11", "12", "31", "32"
Autoexp = "RDL_Std"

Case "35", "36", "19", "22"
Autoexp = "IQ_Std_5R"

Case "41", "42", "51", "52"
autoesp = "SmartIQ"

Case Else
Autoexp = "?"

End Select

ElseIf Left(Code, 1) = "2" Then
Select Case (Code)
Case "2001", "2002"
Autoexp = "IQ_Std"

Case "2031", "2032"
Autoexp = "IQ_Plus"

Case "2011", "2012"
Autoexp = "RDL_Std"

Case "2021", "2022"
Autoexp = "RDL_Plus"

End Select

End If

Next Code

End Function

Mais je bloque pour savoir comment procéder pour d'une part que cette fonction fonctionne et pour savoir comment l'appeler afin que cette fonction s'applique sur chaque ligne de ma nouvelle colonne a partir de la cellule issue de la conne TRAJECTORY_ID (c'est un tableau avec en-tête)

Ma question est peut-être un peu compliquée mais ce serait fantastique si quelqu'un pouvait me débloquer !!!

MERCI D'AVANCE
A voir également:

1 réponse

Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
4 juin 2015 à 19:09
Bonjour
Essayez ceci
https://www.cjoint.com/c/EFeriMcjBUw
Cdlt
0