ljano
Messages postés1Date d'inscriptionmercredi 3 juin 2015StatutMembreDernière intervention 3 juin 2015
-
3 juin 2015 à 11:35
Frenchie83
Messages postés2240Date d'inscriptionlundi 6 mai 2013StatutMembreDernière intervention11 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 ?)
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 !!!