Copie d'une macro (x30) ?
Bonjour à tous, je suis nouveau ici et espère (mais j'en suis presque sur) que vous pourrez m'aider dans mon (voir mes futurs) problèmes !!
Je suis en train de réaliser une feuille de calcul excel en utilisant les formulaires d'Excel et les macros afin d'intéragir facilement avec le logiciel ...
Lorsque je clique sur le bouton AJOUTER, j'ai une userform qui s'ouvre, je remplis des champs et une fois que je valide, cela me complète les 4 colonnes de chacuns de titres (Titre1, Titre2, Titre3), jusque là tout va bien !
Seulement le problème, c'est que pour faire tout ca je suis passer par le langage VBA et que j'aimerais pour le tableau d'en dessous (2 janvier) effectuer exactement la même opération (avec un bouton AJOUTER) mais que les modifications se fasse dans le second tableau, je peux bien évidemment, copier coller tout le code VBA du premier bouton en l'adaptant au second, mais je devrais faire ca 30 fois...
Y a t'il moyen, d'automatiser tout ça ? C'est à dire comme sur Excel lorsqu'on tire des cellules pour recopier une formule.
Merci de votre aide, et dites moi si vous avez besoin des codes VBA utilisé, je vous remercie GRANDEMENT !
Je vous donne quand même mon code VBA que j'ai réussit à modifier (en utilisant un i) :
Lorsqu'on clique sur le bouton envoyer (du formulaire qui apparait) :
Private Sub CommandButton1_Click()
Sheets("JAN").Range("B" & i).Value = TextBox1.Value
Sheets("JAN").Range("B" & (i + 1)).Value = TextBox2.Value
Sheets("JAN").Range("B" & (i + 2)).Value = TextBox3.Value
Sheets("JAN").Range("D" & i).Value = TextBox4.Value
Sheets("JAN").Range("D" & (i + 1)).Value = TextBox5.Value
Sheets("JAN").Range("D" & (i + 2)).Value = TextBox6.Value
Unload UserForm1
End SubEn fait mon problème maintenant serait de définir ce i, en fonction du jour, par exemple :
- Pour le 1 er Janvier : i = 8
- Pour le 2 Janvier : i = 13
J'ai deux boutons AJOUTER, et les codes VBA qui vont avec :
Private Sub Button1_Click()
i = 8
Load UserForm1
UserForm1.Show
End SubPrivate Sub Button2_Click()
i = 13
Load UserForm1
UserForm1.Show
End SubSeulement, le nombre i (définit dans le Button1 ou Button2) n'est pas pris en compte lorsque je clique sur le CommandButton1...
Merci de votre aide
Bonjour et bienvenu,
C'est faisable. Par contre, si nous avons ton fichier le code vba qui va avec, ça pourra résoudre plus facilement. On pourra imaginer que quand tu cliques sur le bouton rajouter, le programme tourne et ce jusqu'à ce que tu décides de mettre fin à la procédure d'ajout en mettant un mot "Fin" par exemple.
Cdlt,
Bonjour, merci de ta réponse, voilà le fichier :
https://www.excel-pratique.com/~files/doc/formulaire.xls
Merci encore
Re,
Remplace le code suivant :
Hadidman a écrit :Private Sub CommandButton1_Click()
Sheets("JAN").Range("B" & i).Value = TextBox1.Value
Sheets("JAN").Range("B" & (i + 1)).Value = TextBox2.Value
Sheets("JAN").Range("B" & (i + 2)).Value = TextBox3.Value
Sheets("JAN").Range("D" & i).Value = TextBox4.Value
Sheets("JAN").Range("D" & (i + 1)).Value = TextBox5.Value
Sheets("JAN").Range("D" & (i + 2)).Value = TextBox6.Value
Unload UserForm1
End Sub
par :
Private Sub CommandButton1_Click()
nb = InputBox("Inscrire le jour")
i = 8 + 5 * (nb-1)
Sheets("JAN").Range("B" & i).Value = TextBox1.Value
Sheets("JAN").Range("B" & (i + 1)).Value = TextBox2.Value
Sheets("JAN").Range("B" & (i + 2)).Value = TextBox3.Value
Sheets("JAN").Range("D" & i).Value = TextBox4.Value
Sheets("JAN").Range("D" & (i + 1)).Value = TextBox5.Value
Sheets("JAN").Range("D" & (i + 2)).Value = TextBox6.Value
Unload UserForm1
End Suble premier jour est à 1 et le 2è jour est à 2 et ainsi de suite.
Et dans la boîte de dialogue inscrit le nième jour. A tester.
En attendant une autre solution.
Cdlt,
Merci beaucoup pour ta réponse !!
C'est effectivement une solution à envisager, seulement le problème, c'est que ce sera des salariés qui vont utiliser cette interface et j'aimerais qu'il n'est pas à saisir ce nombre, je vais donc vois si l'on peut récupérer un nombre en fonction de l'emplacement du bouton... fin je doute que ce soit possible
En fait, pour résoudre mon problème, j'aimerais juste savoir comment garder une constante, ou un nombre qui passe du :
Private Sub Button1_Click() au Private Sub CommandButton1_Click()
Merci à vous !
Bonsoir,
une autre approche,
tu fais un double clic sur la date, et l'usf s'ouvre
Le code de la feuille :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If (Target.Row - 2) Mod 5 = 0 Then
MaVar = Target.Row + 1
UserForm1.Show
Cancel = True
End If
End Suble code dans un module standard :
Public MaVar As Longet le code de l'usf :
Private Sub CommandButton1_Click()
Sheets("JAN").Range("B" & MaVar).Value = TextBox1.Value
Sheets("JAN").Range("B" & (MaVar + 1)).Value = TextBox2.Value
Sheets("JAN").Range("B" & (MaVar + 2)).Value = TextBox3.Value
Sheets("JAN").Range("D" & MaVar).Value = TextBox4.Value
Sheets("JAN").Range("D" & (MaVar + 1)).Value = TextBox5.Value
Sheets("JAN").Range("D" & (MaVar + 2)).Value = TextBox6.Value
Unload UserForm1
End Sub
Private Sub CommandButton2_Click()
Sheets("JAN").Range("B" & MaVar).Value = TextBox1.Value
Sheets("JAN").Range("B" & (MaVar + 1)).Value = TextBox2.Value
Sheets("JAN").Range("B" & (MaVar + 2)).Value = TextBox3.Value
Sheets("JAN").Range("D" & MaVar).Value = TextBox4.Value
Sheets("JAN").Range("D" & (MaVar + 1)).Value = TextBox5.Value
Sheets("JAN").Range("D" & (MaVar + 2)).Value = TextBox6.Value
Sheets("JAN").Range("F" & MaVar).Value = TextBox7.Value
Sheets("JAN").Range("F" & (MaVar + 1)).Value = TextBox8.Value
Sheets("JAN").Range("F" & (MaVar + 2)).Value = TextBox9.Value
Sheets("JAN").Range("H" & MaVar).Value = TextBox10.Value
Sheets("JAN").Range("H" & (MaVar + 1)).Value = TextBox11.Value
Sheets("JAN").Range("H" & (MaVar + 2)).Value = TextBox12.Value
Unload UserForm1
End Suble fichier :
Re-,
pour éviter des saisies sur des colonnes non désirées, tu peux remplacer le code de la feuille par :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If (Target.Row - 2) Mod 5 = 0 And Cells(Target.Row, Target.Column).Value <> "" And Target.Column = 2 Then
MaVar = Target.Row + 1
UserForm1.Show
Cancel = True
End If
End SubPS : ce code suppose que tes dates sont dans les lignes 7, 12, 17..... soit toutes les 5 lignes à partir de la ligne 7
Merci à toi pour tes réponses, j'ai été surpris par la rapidité et la facilité de tes réponses !
J'ai pris 10minutes pour bien comprendre le code que tu as utilisé, j'ai compris entièrement celui que tu as posté en premier, seulement au niveau du deuxième, je n'ai pas compris cette partie :
And Cells(Target.Row, Target.Column).Value <> "" And Target.Column = 2Pourrais-tu m'éclaircir ?
Merci
Bonjour,
cette partie de code sert comme je te l'ai dit de garde-fou
Pour que l'usf s'affiche, il faut que l'on double-clique sur la ligne 7 modulo 5
Mais aussi que le numéro de la colonne soit 2 (comme tes cellules sont fusionnées au niveau de la date, le numéro est le numéro de la première colonne soit B : numéro 2)
Et enfin que la cellule soit non vide. Comme dit plus haut, il s'agit d'une fusion. Donc si tu cliques au milieu, il faut récupérer la valeur de la première cellule de la fusion et de la même ligne et vérifier qu'elle n'est pas vide....
Bonne journée
(si tu m'as compris....)
Ok, merci j'ai tout compris
J'ai modifié un peu le code car j'ai changé la présentation de ma feuille Excel, j'ai rajouté des feuilles pour tous les mois, et j'ai réussit à créer une variable "Mois" que j'utilise en fonction de la feuille utilisé à la place de "JAN" :p
Voilà, donc j'ai eu juste à paramétrer (avec ton aide, enfin tout le travail qui a été effectué par toi finalement
Merci encore !