Macro copier coller avec condition

Bonjour à tous

Je permet de poster une demande d'aide de votre part.

Depuis un programme tiers, je reçois un fichier brut excel, ce fichier

sert à calculer les interventions et j'aimerais trouver une macro qui

copie les bonnes formules à la bonne place.

Mes formules se trouvent dans l"onglet "FORMULES" et mon fichier brut dans l'onglet "IMPORT".

Suivant le code d'intervention j'aimerais copier la formule correspondante de l'onglet "FORMULES"

Exemple :

Onglet FORMULES B3 => Onglet IMPORT colonne O (Pour les SLA01)

Onglet FORMULES C3 => Onglet IMPORT colonne X (Pour les SLA01)

Onglet FORMULES D3 => Onglet IMPORT colonne Y (Pour les SLA01)

Onglet FORMULES E3 => Onglet IMPORT colonne N (Pour les SLA01)

et ainsi de suite pour tout les SLA correspond.

Merci d'avance

Bonne soirée

Bonjour Netparty,

Pourquoi toutes ces formules alors qu'elles sont identiques à part le SLA code

1) il faut changer les formules, en B3 par exemple, il faut remplacer ="SLA01" par <"SLA10" et changer le numéro de ligne 3 par 2

'=SI(ET($J2<"SLA10";$K2="NON CRITIQUE";$AG2>10);($AG2-BONUS!$E$2)*BONUS!$C$2;SI(ET($J2<"SLA10";$K2="CRITIQUE";($AE2*24)>BONUS!$J$2);($AG2-2)*BONUS!$H$2;""))

2) Ensuite, il faut utiliser ce genre de code

Sub CopieFormule()
  Dim dLig As Long
  With Sheets("Import")
    ' Dernière ligne remplie
    dLig = .Range("K" & Rows.Count).End(xlUp).Row
    ' Copier les formules
    .Range("O2:O" & dLig).FormulaLocal = Sheets("FORMULES").Range("B3").FormulaLocal

  End With
End Sub

@+

Bonjour,

Autre proposition, on réécrit directement les formules dans la feuille "IMPORT", mais au lieu de chercher le SLAxx, on vérifie que les 3 premiers caractères commencent par "SLA", (si j'ai bien compris):

Sub Formules()
    Dim DerLig As Long
    Application.ScreenUpdating = False
    Sheets("IMPORT").Select
    DerLig = Range("J" & Rows.Count).End(xlUp).Row
    Range("N2:N" & DerLig).FormulaR1C1 = "=IFERROR(IF(AND(LEFT(RC10,3)=""SLA"",RC11=""NON CRITIQUE""),RC15/BONUS!R3C3," & Chr(10) & "IF(AND(LEFT(RC10,3)=""SLA"",RC11=""CRITIQUE""),RC15/BONUS!R3C8,"""")),"""")"
    Range("O2:O" & DerLig).FormulaR1C1 = "=IF(AND(LEFT(RC10,3)=""SLA"",RC11=""NON CRITIQUE"",RC33>10),(RC33-BONUS!R3C5)*BONUS!R3C3," & Chr(10) & "IF(AND(LEFT(RC10,3)=""SLA""=""SLA01"",RC11=""CRITIQUE"",(RC31*24)>BONUS!R3C10),(RC33-2)*BONUS!R3C8,""""))"
    Range("X2:X" & DerLig).FormulaR1C1 = "=IF(AND(LEFT(RC10,3)=""SLA"",RC11=""NON CRITIQUE""),BONUS!R2C17," & Chr(10) & "IF(AND(LEFT(RC10,3)=""SLA"",RC11=""CRITIQUE""),BONUS!R2C20,""""))"
    Range("Y2:Y" & DerLig).FormulaR1C1 = "=IF(AND(LEFT(RC10,3)=""SLA"",RC11=""NON CRITIQUE""),BONUS!R3C16," & Chr(10) & "IF(AND(LEFT(RC10,3)=""SLA"",RC11=""CRITIQUE""),BONUS!R3C19,""""))"
End Sub

Cdlt

Bonjour BrunoM45 , Arturo83

Effectivement dans mon fichier test j'ai simplement dupliqué les formules, mais dans mon fichier final j'aurais une formule différente pour chaque SLA.

Donc dans le fichier import quand il trouve SLA01 on écrit la formule qui lui correspond, puis SLA02 et ensuite de suite.

Bonne journée

"Effectivement dans mon fichier test j'ai simplement dupliqué les formules, mais dans mon fichier final j'aurais une formule différente pour chaque SLA.Donc dans le fichier import quand il trouve SLA01 on écrit la formule qui lui correspond, puis SLA02 et ensuite de suite."

C'est bien ce que fait ma proposition, non !

re-bonjour Arturo83

J'ai testé ton fichier, mais le résultat n'est pas celui que j'aimerais.

En fait dans mon tableau import toutes les lignes qui comporte SLA01 dans la colonne J alors on utilise la formule SLA01 du tableau FORMULES, si les lignes du tableau IMPORT comporte SLA02 alors on utilise la formule SLA02 du tableau Formule et ainsi de suite pour tout les autres type de SLA.

Bonne fin de journée

Bonjour,

"J'ai testé ton fichier, mais le résultat n'est pas celui que j'aimerais." Qu'est-ce qui n'est pas bon?

******************************************************************************************************************************************

Bizarrement les formules en colonne B du dernier fichier sont différentes de celles du fichier que vous avez déposé initialement, c'est sûr que comme ça on ne va y arriver.

Avant:

netparty

Après

netparty

Les formules du premier fichier étaient, à part le numéro affecté à chaque SLA, toutes identiques, problème contourné avec une formule unique qui ne cherche que les 3 premiers caractères de gauche et en ignore le N°.

Donc, si vous maintenez qu'elles sont toutes différentes, alors il faut toutes les donner, car les SLA ne s'arrêtent pas à 9.

Cdlt

Bonjour Arturo83

J'ai refait mon fichier test avec moins de SLA, juste pour avoir une idée de comment procéder.

Effectivement les formules seront différente suivant le SLA

Bonne journée

Si les formules sont différentes à chaque SLA, alors il faut les donner toutes, dans le 1er fichier, je dénombrais 16 SLA.

Oui mais pour la facilité je n'ai laissé que 3 SLA.

Dans le futur j'en aurais beaucoup plus, mais comme cela j'ai un modèle.

Merci

Bonne journée

Re bonjour Arturo83

Oui mais pour la facilité je n'ai laissé que 3 SLA.

Dans le futur j'en aurais beaucoup plus, mais comme cela j'ai un modèle.

Merci

Bonne journée

Puisque les formules sont différentes suivants les SLA, il ne vous reste plus qu'à utiliser l'enregistreur de macros, pour chaque formule et les coller dans le code suivant, j'ai fait pour le SLA01, appliquer le même principe pour les autres:

Sub Formules()
    Dim DerLig As Long, i As Long
    Application.ScreenUpdating = False
    Sheets("IMPORT").Select
    DerLig = Range("J" & Rows.Count).End(xlUp).Row
    For i = 2 To DerLig
        Select Case Range '"C" & i).value
            Case Is = "SLA01"
                Range("N" & i).FormulaR1C1 = "=IF(AND(RC10=""SLA01"",RC11=""NON CRITIQUE"",RC33>10),(RC33-BONUS!R3C5)*BONUS!R3C3,IF(AND(RC10=""SLA01"",RC11=""CRITIQUE"",(RC31*24)>BONUS!R3C10),(RC33-2)*BONUS!R3C8,""""))"
                Range("O" & i).FormulaR1C1 = "=IF(AND(RC10=""SLA01"",RC11=""NON CRITIQUE""),BONUS!R3C17,IF(AND(RC10=""SLA01"",RC11=""CRITIQUE""),BONUS!R3C20,""""))"
                Range("X" & i).FormulaR1C1 = "=IF(AND(RC10=""SLA01"",RC11=""NON CRITIQUE""),BONUS!R3C16,IF(AND(RC10=""SLA01"",RC11=""CRITIQUE""),BONUS!R3C19,""""))"
                Range("Y" & i).FormulaR1C1 = "=IFERROR(IF(AND(RC10=""SLA01"",RC11=""NON CRITIQUE""),RC15/BONUS!R3C3,IF(AND(RC10=""SLA01"",RC11=""CRITIQUE""),RC15/BONUS!R3C8,"""")),"""")"
            Case Is = "SLA02"
                'Coller ici les formules pour le SLA02

            Case Is = "SLA03"
                'Coller ici les formules pour le SLA03

            Case Is = "SLA04"
                 'Coller ici les formules pour le SLA04

            'Autres cas
       End Select
End Sub

Cdlt

Bonjour Arturo83

Merci pour ton aide je vais tester cela.

Bonne journée

Bonjour Arturo

J'ai testé ton fichier, c'est impeccable

je n'ai plus qu'a l'adapter avec toutes mes formules.

Un tout un grand merci

Bonne journée

Rechercher des sujets similaires à "macro copier coller condition"