Excel VBA - Macro de compilation
Bonjour à tous,
Je cherche à mettre en forme la formule suivante dans mon code visual basic. La version simple est fonctionnelle mais la version complexifiée ne fonctionne pas et je n'arrive pas à comprendre pour quelle raison, si quelqu'un savait m'éclairer s'il vous plait.
Version simple: (qui fonctionne)
Private Sub test()
Application.DisplayAlerts = False
Dim STATS As String
STATS = ActiveWorkbook.Name
nomfich = Application.GetOpenFilename(Title:="Insertion", MultiSelect:=True)
' si aucun choix effectué, sortie du programme
If TypeName(nomfich) = "Boolean" Then
'MsgBox("Aucun fichier n'a été sélectionné. Fin de la procédure", vbCritical + vbOKOnly,"Sortie")
Exit Sub
End If
If UBound(nomfich) >= 1 Then
Dim rep As Long
Dim Liste As String
Dim compteur As Byte
For compteur = 1 To UBound(nomfich)
Liste = Liste & vbCr & nomfich(compteur)
Next compteur
'affichage de l'ensemble de la liste des fichiers et proposition d 'ouverture
rep = MsgBox("Voici la liste des Bayplans sélectionnés." _
& Liste & vbCr & "Confirmez-vous leur intégration ?", vbYesNo + vbQuestion, "Confirmation Bayplans")
'ouverture des fichiers en cas de réponse positive
If rep = vbYes Then
For compteur = 1 To UBound(nomfich)
Workbooks.OpenText nomfich(compteur), _
Origin:=xlMSDOS, StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 9), Array(3, _
1), Array(4, 1), Array(16, 1), Array(18, 1), Array(20, 1), Array(25, 1), Array(30, 1), _
Array(35, 1), Array(40, 1), Array(43, 9), Array(45, 1), Array(51, 9), _
Array(53, 1), Array(59, 1), Array(60, 1), Array(61, 1), Array(62, 1), Array(63, 1), Array( _
102, 1), Array(106, 9)), TrailingMinusNumbers:= _
True
Range("J:J,K:K,P:P,Q:Q,R:R,S:S,T:T,U:U").Select
Range("T1").Activate
Selection.Delete Shift:=xlToLeft
Dim derligne0 As Long
derligne0 = Range("B65536").End(xlUp).Row
Columns("E:E").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("$E$2" & ":E" & derligne0).FormulaR1C1 = "=IF(OR(LEFT(RC[-2],2)=""20"",LEFT(RC[-2],2)=""22""),""20'"",IF(OR(LEFT(RC[-2],2)=""40"",LEFT(RC[-2],2)=""42""),""40'"",IF(LEFT(RC[-2],2)=""45"",""40 HC"",IF(LEFT(RC[-2],2)=""L5"",""45'"",""NA""))))"
Columns("f:f").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("$F$2" & ":F" & derligne0).FormulaR1C1 = "=IF(RC[-1]=""20'"",""1"",IF(RC[-1]=""40'"",""2"",IF(RC[-1]=""40 HC"",""2,3"",IF(RC[-1]=""45'"",""2,6"",""NA""))))"
Range("A1").Select
Selection.AutoFilter
ActiveSheet.Range("A:A").AutoFilter Field:=1, Criteria1:=">=1", Operator:=xlAnd
Range("B2:P2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.SpecialCells(xlCellTypeVisible).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("BASE").Activate
Dim derligne As Long
derligne = ActiveSheet.Range("A1048576").End(xlUp).Offset(1, 0).Row
Range("D" & derligne).Activate
ActiveSheet.Paste
Application.CutCopyMode = False
Dim DerLigne2 As Long
DerLigne2 = ActiveSheet.Range("D1048576").End(xlUp).Row
Dim DerLigne8 As Long
DerLigne8 = ActiveSheet.Range("A1048576").End(xlUp).Offset(1, 0).Row
Range("a" & DerLigne8 & ": a" & DerLigne2).Value = N
Range("b" & DerLigne8 & ": b" & DerLigne2).Value = V
Range("C" & DerLigne8 & ": C" & DerLigne2).Value = S
Application.DisplayAlerts = False
Next compteur
End If
Application.DisplayAlerts = True
Sheets("BASE").Activate
Dim derligne3 As Long
derligne3 = ActiveSheet.Range("A1048576").End(xlUp).Row
ActiveSheet.Range("$A$2" & ":Q" & derligne3).RemoveDuplicates Columns:=Array(1, 2, 3, 4), Header:=xlNo
Range("A2").Activate
End If
End Sub
Version complexifiée: (qui ne fonctionne pas)
Columns("E:E").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("$E$2" & ":E" & derligne0).FormulaR1C1 = "=IF(OR(LEFT(RC[-2],2)=""20"",LEFT(RC[-2],2)=""22""),""20'"",IF(OR(LEFT(RC[-2],2)=""40"",LEFT(RC[-2],2)=""42"",LEFT(RC[-2],2)=""43"",LEFT(RC[-2],2)=""49""),""40'"",IF(LEFT(RC[-2],2)=""45"",""40 HC"",IF(OR(LEFT(RC[-2],2)=""L5"",LEFT(RC[-2],2)=""95"",""45'"",IF(LEFT(RC[-2],2)=""PP"",""53"",""NA""))))"
Merci pour votre aide précieuse !
Bonjour
A tester : Manquaient les parenthèses surlignées
Columns("E").Insert
Range("E2" & ":E" & derligne0).FormulaR1C1 = "=IF(OR(LEFT(RC[-2],2)=""20"",LEFT(RC[-2],2)=""22""),""20'"",IF(OR(LEFT(RC[-2],2)=""40"",LEFT(RC[-2],2)=""42"",LEFT(RC[-2],2)=""43"",LEFT(RC[-2],2)=""49""),""40'"",IF(LEFT(RC[-2],2)=""45"",""40 HC"",IF(OR(LEFT(RC[-2],2)=""L5"",LEFT(RC[-2],2)=""95""),""45'"",IF(LEFT(RC[-2],2)=""PP"",""53"",""NA"")))))"Bonjour, la formule fonctionne maintenant, merci bien !