Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/11/2011, 18h05   #1
Candidat au titre de Membre du Club
 
Inscription : juin 2011
Messages : 122
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 122
Points : 13
Points : 13
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 :
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
Fred4345 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 18h14   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 920
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 920
Points : 7 237
Points : 7 237
Bonjour,

Afin d'éviter de répèter DerLig + 1, je te conseil d'instancier comme cela
Code :
DerLig = ShtD.Range("C500").End(xlUp).Row + 1
pour insérer une formule dans une cellule
Code :
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)
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 18h35   #3
Candidat au titre de Membre du Club
 
Inscription : juin 2011
Messages : 122
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 122
Points : 13
Points : 13
Bonjour.
Citation:
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 :
Private Sub CommandButton4_Click()
?

Pour le +1 au niveau
Code :
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.
Fred4345 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 19h33   #4
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 920
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 920
Points : 7 237
Points : 7 237
Citation:
pourquoi me fais tu sauter une ligne?
Dans ton code initiale tu instancies
Code :
 DerLig = ShtD.Range("C500").End(xlUp).Row
pour ensuite utiliser comme suit
Code :
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 :
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
...
Citation:
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
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 20h02   #5
Candidat au titre de Membre du Club
 
Inscription : juin 2011
Messages : 122
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 122
Points : 13
Points : 13
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.
Fred4345 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 20h15   #6
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 920
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 920
Points : 7 237
Points : 7 237
Citation:
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
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 20h21   #7
Candidat au titre de Membre du Club
 
Inscription : juin 2011
Messages : 122
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 122
Points : 13
Points : 13
Pour sierreur je te crois sur parole!

Pour le code pas de message d'erreur et rien dans la cellule.
Fred4345 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 20h26   #8
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 920
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 920
Points : 7 237
Points : 7 237
post le code et donnes nous la valeur de derlig au moment du passage sur la ligne
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h53.


 
 
 
 
Partenaires

Hébergement Web