optimiser un fichier

J

Jacques

Guest
Bonjour à tous,

Une petite question pour optimiser mon fichier joint, est il possible par l'intermédiaire de VBA de copier automatiquement les formule contenu sur la ligne 5 en ligne 6 dès que l'on rempli par exemple la case A6 (feuille saisie).

Le soucis étant que si ça n'est pas possible, je dois prévoir entre 8000 et 10000 ligne de calcul ce qui rallonge énormément la durée du calcul automatique dont je ne peux me passer sur ce fichier.

J'espère avoir été assez explicite, je vous remercie d'avance de l'aide que vous pourrez m'apporter.
Désolé s'il y a un fil existant sur le sujet, je ne l'ai pas trouvé dans la recherche.

Jacques
 

Pièces jointes

  • Essaicopieformule.zip
    49.6 KB · Affichages: 19
R

Robert

Guest
Salut Jacques, salut le forum,

Ci-dessous la macro modifiée de l'événement Change de l'onglet Saisie. Maintenant quand tu entres un date les formules s'écrivent. Attention, si tu effaces la date, toutes la ligne s'efface.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Isect As Range
Static IsOn As Boolean
If IsOn Then
IsOn = False
Exit Sub
End If

'***************** PARTIE RAJOUTÉE ****************************
If Target.Column = 1 Then 'si le changement a lieu dans la colonne A
If Target.Value = "" Then 'condition : si la date est effacée
'efface toute la ligne
IsOn = True: Range(Cells(Target.Row, 2), Cells(Target.Row, 44)).ClearContents
Target.Select 'sélectionne la cellule
Exit Sub 'sort de la procédure
End If 'fin de la condition
'place les formules dans les cellules adéquates
IsOn = True: Target.Offset(0, 1).FormulaR1C1 = _
"=IF(RC[4]="""","""",VLOOKUP(RC[4],Données,2))"
IsOn = True: Target.Offset(0, 3).FormulaR1C1 = _
"=IF(RC[2]="""","""",VLOOKUP(RC[2],Données,3))"
IsOn = True: Target.Offset(0, 4).FormulaR1C1 = _
"=IF(RC[1]="""","""",IF((VLOOKUP(RC[1],Données,5))=0,(VLOOKUP(RC[1],Données,3)),(VLOOKUP(RC[1],Données,5))))"
IsOn = True: Target.Offset(0, 6).FormulaR1C1 = "=IF(RC[-1]="""",""0"",VLOOKUP(RC[-1],Données,4))"
IsOn = True: Target.Offset(0, 34).FormulaR1C1 = "=SUM(RC[-26]:RC[-1])"
'cette fonction ci-dessous plante chez moi avec la version Excel 2000...
IsOn = True: Target.Offset(0, 36).FormulaR1C1 = "=NO.SEMAINE(RC[-36])"
IsOn = True: Target.Offset(0, 37).FormulaR1C1 = "=SUM(RC[-3]:RC[-2])"
IsOn = True: Target.Offset(0, 38).FormulaR1C1 = "=RC[-4]*RC[-32]"
IsOn = True: Target.Offset(0, 39).FormulaR1C1 = "=IF(RC[-2]=0,0,RC[-5]*100/RC[-2])"
IsOn = True: Target.Offset(0, 40).FormulaR1C1 = "=RC[-3]*RC[-34]"
IsOn = True: Target.Offset(0, 41).FormulaR1C1 = "=CONCATENATE(RC[-5],""/"",RC[-40],""/"",RC[-36])"
IsOn = True: Target.Offset(0, 42).FormulaR1C1 = "=CONCATENATE(RC[-6],""/"",RC[-41],""/"",RC[-38])"
IsOn = True: Target.Offset(0, 43).FormulaR1C1 = "=CONCATENATE(RC[-7],""/"",RC[-42])"
Exit Sub 'sort de la procédure
End If 'fin de la condition "changement dans colonne A"

'***************** FIN PARTIE RAJOUTÉE ************************

Set Isect = Application.Intersect(Target, Range("désignationsaisie"))
If Isect Is Nothing Then Exit Sub
With Target
If .Rows.Count > 1 Or .Columns.Count > 1 Then Exit Sub
If .Value = "" Then Exit Sub
Range("F1").Value = .Value
With .Validation
.Modify Formula1:="=Listenomsdonnées"
End With
End With
SendKeys "%{DOWN}", False
IsOn = True
End Sub

À plus,

Robert
 

Discussions similaires

Statistiques des forums

Discussions
312 664
Messages
2 090 676
Membres
104 633
dernier inscrit
benabidwajih