[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 Sub

Bonjour,

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 Sub

Deux 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

Rechercher des sujets similaires à "vba formule right fonctionne pas"