Remplacer les formules par un code VBA

Bonjour à tous,

j'aimerai solliciter votre aide svp,

je souhaite transformé des formules en macro, pour que mon fichier soit rapide, car il est volumineux actuellement,

voici les formules que je souhaite transformer:

Colonne X =ANNEE(L2)

Colonne Y =SI(GAUCHE(P2;12)="Préventif N°";SI(DROITE(GAUCHE(P2;20);1)=" ";DROITE(GAUCHE(P2;19);1);DROITE(GAUCHE(P2;20);2));"")

Colonne Z =SI(Y2="";"-";SI(D2="T";SI(Y2="1";SI(FIN.MOIS(Q2;0)-FIN.MOIS(L2;0)>1;"NOK";"OK");SI(FIN.MOIS(Q2;0)-FIN.MOIS(L2;1)>1;"NOK";"OK"));"Retard"))

je vous remercie d'avance !!

Salut,

Sans fichier modèle, ni exemples divers, ce n'est pas évident de t'aider.

J'ai tenté de trouver une macro afin de calculer les résultats attendus en X2 et Y2. Pour l'instant il faut la déclencher à l'aide du bouton en place, mais on pourrait imaginer de la déclencher automatiquement à la suite d'un évènement quelconque.

Si je ne suis complètement à côté de la plaque, fournis-moi des exemples pour ces trois formules (sur la base de tes propres formules), sinon au moins pour la dernière formule que j'ai laissé de côté pour l'instant.

A te relire.

5essai.xlsm (19.95 Ko)

Salut Yvouille,

je te remercie pour ton retour,

voici mon fichier si ça peut t'aider et pour plus de précision

je te remercie d'avance,

Imad.

5essai.zip (261.69 Ko)

Salut Yvouille, Imad SIO

essayer ce code :

Sub test()

drlngX = 20 'nombres de les contenant les donnes sur colonne "X" exmple=20

For j = 2 To drlngX
Cells(j, "X") = Year(Cells(j, "L"))
Next

drlngY = 20 'nombres de les contenant les donnes sur colonne "Y" exmple=20
For m = 2 To drlngY
    If Left(Cells(m, "P"), 12) = "Préventif N°" Then
       If Right(Left(Cells(m, "P"), 20), 1) = " " Then
       Cells(m, "Y") = Right(Left(Cells(m, "P"), 19), 1)
       Else
       Cells(m, "Y") = Right(Left(Cells(m, "P"), 20), 2)
       End If
   Else
      Cells(m, "Y") = ""
  End If
 Next

'########################"""

For i = 2 To 20
If Cells(i, "Y") = "" Then
   Cells(i, "Z") = "-"
Else
   If Cells(i, "D") = "T" Then
      If Cells(i, "Y") = "1" Then
      '---------#################---------
         If Application.EoMonth(Cells(i, "Q"), 0) - Application.EoMonth(Cells(i, "L"), 0) > 1 Then
         Cells(i, "Z") = "NOK"
         Else
         Cells(i, "Z") = "OK"
         End If

      '---------#################---------
      Else
        '---------#################---------
         If Application.EoMonth(Cells(i, "Q"), 0) - Application.EoMonth(Cells(i, "L"), 1) > 1 Then
         Cells(i, "Z") = "NOK"
         Else
         Cells(i, "Z") = "OK"
         End If
        '---------#################---------
      End If
   Else
     Cells(i, "Z") = "Retard"
   End If

End If
Next

End Sub

Crdlmt.

Salut amir,

le code fonctionne très bien,

mais je souhaite l'appliquer sur 1000 lignes par exemple,

quand je remplace le 20 par 1000 ça bug

merci

Salut

dit moi sur quelle ligne bug et avec quel message !?

drlgn = Cells(Rows.Count, "A").End(xlUp).Row

for i=2 to drlgn

on utilise une instruction comme ceci pour déterminer la dernière ligne non vide sur une colonne , a la place de 20 tu peux mettre "drlgn"

mais n’oublie pas de changer la lettre de colonne consternée.

Salut AMIR,

il s'arrête à la ligne 452, alors que moi je le veux jusqu'à la dernière ligne non vide.

j'ai aussi une autre macro a modifier si tu peux le faire ça serai adorable de ta part,

Merci

Imad

mais normalement lorsque il y a une erreur ,une message va apparaitre et excel te colore une ligne jaune dans l’éditeur Vba

quel est le contenu de ce message et quel ligne de code !?

j'ai aussi une autre macro a modifier si tu peux le faire ça serai adorable de ta part

OK pas de problème

Amir,

c'est bon j'ai réglé le problème,

la macro que je souhaite modifier est la suivante:

Sub MAJ_travaux_termines()
Application.ScreenUpdating = False
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim x As Integer
Dim y As Integer
Dim z As Integer
Dim A As String
Dim b As String 'nom fichier préventif
Dim c As String 'chemin accès fichier préventif
A = ""
b = "MAINTENANCE PREVENTIVE PROGRAMMEE.xlsm"
'chemin de TG
'c = "B:\TRAVAIL\SUIVI\PREVENTIF\"
'chemin de ST
c = "\\Q01EUFS1\Group\Communs\Services Techniques\Travaux\SUIVI\PREVENTIF\"

j = 0
k = 2
y = 0
i = 2
x = 4
'z = Worksheets("TRVX FINIS").Range("AF1").Value
'Comptage du nombre de lignes dans "TRVX FINIS"
Do
    If Worksheets("TRVX FINIS").Cells(i, 1).Value = "" Then
        j = j + 1
    Else
        j = 0
    End If
    i = i + 1
Loop Until j = 5
z = i - 5
i = 2
j = 0
'effacer ancien préventif
Worksheets("preventif").Range("A2:R300").Clear
'ouverture classeur préventif
Workbooks.Open (c & b)
c = "TRAVAUX.xlsm"
Workbooks(c).Activate

Do
    If Worksheets("TRVX EN COURS").Cells(i, 4).Value = "T" And _
    Not Worksheets("TRVX EN COURS").Cells(i, 17).Value = "" Then
        'vérifier si préventif
        If Left(Worksheets("TRVX EN COURS").Cells(i, 16).Value, 9) = "Préventif" Then
            A = Mid(Worksheets("TRVX EN COURS").Cells(i, 16).Value, 13, 3)
            Do
                If A = Workbooks(b).Worksheets("programme global").Cells(x, 1).Value Then
                    Worksheets("PREVENTIF").Cells(k, 1).Value = Worksheets("TRVX EN COURS").Cells(i, 1).Value
                    Worksheets("PREVENTIF").Cells(k, 2).Value = A
                    Worksheets("PREVENTIF").Cells(k, 3).Value = Worksheets("TRVX EN COURS").Cells(i, 6).Value
                    If IsDate(Workbooks(b).Worksheets("programme global").Cells(x, 8).Value) Then Worksheets("PREVENTIF").Cells(k, 4).Value = Workbooks(b).Worksheets("programme global").Cells(x, 8).Value
                    If IsDate(Worksheets("TRVX EN COURS").Cells(i, 17).Value) Then Worksheets("PREVENTIF").Cells(k, 5).Value = Worksheets("TRVX EN COURS").Cells(i, 17).Value
                    Worksheets("PREVENTIF").Cells(k, 6).Value = Worksheets("PREVENTIF").Cells(k, 5).Value - Worksheets("PREVENTIF").Cells(k, 4).Value
                    'Workbooks(b).Worksheets("programme global").Cells(x, 12).Value = ""
                    If IsDate(Worksheets("TRVX EN COURS").Cells(i, 17).Value) Then Workbooks(b).Worksheets("programme global").Cells(x, 16).Value = Worksheets("TRVX EN COURS").Cells(i, 17).Value
                    If IsDate(Worksheets("TRVX EN COURS").Cells(i, 17).Value) Then Workbooks(b).Worksheets("programme global").Cells(x, 8).Value = Workbooks(b).Worksheets("programme global").Cells(x, 17).Value
                    Workbooks(b).Worksheets("programme global").Cells(x, 30).Value = 1 + Workbooks(b).Worksheets("programme global").Cells(x, 30).Value
                    If IsDate(Worksheets("TRVX EN COURS").Cells(i, 17).Value) Then Worksheets("PREVENTIF").Cells(k, 7).Value = Workbooks(b).Worksheets("programme global").Cells(x, 8).Text
                    k = k + 1
                    y = 1
                End If
                x = x + 1
            Loop Until y = 1 Or x = 1000
            x = 4
            y = 0
        End If
        'couper coller la ligne
        Worksheets("TRVX EN COURS").Range(Cells(i, 1), Cells(i, 21)).Copy
        Worksheets("TRVX FINIS").Select
        Worksheets("TRVX FINIS").Cells(z, 1).Select
        'ActiveSheet.Paste
        Worksheets("TRVX EN COURS").Activate
        'Worksheets("TRVX EN COURS").Range(Cells(i, 1), Cells(i, 20)).Delete Shift:=xlShiftUp
        i = i + 1
        z = z + 1
    ElseIf Worksheets("TRVX EN COURS").Cells(i, 1).Value = "" Then
        j = 1
    Else
        i = i + 1
    End If
Loop Until j = 1 Or i = 1500
Workbooks(b).Close savechanges:=True
'tri des préventifs effectués
    Worksheets("PREVENTIF").Activate
    Range("A2:G300").Select
    ActiveWorkbook.Worksheets("PREVENTIF").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("PREVENTIF").Sort.SortFields.Add Key:=Range( _
        "F2:F300"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("PREVENTIF").Sort
        .SetRange Range("A1:G300")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
Worksheets("TRVX EN COURS").Activate
'Worksheets("TRVX FINIS").Range("AF1").Value = z
Workbooks(c).Save
Application.ScreenUpdating = True
End Sub

le fichier qui s'appelle "TRAVAUX" contient un onglet qui s'appelle "TRVX FINIS" , mais mon fichier est lourd,

donc je veux enlever l'onglet "TRVX FINIS" , et le mettre dans un classeur tout seul qui va s'appeler "TRVX FINIS",

mais quand j'exécute la macro, je ne veux pas que ce nouveau classeur "TRVX FINIS" s'ouvre.

Merci infiniment pour ton aide.

Imad.

tu utilises l’onglet "TRVX FINIS" pour importer les données ou pour exporter les données !

il y a plusieurs opérations sur l'onglet TRVX FINIS comme c'est indiqué sur la macro

moi je souhaite avoir cet onglet dans un classeur tout seul et garder les mêmes opérations

mais quand j'exécute la macro, je ne veux pas que ce nouveau classeur "TRVX FINIS" s'ouvre.

la macro doit ouvrir le classeur pour lire/ecrire sur "TRVX FINIS" et ensuite le ferme

TOUT A FAIT AMIR

Salut

on commence

pour quoi tu utilise ce code :

'Comptage du nombre de lignes dans "TRVX FINIS"
Do
    If Worksheets("TRVX FINIS").Cells(i, 1).Value = "" Then
        j = j + 1
    Else
        j = 0
    End If
    i = i + 1
Loop Until j = 5

il que de operations sur longlet "TRVX FINIS"

Worksheets("TRVX FINIS").Cells(z, 1).Select
        'ActiveSheet.Paste
'Worksheets("TRVX FINIS").Range("AF1").Value = z

Salut amir,

je t'explique bien,

en faite je veux que la macro fonctionne tel qu'elle est,

sauf que je veux mettre l'onglet "TRVX FINIS" sur un autre classeur,

donc il faut déclarer le nom et chemin de ce classeur qui contient l'onglet "TRVX FINIS"

Oui , mais pourquoi tu as désactivé les deux opérations :

il que de opérations sur l’onglet "TRVX FINIS"

Worksheets("TRVX FINIS").Cells(z, 1).Select
        'ActiveSheet.Paste
'Worksheets("TRVX FINIS").Range("AF1").Value = z

salut amir,

J'aimerai remplacer mes formules par du code vba, voici mes formules en dessous, et je te remercie infiniment si tu peux me les faire

ps : TRVX FINIS est un onglet

imad.

formule 1 : =NB.SI.ENS('TRVX FINIS'!$J:$J;"am";'TRVX FINIS'!$X:$X;$AI$1;'TRVX FINIS'!$M:$M;"raff spéciale";'TRVX FINIS'!$AA:$AA;$AI$2)

formule 2 : =NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"at. esters";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"at. fluides";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"usine 1 ";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"usine 1&2";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"vapeur";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"pastillage";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"bureaux";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"chateau";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"entretien";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"force";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"laboratoire";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"vestiaires";'TRVX FINIS'!AA:AA;$AI$2)

formule 3: =NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"at. concrètes";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"cuverie";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"cuverie 2020 ";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"ecaillage";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"filtration fine";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"mag 1500";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"mg 1500";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"magasins";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"malaxage";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"raff. 2";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"savonerie";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"usine 2";'TRVX FINIS'!AA:AA;$AI$2)

Salut Imad

Soyez le bienvenu mais :

Ton dernier message sur ce poste doit être :

" Merci comme même j’ai pu le faire tout seul a bientôt :) " et pas un autre demande après quelque jours d’absences !

Pour ton demande tu peux attendre sur l’autre poste, d’après ce que j’ai vu sur ce poste et l autre, tu veux remplacer toutes les formules mêmes les simples.

Seulement, explique que tu veux remplacer le tous par du code VBA ; enfin c’est ce que tu veux !

Crdlms

Slt amir

En fait le j’ai cru que je t’ai déjà répondu

Mais sinon oui 1000 merci

Tu m’as beaucoup aidé

je souhaite aussi coder ces formules en VBA si tu peux m’aider

Rechercher des sujets similaires à "remplacer formules code vba"