VBA recopier un résultat dans plrs cellules

Résolu/Fermé
shouuu - 12 févr. 2009 à 11:39
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 - 17 févr. 2009 à 08:34
Bonjour,

je suis débutante en VBA et travaille sur excel 2000. Je cherche à ce que mon résultat d'une inputbox se recopie dans plusieurs cellules. Je reussi seulement à l'afficher dans une cellule particulière(G5).Voici ce que j'ai écris pour le moment, je souhaiterais que le résultat s'affiche dans les cellules suivantes :G5,G6,G7,G16:G24;G29;G30

Sheets("consommables").Select
Range("G5").Select
ActiveCell = surface

Merci d'avance

18 réponses

Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
16 févr. 2009 à 15:59
le fait d'écrire static gardera la variable en mémoire

dans toutes les macros que tu as transmises, il n'y a pas celles
ou tu renseignes client,produit,surface.

dans le module ou tu utilises (post1)
Sub Auto_Open()
static nbpièce as variant
static surface as variant
static épaisseur as variant

' j'ai utilise un type variant pour éviter un problème.


nbpièce = InputBox(" Combien de pièces identiques voulez vous?", "nb pièces", 1)
surface = InputBox(" Quelle est la surface de la pièce en m²?", "surface", 1)
épaisseur = InputBox("Quelle est l'épaisseur de la pièce?", "épaissseur", 1)
Sheets("consommables").Select
Range("G5").value =surface
.....

par ailleurs dans ton programme il y a plusieurs fois unload me ce qui implique
la perte des données du userform
je ne connais pas tout ton programme. le reste a l'air correct

fais un essai et tiens moi au courant.
2
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
12 févr. 2009 à 12:03
Bonjour
puisque tu es débutante, je te propose d'écrire sur la cellule que tu désignes
pluto^t que d'aller activer la cellule avec select puis d'utiliser activecell


Sub Auto_Open()
nbpièce = InputBox(" Combien de pièces identiques voulez vous?", "nb pièces", 1)
surface = InputBox(" Quelle est la surface de la pièce en m²?", "surface", 1)
épaisseur = InputBox("Quelle est l'épaisseur de la pièce?", "épaissseur", 1)
Sheets("consommables").Select
Range("G5").value =surface

'ActiveCell = surface
Sheets("matières premières").Select
Range("F6").value =surface
'ActiveCell = surface
Range("L4").value=épaisseur
'ActiveCell = épaisseur
Sheets("infusion").Select
Range("G4").value=nbpièce
'ActiveCell = nbpièce



Si tu as besoin de plus tu dis...

A+
1
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
12 févr. 2009 à 14:13
bonjour,

oui pardon! je pensais que tu comprendrais.
un petit exemple.

Sub Auto_Open()
nbpièce = InputBox(" Combien de pièces identiques voulez vous?", "nb pièces", 1)
surface = InputBox(" Quelle est la surface de la pièce en m²?", "surface", 1)
épaisseur = InputBox("Quelle est l'épaisseur de la pièce?", "épaissseur", 1)
Sheets("consommables").Select
Range("G5").value =surface
' je vais écrire en G6,G7,G8 (Ici le G8 ne pose pas le problème lol )
Range("G6").value =surface
Range("G7").value =surface
Range("G8").value =surface


'maintenant sur la feuille 1 qui s'appelle Feuil1
'cela donne
Sheets("Feuil1").Range("G5").value =surface

En fait tu peux écrire ou tu veux il n'est pas nécessaire
de se déplacer sur la feuille pour y écrire.

il y a 2 moyens principaux pour écrire
1) utiliser Range("A6").value = valeurdeMaVariable
2) utiliser Cells(ligne,colonne).value = valeurdeMaVariable
pour A6 : Cells(6,1).value=valeurdeMaVariable

A+
1
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
12 févr. 2009 à 16:10
en suivant ton exemple...
"par exemple Range"G5:G7;G16:G24".value=surface? "


Sub Auto_Open()
dim C as Variant
nbpièce = InputBox(" Combien de pièces identiques voulez vous?", "nb pièces", 1)
surface = InputBox(" Quelle est la surface de la pièce en m²?", "surface", 1)
épaisseur = InputBox("Quelle est l'épaisseur de la pièce?", "épaissseur", 1)
Sheets("consommables").Select

For Each C In Range("G5:G7,G16:G24")
C.Value = surface
Next
' Les deux plages sont rempli par la variable surface

A+
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
16 févr. 2009 à 09:34
bonjour,
tu as dis :"Par intéraction utilisateur"

c'est à dire l'utilisteur écrit directement dans la cellule..

Private Sub CommandButton1_Click()

Sheets("consommables").select
unload me ' cela décharge le userform et te rend la main

End Sub

Attention si tu souhaite réutiliser ton userform
il faudra utiliser .show et faire attention aux contenu des variables.
1
parfait, je voudrais que lorsque je clique sur consommables , je puisse écrire dans cette feuille, ce qui et le cas, mais je voudrais aussi masquer certaines colonnes de ma feuille pour n'afficher que celles qui m'interessent , comment faire?
Et aussi, j'ai créé un bouton sur cette feuille " retour à l'interface", seulement les données que j'ai rentrées précédemment( dans des textbox de mon userform) se sont effacées, j'aimerais les conserver jusqu'à la fin de l'utilisation de l'interface où je clique sur ok.

Je ne sais pas si c'est très clair... ?
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
16 févr. 2009 à 14:26
parfait, restons modeste.... imparfait comme les autres,

mais je voudrais aussi masquer certaines colonnes de ma feuille pour n'afficher que celles qui m'interessent , comment faire?
comme ça!
Columns("D:D").ColumnWidth = 0 'la colle D est masquée


Columns("D:D").ColumnWidth = 10 ' elle est à nouveau visible

Attention une colonne masquée reste accessible.


Et aussi, j'ai créé un bouton sur cette feuille " retour à l'interface", seulement les données que j'ai rentrées précédemment( dans des textbox de mon userform) se sont effacées, j'aimerais les conserver jusqu'à la fin de l'utilisation de l'interface où je clique sur ok.


Je ne sais pas si c'est très clair... ? mais si !


en fait ton code deviens...


Private Sub CommandButton1_Click()

Sheets("consommables").select
userform1.hide ' cela cache le userform et te donne accès à la feuille.


End Sub


dans un autre bouton sur la feuille, il te suffira d'écrire userform1.show.

attention pour que l'intégrité des variables soit respectée,

Ecrit dans la déclaration STATIC devant la variable
voici un exemple

Sub toto()


Static MaVariable As Double

Columns("D:D").ColumnWidth = 10

MaVariable = Val(InputBox("quelle valeur", "saisie"))

MaVariable = MaVariable * 2
UserForm1.TextBox1 = MaVariable
UserForm1.Show
End Sub

'*************************************
' le bouton pour retourner à la feuille
Private Sub CommandButton2_Click()
UserForm1.Hide
End Sub
'**************************************
et le retour

Sub retour_interface()
UserForm1.Show
End Sub
1
Alexsimps Messages postés 198 Date d'inscription mercredi 4 février 2009 Statut Membre Dernière intervention 6 novembre 2014 13
12 févr. 2009 à 11:41
Salut,

Peux-tu mettre l'intégralité de ton code stp?
Je pense qu'il y a quelques lignes de plus qui peuvent nous être necessaire ^^
0
shouuu Messages postés 9 Date d'inscription jeudi 12 février 2009 Statut Membre Dernière intervention 20 février 2009
12 févr. 2009 à 11:44
Sub Auto_Open()
nbpièce = InputBox(" Combien de pièces identiques voulez vous?", "nb pièces", 1)
surface = InputBox(" Quelle est la surface de la pièce en m²?", "surface", 1)
épaisseur = InputBox("Quelle est l'épaisseur de la pièce?", "épaissseur", 1)
Sheets("consommables").Select
Range("G5").Select ActiveCell = surface
Sheets("matières premières").Select
Range("F6").Select
ActiveCell = surface
Range("L4").Select
ActiveCell = épaisseur
Sheets("infusion").Select
Range("G4").Select
ActiveCell = nbpièce
0
shouuu Messages postés 9 Date d'inscription jeudi 12 février 2009 Statut Membre Dernière intervention 20 février 2009
12 févr. 2009 à 13:49
d'accord merci de ce conseil mais la question était donc que la valeur de ma surface s'écrive dans plusieurs cellules en meme temps...?
0
shouuu Messages postés 9 Date d'inscription jeudi 12 février 2009 Statut Membre Dernière intervention 20 février 2009
12 févr. 2009 à 14:31
oui je suis grande débutante désolé !!! ça marche comme ca mais vu que j'en ai pas mal , je dois retaper à chaque fois "Range("G5").value =surface " ? il n'existe pas une combinaison qui permette de le faire en une ligne, par exemple Range"G5:G7;G16:G24".value=surface?
Je sais que celle la ne marche pas vu que je bloque depuis ce matin mais je me suis dit que j'avais peut etre mal tapé quelque chose ..

En même temps, tant que j'ai quelqu'un qui me répond, je voudrais savoir comment je peux faire pour que sur mon ecran apparaisse un rectangle où dedans on trouve deux boutons, consommables et l'autre matières premières et que lorsque l'on clique sur l'un ou l'autre, ma feuille excel ainsi nommée s'ouvre ?

Merci beaucoup
0
Alexsimps Messages postés 198 Date d'inscription mercredi 4 février 2009 Statut Membre Dernière intervention 6 novembre 2014 13
12 févr. 2009 à 14:53
Pour tes variables, dans le pire des cas, tu peux faire une boucle vu que tu cherches a remplir des plages de cellules, cela sera plutôt simple^^

Tu peux avoir ton "rectangle" (appellé plutôt fenetre^^) en créant un objet form et il suffit d'y mettre 2 boutons qui feront appel a tes feuilles excel.

Voili Voilou ^^
0
shouuu Messages postés 9 Date d'inscription jeudi 12 février 2009 Statut Membre Dernière intervention 20 février 2009
12 févr. 2009 à 16:26
ok c'est bon pour ce problème merci,
maintenant je suis dans la suite où je voudrais que mon button me permette d'aller sur ma feuille excel pour pouvoir en modifier des données , pour le moment j'ai juste trouvé :



Private Sub CommandButton1_Click()

Sheets("consommables").Activate

End Sub

mais ca ne me permet ca d'écrire dedans!

Encore merci davance
0
Alexsimps Messages postés 198 Date d'inscription mercredi 4 février 2009 Statut Membre Dernière intervention 6 novembre 2014 13
12 févr. 2009 à 16:50
Tu veux ecrire dedans par code ou par interaction utilisateur ?
0
Par intéraction utilisateur
0
Petit problème de compréhension !! pour la 2eme partie, donc pour garder mes données, je suis désolé mais pas assez compétente pr comprendre ce que tu as écrit !! Du coup je te copie mon programme ( pour savoir à quel moment il faut que je "sauvegarde mes variables", enfin que je les mette en STATIC si j'ai compris ?:s :


Private Sub consommables_Click()
Sheets("consommables").Activate
Columns("B").ColumnWidth = 0
Columns("D:F").ColumnWidth = 0
Columns("K:M").ColumnWidth = 0

Unload Me
End Sub


Private Sub matierespremieres_Click()
Sheets("matières premières").Activate
Unload Me
End Sub

Private Sub choix_Click()

End Sub

Private Sub client_Change()
Sheets("devis vierge").Select
Range("B3").Value = client
End Sub


Private Sub ok_Click()
Columns("B").ColumnWidth = 10
Columns("D:F").ColumnWidth = 10
Columns("K:M").ColumnWidth = 10
Dim Confirm As Single
Confirm = MsgBox("Voulez-vous une autre pièce?", vbYesNo + vbCritical, "répétition de la procédure")
If Confirm = vbNo Then
UserForm1.Hide
Sheets("devis vierge").Activate

Exit Sub
End If
End Sub

Private Sub cancel_Click()
Dim Confirm As Single
Confirm = MsgBox("Si vous annulez la procédure, vous perdrez toutes les données d'entrées." & "Etes-vous sûr de vouloir continuer?", vbYesNo + vbCritical, "abandon de la procédure")
If Confirm = vbYes Then
UserForm1.Hide
Exit Sub
End If
End Sub


Private Sub epaisseur_Change()
Sheets("matières premières").Select
Range("L4:L12").Value = epaisseur
End Sub

Private Sub nombre_Change()
Sheets("infusion").Select
Range("G4:G12").Value = nombre
End Sub

Private Sub produit_Change()
Sheets("devis vierge").Select
Range("B4").Value = produit
End Sub

Private Sub surface_Change()
Sheets("consommables").Select
Range("G5:G7").Value = surface
Range("G16:G24").Value = surface
Range("G29").Value = surface
Range("G30").Value = surface
Sheets("matières premières").Select
Range("F6:F12").Value = surface
End Sub


Mon userform est de la forme :

Client? ==> textbox
Produit? ==> text box
Surface... etc

Apres j'ai mes deux boutons "consommables" "matières premières"
Puis bouton annuler et OK

Les données que je veux pouvoir retrouver dans mon userform lorsque je reviens d'avoir écrit sur ma feuille consommables sont la surface, l'épaisseur etc, toutes mes textbox
0
non ca ne marche pas, mais peut etre que c'est parce que mon bouton que j'ai créé sur ma feuille excel n'est pas relié à mon interface ?
0
Si c'est bon j'ai réussi :)
Merci beaucoup, je te re solliciterai peut etre par la suite !
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
17 févr. 2009 à 08:34
bonjour,
pense à mettre en résolu et bon courage pour la suite.
A+
0