g crée des macro sur excel ,mais je ne c que les affecter à un bouton ,je voudrais que lapage lefaisse seul
Version imprimable
g crée des macro sur excel ,mais je ne c que les affecter à un bouton ,je voudrais que lapage lefaisse seul
Tu as essayé d'écrire ta macro dans
Code:
1
2
3 Private Sub Workbook_Open() 'MACRO End Sub
:yaisse2:
Il faut, comme le dit flo_flo, définir l'évènement qui lancera ta macro.
par exemple si c'est lors d'une modification dans la colonne "G" il te faudra faire :Code:
1
2
3
4
5 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 7 Then Application.run TaMacro End If End Sub
Aurtograffe mise à part, peux-tu exposer clairement ton problème ? On est tout prêt à t'aider, encore faut-il comprendre ce que tu désires...
Alors on te dira tout ça gentiment :love2: :love: :calin:
ok je vais expliquer ça clairement ,j'ais un projet sur excel mais le probleme c'est que je ne sais pas créé une macro sans l affecter a un boutton .je voudrais que cette operation ce fais automatiquement voila mon prog
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
84
85
86
87
88
89
90
91 Sub Primaire() ''i est un numéro de ligne Dim i As Integer Dim a As Range, f As Range Dim j As Boolean 'idem Dim ligne_début As String Dim ligne_fin As String Dim ligne As Integer 'Invite pour la ligne de départ ligne_début = InputBox("Placer : Ligne début ?") 'La ligne de début doit être numérique et supérieure ou égale à 15 Do Until IsNumeric(ligne_début) And ligne_début >= 15 ligne_début = InputBox("N'importe quoi! Il faut donner un numéro de ligne Supérieur ou égal à 15!!!") Loop 'Invite pour la ligne de fin ligne_fin = InputBox("Placer : Ligne fin ?") 'La ligne de fin doit être numérique et supérieure à la ligne de début Do Until IsNumeric(ligne_fin) And ligne_fin > ligne_début ligne_fin = InputBox("N'importe quoi! Il faut donner un numéro de ligne Supérieur à la ligne de départ. Jean-phi !!!") Loop 'Pour i de la ligne de début a la derniere ligne choisie For i = ligne_début To ligne_fin 'a est la CELLULE (i,4) Set a = Sheets("planning").Cells(i, 5) 'f est la CELLULE (i,5) Set f = Sheets("planning").Cells(i, 7) 'Si a = "Salut" If a = "salut" Then f = "bonjour" Else f = "bye" End If 'Ligne suivante Next i For i = ligne_début To ligne_fin 'a est la CELLULE (i,5) Set a = Sheets("planning").Cells(i, 8) 'f est la CELLULE (i,7) Set f = Sheets("planning").Cells(i, 10) 'Si a = vide alors If a = "" Then f = "" End If 'Ligne suivante Next i End Sub
automatiquement, mais dans quel cas ?Citation:
Envoyé par booskap
- A l'ouverture du classeur ?
- Lors d'une certaine selection ?
- Lors d'une modification dans une certaine cellule ? Ligne ? Colonne ?
- A une certaine heure ?
- A la fermeture du classeur ?
- A l'activation d'une certaine feuille de ton classeur ?
- Un condition certaine mais autre ?
On a beau te taquiner sur quelques petites fautes d'orthographe, ce serait bien si tu lisais tout :).
Je t'explique le pourquoi de ces questions. Dans le cas de l'évènement :L'endroit ou ton code devra être placé changera.
- Ouverture du classeur :
Code:Private Sub Workbook_Open()
- Activation d'une certaine feuille du classeur :
Code:Private Sub Worksheet_Activate()
- Clique droit :
Code:Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
- Activation d'une fenetre Excel :
Code:Private Sub Workbook_WindowActivate(ByVal Wn As Window)
- Etc. ...
Donc une nouvelle fois : Explique clairement ton problème, mais vant tout comprends le parfaitement de ton côté.
Bon, je crois que mordrhim t'a tout bien expliqué... Il ne manque qu'une petite chose... Pour placer ton code dans l'un des événements qu'il indique, tu as plusieurs moyens d'accéder au code.
Je suppose que tu veux lancer ton code à l'ouverture du classeur, auquel cas celui-ci sera placé dans Private Sub Workbook_Open() (dixit mordrhim)
Pour accéder à cette macro, dans Excel, tu vas dans le menu Outils -> Macros -> Visual basic editor
Tu te retrouves alors dans l'éditeur VBA
Deux clics sur VBAproject(nom de ton classeur) font apparaître "Thisworkbook"
Deux clics sur Thisworkbook ouvre une fenêtre
Dans cette fenêtre, deux clics ouvrent "Général" en haut à gauche, là tu fais un clic sur Workbook.
Ouf ! ta macro Private Sub Workbook_Open() apparaît
Dans cette macro tu mets le nom de la macro "Primaire" (sans les guillemets...) Cette ligne suffira pour lancer ta macro.
Dans la fenêtre en haut à droite, tu trouveras tous les événements que peut subir ton classeur -> SheetActivate SheetCalculate... etc.
Je passe à ta macro "Primaire" qui devrait se trouver dans la feuille de code de la feuille de calcul dans laquelle se trouve ton bouton... Elle n'est plus au bon endroit.
Dans l'éditeur VBA, tu vas dans "Insertion" -> Module
Une nouvelle fenêtre apparaît
C'est dans ce module que tu places ta macro Primaire.
On peut faire autrement mais commence déjà par là avant que mordrhim se fâche vraiment :mouarf:
Dernier truc : Pour les macros s'exécutant sur les événements survenant aux feuilles de calculs, leur code se trouve, dans l'éditeur VBA, sous le nom de la feuille concernée, en dessus de ThisWorkbook.
Après, tu visites... ça mord pas ;)
A+
T_T s'pas vrai j'me fache pô !! apres moi j'vais passer pour le méchant de service T_TCitation:
Envoyé par ouskel'n'or
Meuh non ! On a bien vu que tu étais du côté des gentils :mouarf:
c quand une modification dans certaine Ligne Colonne que dois ce produire cette automatisme voici le prog qui dois faire executer l'operation
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187 Sub placer() Dim i As Integer Dim j As Boolean Dim ligne_début As String Dim ligne_fin As String Dim ligne As Integer Dim lig_source As Integer Dim col_source As Integer vehicule = Cells(1, 18) 'Demander le numéro de la ligne de début 'Demander le numéro de la ligne de début 'Invite pour la ligne de départ ligne_début = InputBox("Placer : Ligne début ?") 'La ligne de début doit être numérique et supérieure ou égale à 15 Do Until IsNumeric(ligne_début) And ligne_début >= 15 ligne_début = InputBox("N'importe quoi! Il faut donner un numéro de ligne Supérieur ou égal à 15!!!") Loop 'Invite pour la ligne de fin ligne_fin = InputBox("Placer : Ligne fin ?") 'La ligne de fin doit être numérique et supérieure à la ligne de début Do Until IsNumeric(ligne_fin) And ligne_fin > ligne_début ligne_fin = InputBox("N'importe quoi! Il faut donner un numéro de ligne Supérieur à la ligne de début!") Loop For ligne = ligne_début To ligne_fin If Cells(ligne, 3) <> vehicule Or Cells(ligne, 5) <> 0 Then End If type_piece = Cells(ligne, 2) For col_source = 36 To 50 For lig_source = 7 To 500 'si pas de référence, alors saut2 If Sheets(vehicule).Cells(lig_source, 1) = "" Then lig_source = lig_source + 1 col_source = col_source + 1 End If ' teste type_pièce et soit manquants, ' soit (sur J+3 : stock + encours camions + placé < stock mini) If type_piece = Sheets(vehicule).Cells(lig_source, 3) And _ (Sheets(vehicule).Cells(lig_source, col_source) < 0 Or _ (col_source >= 39 And _ Sheets(vehicule).Cells(lig_source, 6) + _ Sheets(vehicule).Cells(lig_source, 16) + _ Sheets(vehicule).Cells(lig_source, 18) < _ Sheets(vehicule).Cells(lig_source, 7))) _ Then Cells(ligne, 7) = Cells(ligne, 6) * Sheets(vehicule).Cells(lig_source, 5): _ Sheets(vehicule).Cells(lig_source, 18) = Sheets(vehicule).Cells(lig_source, 18) + _ Int(Cells(ligne, 7) * (1 - Sheets(vehicule).Cells(4, 2))): _ Cells(ligne, 5) = Sheets(vehicule).Cells(lig_source, 4): _ Cells(ligne, 4) = Sheets(vehicule).Cells(lig_source, 1): _ End If Next Next Next End End Sub Sub enlever() vehicule = Cells(1, 18) ligne_début = InputBox("Placer : Ligne début ?") 'Test de réponse exacte j = False Do While j = False j = True Do Until IsNumeric(ligne_début) ligne_début = InputBox("N'importe quoi! Il faut donner un numéro de ligne!!!") j = False Loop If ligne_début < 15 Then ligne_début = InputBox("Qu'est ce que tu crois?? La ligne 0 n'existe pas!") j = False End If Loop 'Demander le numéro de ligne de fin ligne_fin = InputBox("Placer : Ligne fin ?") 'Test de réponse exacte j = False Do While j = False j = True Do Until IsNumeric(ligne_fin) ligne_fin = InputBox("N'importe quoi! Il faut donner un numéro de ligne!!!") j = False Loop If ligne_fin <= ligne_début Then ligne_fin = InputBox("Qu'est ce que tu crois?? La ligne 0 n'existe pas!") j = False End If ' balaye toutes lignes du tableau "planning" For ligne = ligne_début To ligne_fin test = 0 If Cells(ligne, 3) <> vehicule Or Cells(ligne, 5) = 0 Then ref = Cells(ligne, 4) For lig_source = 7 To 400 If Sheets(vehicule).Cells(lig_source, 2) = "" Then enmoins = Int(Cells(ligne, 7) * (1 - Sheets(vehicule).Cells(4, 2))) If ref = Sheets(vehicule).Cells(lig_source, 1) _ And Sheets(vehicule).Cells(lig_source, 18) >= enmoins _ Then GoSub enleve_ligne End If Next End If Next End Sub Sub enleve_ligne() '============ Sheets(vehicule).Cells(lig_source, 18) = Sheets(vehicule).Cells(lig_source, 18) - enmoins Cells(ligne, 5) = "" Cells(ligne, 4) = "" Cells(ligne, 7) = "" Cells(ligne, 8) = "" Cells(ligne, 9) = "" ' enleve des pièces si un mat à été ajouté If Cells(ligne, 10) = "1 MAT +" _ Then Cells(ligne, 6) = Cells(ligne, 6) - 1: _ Cells(ligne, 10) = "" ' enlever Macro ' Macro enregistrée le 11/07/2007 par lahcen.boumdine ' ' End Sub
C'est donc dans les événements de ta feuille de calculs que tu dois mettre ton code. Soit quand tu changes le contenu de la cellule :
Soit quand tu changes de celluleCode:
1
2
3 Private Sub Worksheet_Change(ByVal Target As Range) End Sub
Dans les deux cas, Target te donne l'adresse de la cellule active.Code:
1
2
3 Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub
Pour accéder à la feuille de code de la feuille de calculs, Editeur VBA -> + deux clics sur le nom de la feuille. Après, tu visites ;)
Edit
Code:
1
2 Target.column 'te donne le N° de colonne Target.row '... le N° de ligne
tout compte fais je dois garder les boutons ,mais merci pour l aide elle va me servir pour autre chose
Tout ca pour ca ^^
non g tre bien compris g meme reussi a le faire mais il prefere que je le laisse comme ca mon tuteur de stage
si je veus que mon operation ce passe lorsqu'une macro existante tourne ,je peu l'utilisé ou pas ?
c'est un bouton est-ce que c cette ligne de code qu il faut utilisé ?
Code:
1
2
3 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) End Sub