IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

transformer formule en code


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut transformer formule en code
    bonsoir à tous,

    on m'a chargé de travailler sur un fichier qui comporte du code VBA car je connais un (petit) peu de VBA
    mais là je cale

    je dois transformer ceci ==>
    Code formule : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(OLDJanvier!F9<>"";(INDEX(congés;EQUIV(OLDJanvier!$F9;Diver!$B$3:$B$23;0);3))+(SI(OLDJanvier!$E9<>"";SI(OLDJanvier!$E9<=Diver!$B$28;Diver!$B$31;)));)

    pour l'insérer dans :
    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    Dim x As Byte
    Dim T As Variant
    Dim T1 As Variant
     
    For x = 9 To 39
     
        If Application.Intersect(Target, Range("B9:G39")) Is Nothing Then
        Else
            If (Range("D" & x) - Range("C" & x)) <= DIVERS.Range("A6") Then
            T = DIVERS.Range("A5")
            Else
            T = (Range("D" & x) - Range("C" & x)) - DIVERS.Range("A5")
            End If
    '        If Range("F" & x) <> "" Then
    '       T1 =
    '       else
    '       end if
     
     
            Range("H" & x) = (Range("E" & x) - Range("B" & x) + Range("G" & x)) - T + T1 'calcul prestation journalière
            Range("I" & x) = Range("H" & x) - DIVERS.Range("A4") 'calcul boni du jour
            Range("J" & x) = Range("I" & x) * -1 'calcul mali du jour
     
            Range("L" & x) = Range("K" & x) * -1 'calcul mali du mois
            Range("M" & x) = Range("K" & x) + Range("C3") - Range("C4") 'calcul boni cumul
            Range("N" & x) = Range("M" & x) * -1 'calcul mali cumul
    Merci je bloque grave

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Servez-vous de l'enregistreur de macro pour obtenir votre formule en VBA, ce qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.FormulaR1C1 = "=IF(OLDJanvier!R[7]C[-3]<>"""",(INDEX(""congés"",MATCH(OLDJanvier!R[7]C6,Diver!R3C2:R23C2,0),3))+(IF(OLDJanvier!R[7]C5<>"""",IF(OLDJanvier!R[7]C5<=Diver!R28C2,Diver!R31C2))),)"
    Remplacez ensuite "ActiveCell" par la plage sur laquelle doit s'appliquer cette formule, exemple plage G1:G20
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("G2:G20").FormulaR1C1 = "=IF(OLDJanvier!R[7]C[-3]<>"""",(INDEX(congés,MATCH(OLDJanvier!R[7]C6,Diver!R3C2:R23C2,0),3))+(IF(OLDJanvier!R[7]C5<>"""",IF(OLDJanvier!R[7]C5<=Diver!R28C2,Diver!R31C2,))),)"
    Cdlt

  3. #3
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2018
    Messages : 12
    Par défaut
    Bonsoir,

    Le code devrait ressembler à ça.

    Pourquoi à tu choisi c'est évènement ? (Private Sub Worksheet_SelectionChange(ByVal Target As Range))
    Besoin que le code démarre sur une sélection?

    J'ai mis les variable en variant car je connait le format des valeurs (Texte "as string", chiffre "as long").
    Si c'est du texte l'addition n'est plus la même, cela devient (resultaFinal = resulta1 & " " & résulta2).

    Je pense bien que ce code doit être travaillé encore, car il manque des infos, mais l'idée est là!

    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
     
     
    Sub Test()	
            Dim oCherche as Range
    	Dim resulta1 as variant	
    	Dim resulta2 as variant
    	Dim resultaFinal as variant
     
    	'** SI(OLDJanvier!F9<>"";
    	if worksheet ("OLDJanvier").range("E=F9").value <> "" then
     
    		'** INDEX(congés;EQUIV(OLDJanvier!$F9;Diver!$B$3:$B$23;0);3)
    		set oCherche = range("B3:B23").find (what:="congés", lookAt:=xlEntier)
    		resulta1 = oCherche.Offset(0,3).value
     
    			'** SI(OLDJanvier!$E9<=Diver!$B$28;
    			if worksheet ("OLDJanvier").range("E9").value <= worksheet ("Diver").range("B28").value then
    				'** Diver!$B$31;
    				resulta2 = worksheet ("Diver").range("B31").value
    			'** ;"")
    			else
    				resulta2 = ""
    			end if
     
    	else
    		resulta1 = ""
    	end if
     
    		'** Faux gérer le cas des 2 résultats vide
    		resultaFinal = resulta1 + résulta2
     
     
    	'** Ici tu vois comment le visualiser comme msgbox ou l'écrire sur une cellule:
    		MsgBox resultaFinal
    end sub

Discussions similaires

  1. [XL-2010] Transformation formule en code vba
    Par r.morel dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 04/09/2014, 17h06
  2. Transformation d'un code turbopascal en C#
    Par indice dans le forum C#
    Réponses: 26
    Dernier message: 07/12/2007, 12h14
  3. Parseur formule Excel <-> Code VBA
    Par gretch dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/08/2007, 18h08
  4. l'astuce date et heure de maintenant sans formule ni code
    Par zazaraignée dans le forum Contribuez
    Réponses: 5
    Dernier message: 14/08/2007, 13h54
  5. [Outils] Comment transformer du vieux code VB en .Net ?
    Par linux dans le forum EDI/Outils
    Réponses: 10
    Dernier message: 17/02/2006, 10h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo