XL 2019 Macro copier coller suivant condition

netparty

XLDnaute Occasionnel
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
 

Pièces jointes

  • Fichier exemple.xlsm
    26 KB · Affichages: 8
Solution
ok.. pourquoi ne pas mettre directement le fichier avec tes bonnes formules dès le début... soit..
un test ici:
VB:
Sub Set_Formula()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
With Sheets("IMPORT")
    fin = .UsedRange.Rows.Count 'dernière ligne de la feuille Import
    For i = 2 To fin 'pour chaque ligne de la feuille IMPORT
        formuleO = "" 'on initialise les formules
        formuleX = ""
        formuleY = ""
        formuleN = ""
    
        SLACode = .Range("J" & i) 'récupère le code SLA en colonne J
        Set trouve = Sheets("FORMULES").Range("A:A").Find(SLACode, lookat:=xlWhole) 'on cherche le code dans la colonne A due la feuille "FORMULES"
        If Not trouve Is Nothing Then 'si...

vgendron

XLDnaute Barbatruc
Hello

Je ne comprend pas tes formules
dans ta feuille "Formules"
pour une colonne (colB par exemple) TOUTES les lignes ont la meme formule..au numéro de ligne prêt... le SLA Code utilisé est toujours le SLA1... erreur ???
 

vgendron

XLDnaute Barbatruc
Hello

Je ne comprend toujours pas tes formules...
quelque soit la valeur du SLA 01 02 03...ou 09, tu fais toujours le meme calcul avec les meme valeurs de bonus..
le type de SLA n'a aucun effet sur ton calcul...

dans ta feuille Bonus.. la colonne B.. au lieu de description 1 2 3.... ce ne serait pas justement les SLA 01 02 ... .
et donc en fonction du type SLA dans la feuille Import, tu récupères la valeur du bonus à la bonne ligne dans la feuille Bonus??

si c'est ca. je pense qu'une formule unique peut etre mise dans ta colonne O pour récuperer les données adéquates..
 

netparty

XLDnaute Occasionnel
Hello

Je ne comprend toujours pas tes formules...
quelque soit la valeur du SLA 01 02 03...ou 09, tu fais toujours le meme calcul avec les meme valeurs de bonus..
le type de SLA n'a aucun effet sur ton calcul...

dans ta feuille Bonus.. la colonne B.. au lieu de description 1 2 3.... ce ne serait pas justement les SLA 01 02 ... .
et donc en fonction du type SLA dans la feuille Import, tu récupères la valeur du bonus à la bonne ligne dans la feuille Bonus??

si c'est ca. je pense qu'une formule unique peut etre mise dans ta colonne O pour récuperer les données adéquates..
Bonjour Vgendron

Dans mon fichier exemple j'ai simplement recopier les formules, mais les formules seront différente pour chaque SLA.

Bonne journée
 

vgendron

XLDnaute Barbatruc
ok.. pourquoi ne pas mettre directement le fichier avec tes bonnes formules dès le début... soit..
un test ici:
VB:
Sub Set_Formula()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
With Sheets("IMPORT")
    fin = .UsedRange.Rows.Count 'dernière ligne de la feuille Import
    For i = 2 To fin 'pour chaque ligne de la feuille IMPORT
        formuleO = "" 'on initialise les formules
        formuleX = ""
        formuleY = ""
        formuleN = ""
    
        SLACode = .Range("J" & i) 'récupère le code SLA en colonne J
        Set trouve = Sheets("FORMULES").Range("A:A").Find(SLACode, lookat:=xlWhole) 'on cherche le code dans la colonne A due la feuille "FORMULES"
        If Not trouve Is Nothing Then 'si on l'a trouvé, on récupère les formules sur la ligne
            formuleO = Sheets("FORMULES").Range("B" & trouve.Row).Formula
            formuleX = Sheets("FORMULES").Range("C" & trouve.Row).Formula
            formuleY = Sheets("FORMULES").Range("D" & trouve.Row).Formula
            formuleN = Sheets("FORMULES").Range("E" & trouve.Row).Formula
       
        .Range("O" & i).Formula = Replace(formuleO, trouve.Row, i) 'on applique la formule dans la feuille IMPORT en modifiant les indices de la formule
        .Range("X" & i).Formula = Replace(formuleX, trouve.Row, i)
        .Range("Y" & i).Formula = Replace(formuleY, trouve.Row, i)
        .Range("N" & i).Formula = Replace(formuleN, trouve.Row, i)
        End If
    Next i
    
End With

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
 

netparty

XLDnaute Occasionnel
ok.. pourquoi ne pas mettre directement le fichier avec tes bonnes formules dès le début... soit..
un test ici:
VB:
Sub Set_Formula()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
With Sheets("IMPORT")
    fin = .UsedRange.Rows.Count 'dernière ligne de la feuille Import
    For i = 2 To fin 'pour chaque ligne de la feuille IMPORT
        formuleO = "" 'on initialise les formules
        formuleX = ""
        formuleY = ""
        formuleN = ""
   
        SLACode = .Range("J" & i) 'récupère le code SLA en colonne J
        Set trouve = Sheets("FORMULES").Range("A:A").Find(SLACode, lookat:=xlWhole) 'on cherche le code dans la colonne A due la feuille "FORMULES"
        If Not trouve Is Nothing Then 'si on l'a trouvé, on récupère les formules sur la ligne
            formuleO = Sheets("FORMULES").Range("B" & trouve.Row).Formula
            formuleX = Sheets("FORMULES").Range("C" & trouve.Row).Formula
            formuleY = Sheets("FORMULES").Range("D" & trouve.Row).Formula
            formuleN = Sheets("FORMULES").Range("E" & trouve.Row).Formula
      
        .Range("O" & i).Formula = Replace(formuleO, trouve.Row, i) 'on applique la formule dans la feuille IMPORT en modifiant les indices de la formule
        .Range("X" & i).Formula = Replace(formuleX, trouve.Row, i)
        .Range("Y" & i).Formula = Replace(formuleY, trouve.Row, i)
        .Range("N" & i).Formula = Replace(formuleN, trouve.Row, i)
        End If
    Next i
   
End With

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Merci

Bonne fin de journée
 

Discussions similaires

Réponses
12
Affichages
242
Réponses
4
Affichages
289

Statistiques des forums

Discussions
312 177
Messages
2 085 976
Membres
103 076
dernier inscrit
LoneWolf90