voila le code suivant marche tres bien (il fait bien ce que je lui demande) mais le temps d'execution est, je pense pour le travail réalisé trop long.

J'ai commencé le vba hier soir à 22h donc je connais quasiment rien et je n'ai pas trouvé de réponse dans les tuto, les faq ou les questions déjà posés

En utilisant l'enregisteur de macro j'ai trouvé une fonction:
Selection.AutoFill Destination:=Range("A3:A7"), Type:=xlFillDefault
je pense que c'est plus rapide que mes boucles mais le probleme est que je dois faire des calculs sur des données non vide et je n'ai pas trouvé le moyen de l'utiliser convenablement avec un truc du genre:

selectionner feuille(donnetemporaire 1)
selectionner A1
retour = 0

tant que retour != 1
si interventions.cellule 1 non vide et interventions.cellule 2 non vide

alors
appliquer formule
retour = 1

sinon
selectionner cellule suivante (offset(1,0)
fsi

selectionner dans la feuille donne temporaire toutes les cellules de la colonne A1 pour les cellules des colonnes 1 et 2 de la feuille interventions ne sont pas vide

selection autofill

selectionner feuille donnetemporaire
copier la colonne A
selectionner colonne B;D
coller
voici ma macro pour l'instant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
Sub miseenplacedelafeuille()
    'calcul le nombre de ligne
    Dim nombredeligne   As Integer
    Sheets("INTERVENTIONS").Activate
    nombredeligne = ActiveSheet.Range("A1").End(xlDown).Row
 
    'supprime les espaces dans les durées opératoires (cause des erreurs de calcul)
    Range("G2:L" & nombredeligne).Select
    Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
 
    'insere une nouvelle feuille sur laquelle
    'sera calculer puis copier (gain de temps) la premiere colonne
    'pour chaque type d'operation
    Sheets.Add.Move After:=Sheets(Sheets.Count)
    ActiveSheet.Name = "donnée temporaire 1"
    ActiveSheet.Range("A1") = "hfin - heb"
    ActiveSheet.Range("E1") = "hsrt - hent"
    ActiveSheet.Range("I1") = "hdepbloc - harrbloc"
    Range("A2:L" & nombredeligne).Select
    Selection.NumberFormat = "h:mm;@"
 
    'insere une nouvelle feuille sur laquelle
    'sera calculer puis copier (gain de temps) les temps d'anesthesie
    'et les noms voulus
    Sheets.Add.Move After:=Sheets(Sheets.Count)
    ActiveSheet.Name = "donnée temporaire 2"
 
 
    'insere une nouvelle feuille sur laquelle sera affiché les résultats
    Sheets.Add.Move After:=Sheets(Sheets.Count)
    ActiveSheet.Name = "Résultat"
 
End Sub
 
Sub calculdesdureeope()
    'calcul le nombre de ligne à partir de la premiere colonne, toujours pleine jusqu'à la fin
    Dim nombredeligne   As Integer
    Sheets("INTERVENTIONS").Activate
    nombredeligne = ActiveSheet.Range("A1").End(xlDown).Row
 
    Dim compteur As Integer 'declare un compteur pour les boucles
 
    Sheets("donnée temporaire 1").Select
 
    Range("A2").Select
    For compteur = 2 To nombredeligne
        If IsEmpty(Sheets("INTERVENTIONS").Cells(compteur, 7).Value) Or IsEmpty(Sheets("INTERVENTIONS").Cells(compteur, 8).Value) Then
            ActiveCell.Value = ""
        ElseIf Sheets("INTERVENTIONS").Cells(compteur, 7).Value < Sheets("INTERVENTIONS").Cells(compteur, 8).Value Then
             ActiveCell.FormulaR1C1 = "=((INT(INTERVENTIONS!R[0]C[7]/100)+(INTERVENTIONS!R[0]C[7]/100-INT(INTERVENTIONS!R[0]C[7]/100))*100/60)-(INT(INTERVENTIONS!R[0]C[6]/100)+(INTERVENTIONS!R[0]C[6]/100-INT(INTERVENTIONS!R[0]C[6]/100))*100/60))*60/1440"
        Else
             ActiveCell.FormulaR1C1 = "=((24 - (INT(INTERVENTIONS!R[0]C[7]/100)+(INTERVENTIONS!R[0]C[7]/100-INT(INTERVENTIONS!R[0]C[7]/100))*100/60))+(INT(INTERVENTIONS!R[0]C[6]/100)+(INTERVENTIONS!R[0]C[6]/100-INT(INTERVENTIONS!R[0]C[6]/100))*100/60))*60/1440"
        End If
 
        If IsEmpty(Sheets("INTERVENTIONS").Cells(compteur, 9).Value) Or IsEmpty(Sheets("INTERVENTIONS").Cells(compteur, 10).Value) Then
            ActiveCell.Offset(0, 4).Value = ""
        ElseIf Sheets("INTERVENTIONS").Cells(compteur, 9).Value < Sheets("INTERVENTIONS").Cells(compteur, 10).Value Then
            ActiveCell.Offset(0, 4).FormulaR1C1 = "=((INT(INTERVENTIONS!R[0]C[5]/100)+(INTERVENTIONS!R[0]C[5]/100-INT(INTERVENTIONS!R[0]C[5]/100))*100/60)-(INT(INTERVENTIONS!R[0]C[4]/100)+(INTERVENTIONS!R[0]C[4]/100-INT(INTERVENTIONS!R[0]C[4]/100))*100/60))*60/1440"
        Else
             ActiveCell.Offset(0, 4).FormulaR1C1 = "=((24 - (INT(INTERVENTIONS!R[0]C[5]/100)+(INTERVENTIONS!R[0]C[5]/100-INT(INTERVENTIONS!R[0]C[5]/100))*100/60)) + (INT(INTERVENTIONS!R[0]C[4]/100)+(INTERVENTIONS!R[0]C[4]/100-INT(INTERVENTIONS!R[0]C[4]/100))*100/60))*60/1440"
        End If
 
         If IsEmpty(Sheets("INTERVENTIONS").Cells(compteur, 11).Value) Or IsEmpty(Sheets("INTERVENTIONS").Cells(compteur, 12).Value) Then
            ActiveCell.Offset(0, 8).Value = ""
        ElseIf Sheets("INTERVENTIONS").Cells(compteur, 11).Value < Sheets("INTERVENTIONS").Cells(compteur, 12).Value Then
             ActiveCell.Offset(0, 8).FormulaR1C1 = "=((INT(INTERVENTIONS!R[0]C[3]/100)+(INTERVENTIONS!R[0]C[3]/100-INT(INTERVENTIONS!R[0]C[3]/100))*100/60)-(INT(INTERVENTIONS!R[0]C[2]/100)+(INTERVENTIONS!R[0]C[2]/100-INT(INTERVENTIONS!R[0]C[2]/100))*100/60))*60/1440"
        Else
             ActiveCell.Offset(0, 8).FormulaR1C1 = "=((24 - (INT(INTERVENTIONS!R[0]C[3]/100)+(INTERVENTIONS!R[0]C[3]/100-INT(INTERVENTIONS!R[0]C[3]/100))*100/60)) + (INT(INTERVENTIONS!R[0]C[2]/100)+(INTERVENTIONS!R[0]C[2]/100-INT(INTERVENTIONS!R[0]C[2]/100))*100/60))*60/1440"
 
        End If
 
    ActiveCell.Offset(1, 0).Select
    Next compteur
 
    Range("A1:A" & nombredeligne).Select
    Selection.Copy
    Range("B1:D" & nombredeligne).Select
    Selection.PasteSpecial Paste:=xlPasteValues
 
    Range("E1:E" & nombredeligne).Select
    Selection.Copy
    Range("F1:H" & nombredeligne).Select
    Selection.PasteSpecial Paste:=xlPasteValues
 
    Range("I1:I" & nombredeligne).Select
    Selection.Copy
    Range("J1:L" & nombredeligne).Select
    Selection.PasteSpecial Paste:=xlPasteValues
 
    Application.CutCopyMode = False
 
 
End Sub
voilamerci d'avance