[VBA] Formule SI+RIGHT ne fonctionne pas
Bonjour,
Tout d'abord je souhaite remercier la ou les personnes qui vont s'intéresser à mon problème.
Dans le fichier joint, la macro Num_fact_corrigé ne fonctionne pas complètement. Le début, à savoir l'insertion d'une colonne et l'ajout d'un titre, c'est ok.
Ensuite, la formule SI ne se crée pas et ne se copie pas jusqu'en bas. Il n'y a pas de bug, mais simplement rien ne se passe.
Concernant la formule, si le numéro de facture se termine par 401571 alors je veux le n° de facture et un 0 en plus à la fin, sinon si le numéro de facture se termine par 402272 alors je veux le n° de facture et un 4 ajouté à la fin sinon je veux simplement le n° de facture.
Dans les 2 cas où il faut ajouter un 0 ou un 4, c'est pour corriger le numéro de facture (tronqué car champ limité à la saisie dans le logiciel) et pouvoir faire une recherchev ensuite. Sans cet ajout, j'ai un tas de lignes en erreur alors que les numéros de facture existent bien dans les deux extractions à comparer.
D'avance merci pour votre précieuse aide.
Bonne fin de journée,
Clara
Bonjour et bienvenue,
Essaie ainsi :
Public Sub Num_fact_corrigé()
Dim wb As Workbook, ws As Worksheet
Dim LastRow As Long, i As Long
Const C = "N° fact corrigé"
Dim n As Variant, tbl As Variant, arr()
Set wb = ActiveWorkbook
Set ws = wb.Worksheets("Données ORACLE")
On Error Resume Next
n = Application.Match(C, ws.Rows(1), 0)
If Not IsError(n) Then
MsgBox "La colonne " & C & " existe déjà !...", 64, "Informaton"
Else
With ws
LastRow = .Cells(.Rows.Count, 9).End(xlUp).Row
tbl = .Cells(2, 9).Resize(LastRow - 1)
ReDim arr(1 To UBound(tbl))
.Cells(10).EntireColumn.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
.Cells(10).Value = C
For i = LBound(tbl) To UBound(tbl)
Select Case VBA.Right(tbl(i, 1), 6)
Case "401571": arr(i) = tbl(i, 1) & "0"
Case "402272": arr(i) = tbl(i, 1) & "4"
Case Else: arr(i) = tbl(i, 1)
End Select
Next i
.Cells(2, 10).Resize(UBound(tbl), 1).Value = Application.Transpose(arr)
End With
End If
End SubBonjour,
Comme j'avais vu cela hier, voici la correction de votre code :
Sub Num_fact_corrigé()
' Num_fact_corrigé Macro
Dim nblignes As Long
With Sheets("Données ORACLE")
On Error Resume Next
lig = .Cells.Find("*fact corrigé*", LookIn:=xlValues, lookat:=xlPart).Row
If lig > 0 Then MsgBox "la colonne existe déjà !": Exit Sub
On error goto 0
.Select
nb_lignes = Application.WorksheetFunction.CountA(.Range("$I:$I"))
.Columns("J:J").EntireColumn.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
.Range("J1").Value = "N° fact corrigé"
With .Range("J2")
.FormulaR1C1 = "=IF(RIGHT(RC[-1],6)=""401571"",RC[-1]&0,IF(RIGHT(RC[-1],6)=""402272"",RC[-1]&4,RC[-1]))"
.AutoFill Destination:=Range("J2:J" & nb_lignes)
End With
End With
End SubDeux remarques :
- le code utilise la formule que vous vouliez mettre en place dans la colonne
- Si d'autres cas à ajouter dans la formule SI, cela peut devenir compliqué à gérer dans la formule.
Cordialement
Bonjour Jean-Eric, Bonjour Dan,
Merci à vous deux pour le temps consacré à mon problème. Tout fonctionne parfaitement bien à présent !
Vous êtes top :)
Très belle journée à vous et d'avance un bon week-end