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 :

entrer des formules en utilisant une macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 123
    Par défaut entrer des formules en utilisant une macro
    Bonjour.
    Voici mon problème. J'utilise un userform pour entrer des valeurs dans les cellules d' un tableau. Les lignes se remplissent au fur et à mesure que l'on crée des nouvelles recettes.
    Par contre je ne sais pas comment faire pour que lorsque l'utilisateur clic sur le boutoncommand4 les formules suivantes soient entrées en même temps. Dans la colonne I=SIERREUR((RECHERCHEV(C70;Ligne!$A$2:$B$50;2;0));0); la colonne J =SIERREUR((H70*I70);"") ; la colonne K =SIERREUR((RECHERCHEV(E70;'Stock OHI'!$A$1:$B$1327;2;0));0) ; la colonne L =SI(J70<K70;"";ABS(K70-J70)), la colonne M =SIERREUR(L70+100;""); la colonne P =SIERREUR((P70*I70);""), la colonne V =F70, la colonne W =I70.
    Voici tous le code de mon userform :
    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
    Option Explicit
    Dim i As Byte
    Dim DerLig As Long
    Private Sub CommandButton3_Click()
    'ActiveSheet.Protect "*69*", UserInterfaceOnly:=True
    Unload Me
    Sheets("Gestion bobine").Select
    Range("A1").Select
    End Sub
    Private Sub CommandButton4_Click()
     
    If ListBox1.Value = "" Then MsgBox "Cocher une valeur !": Exit Sub
    If ListBox2.Value = "" Then MsgBox "Cocher une valeur !": Exit Sub
    If ListBox3.Value = "" Then MsgBox "Cocher une valeur !": Exit Sub
    If ListBox4.Value = "" Then MsgBox "Cocher une valeur !": Exit Sub
    If ListBox5.Value = "" Then MsgBox "Cocher une valeur !": Exit Sub
    If ListBox7.Value = "" Then MsgBox "Cocher une valeur !": Exit Sub
    If ListBox6.Value = "" Then MsgBox "Veuillez remplir les champs correctement!": Exit Sub
    If TextBox1.Value = "" Then MsgBox "Veuillez remplir les champs correctement!": Exit Sub
    If TextBox2.Value = "" Or Not IsNumeric(TextBox2.Value) Then MsgBox "Nombre de caisses non valide!": Exit Sub
     
    TextBox1.Value = UCase(TextBox1.Value)
    Range("E2") = TextBox1.Value
     
    If Range("H2").Value = "NON" Then MsgBox "Formule déja validée": Exit Sub
    Dim ShtD As Worksheet
      Set ShtD = Sheets("BASE")
      ' Récupère la dernière ligne de la feuille de données
      DerLig = ShtD.Range("C500").End(xlUp).Row
    ' colle les valeurs
    ShtD.Range("C" & DerLig + 1).Value = Me.TextBox1.Value
    ShtD.Range("D" & DerLig + 1).Value = Me.ListBox6.Value
    ShtD.Range("E" & DerLig + 1).Value = Me.ListBox1.Value
    ShtD.Range("F" & DerLig + 1).Value = Me.TextBox2.Value
    ShtD.Range("H" & DerLig + 1).Value = Me.ListBox2.Value
    ShtD.Range("N" & DerLig + 1).Value = Me.ListBox5.Value
    ShtD.Range("P" & DerLig + 1).Value = Me.ListBox4.Value
    ShtD.Range("U" & DerLig + 1).Value = Me.ListBox3.Value
    ShtD.Range("V" & DerLig + 1).Value = Me.ListBox7.Value
     
    'ActiveSheet.Protect "*69*", UserInterfaceOnly:=True
    Unload Me
    MsgBox "Formule enregistrée!"
    Sheets("Gestion bobine").Select
    Range("A1").Select
    'ActiveWorkbook.Save
    End Sub
     
     
    Private Sub ListBox6_Click()
     
    If ListBox6.Value = Range("Composants!B5").Value Then ListBox2.RowSource = "Composants!C7"
    If ListBox6.Value = Range("Composants!B6").Value Then ListBox2.RowSource = "Composants!C12"
    If ListBox6.Value = Range("Composants!B7").Value Then ListBox2.RowSource = "Composants!C17"
    If ListBox6.Value = Range("Composants!B8").Value Then ListBox2.RowSource = "Composants!C22"
    If ListBox6.Value = Range("Composants!B9").Value Then ListBox2.RowSource = "Composants!C26:C27"
    If ListBox6.Value = Range("Composants!B11").Value Then ListBox2.RowSource = "Composants!C37"
    '
    If ListBox6.Value = Range("Composants!B5").Value Then ListBox4.RowSource = "Composants!C6"
    If ListBox6.Value = Range("Composants!B6").Value Then ListBox4.RowSource = "Composants!C11"
    If ListBox6.Value = Range("Composants!B7").Value Then ListBox4.RowSource = "Composants!C16"
    If ListBox6.Value = Range("Composants!B8").Value Then ListBox4.RowSource = "Composants!C21"
    If ListBox6.Value = Range("Composants!B9").Value Then ListBox4.RowSource = "Composants!C26:C27"
    If ListBox6.Value = Range("Composants!B11").Value Then ListBox4.RowSource = "Composants!C36"
    '
    End Sub
    Private Sub UserForm_Activate()
     
    Worksheets("Composants").Activate
    Range("E2").Select
    Selection.ClearContents
    TextBox1.Value = ""
     
    ListBox1.RowSource = "COMPOSANTS!A5:A1000"
    ListBox3.RowSource = "COMPOSANTS!A5:A1000"
    ListBox5.RowSource = "COMPOSANTS!A5:A1000"
    ListBox6.RowSource = "COMPOSANTS!B5:B20"
     
    End Sub
     
    Private Sub UserForm_Initialize()
     
    End Sub

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Afin d'éviter de répèter DerLig + 1, je te conseil d'instancier comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DerLig = ShtD.Range("C500").End(xlUp).Row + 1
    pour insérer une formule dans une cellule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("L" & DerLig).FormulaLocal = "=SI(J" & DerLig  & "<K" & DerLig & ";"""";ABS(K" & DerLig & "-J" & DerLig & "))"
    Je suis surpris de cette formule "=SIERREUR" (une erreur de saisie probablement)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 123
    Par défaut
    Bonjour.
    Je suis surpris de cette formule "=SIERREUR" (une erreur de saisie probablement)
    Non il n' y a pas d'erreur. Cela me permet de ne rien mettre dans la cellule.

    Ou placerai-tu ton code stp? Dans la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub CommandButton4_Click()
    ?

    Pour le +1 au niveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DerLig = ShtD.Range("C500").End(xlUp).Row + 1
    pourquoi me fais tu sauter une ligne?
    Je viens d'essayer le code il ne se passe rien.

  4. #4
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    pourquoi me fais tu sauter une ligne?
    Dans ton code initiale tu instancies
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DerLig = ShtD.Range("C500").End(xlUp).Row
    pour ensuite utiliser comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ShtD.Range("C" & DerLig + 1).Value = Me.TextBox1.Value
    ShtD.Range("D" & DerLig + 1).Value = Me.ListBox6.Value
    ...
    Je trouve qu'il est plus simple et plus lisible d'écrire comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     DerLig = ShtD.Range("C500").End(xlUp).Row+ 1
    ShtD.Range("C" & DerLig).Value = Me.TextBox1.Value
    ShtD.Range("D" & DerLig).Value = Me.ListBox6.Value
    ...
    Ou placerai-tu ton code stp?
    Oui, je mettrais dans CommandButton4_Click()


    Pour la formule Sierreur, je n'avais pas vu cette nouveauté Excel 2007

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 123
    Par défaut
    Je pense que la fonction SIERREUR était déjà présent dans la version 2003!
    Pour mon histoire de formule, je suis idiot. Pas besoin de vba. Je répète mes formules jusqu'à la ligne 500. Ainsi lorsque je rentre mes valeurs avec l'userform elles me font les calculs.
    Je suis tenté de mettre résolu mais j'aimerai bien connaitre le code VBA qu'il aurait fallu.
    Désolé mais le tiens ne fonctionne pas.

  6. #6
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Désolé mais le tiens ne fonctionne pas.
    Peux tu etre plus précis. erreur? pas le bon résultat?

    Pour sierreur, cette formule n'existe pas dans les versions antérieurs à 2007
    http://excel.developpez.com/faq/?page=Formules#SIERREUR

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 123
    Par défaut
    Pour sierreur je te crois sur parole!

    Pour le code pas de message d'erreur et rien dans la cellule.

  8. #8
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    post le code et donnes nous la valeur de derlig au moment du passage sur la ligne

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/06/2010, 16h01
  2. [XL-2003] Insertion de formule en utilisant une macro
    Par Paenitentia dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/01/2010, 09h07
  3. utilisation des filtres excel avec une macro access
    Par alexlkds dans le forum VBA Access
    Réponses: 3
    Dernier message: 10/11/2009, 18h35
  4. [VBA] utiliser une macro contenue dans un autre classeur
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 01/02/2006, 18h46
  5. Macro utilisant une macro...
    Par Gogoye dans le forum C
    Réponses: 2
    Dernier message: 29/10/2003, 14h22

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