Saisie guidée excel 2007
Dernière réponse : dans Programmation
Bonjour,
Je suis novice dans l'élaboration de macros sur excel 2007, et je ne m'en sors pas !
Je souhaiterai pouvoir établir une suite de commandes en VBA sur excel 2007 afin de guider la saisie de l'utilisateur. Je m'explique :
Dans une feuille de calcul, lorsque la 1ère cellule (Exemple C2) est saisie (une somme en €) puis validée, j'aimerai que la cellule suivante à saisir soit c3, puis après la saisie, que la la cellule suivante soit C4, puis la C7.Les renseignements sont différents à chaque saisie (poids, code postaux, etc...).
j'ai écrit cette petite séquence, mais elle ne fonctionne pas.
Quelqu'un de confirmer est-il capable de m'aider.
Je remercie d'ors et déjà l'âme charitable qui saura prendre le temps de m'expliquer les raisons de mon échec.
Je suis novice dans l'élaboration de macros sur excel 2007, et je ne m'en sors pas !
Je souhaiterai pouvoir établir une suite de commandes en VBA sur excel 2007 afin de guider la saisie de l'utilisateur. Je m'explique :
Dans une feuille de calcul, lorsque la 1ère cellule (Exemple C2) est saisie (une somme en €) puis validée, j'aimerai que la cellule suivante à saisir soit c3, puis après la saisie, que la la cellule suivante soit C4, puis la C7.Les renseignements sont différents à chaque saisie (poids, code postaux, etc...).
j'ai écrit cette petite séquence, mais elle ne fonctionne pas.
Sub Suite_1()
Private Sub Worksheet_Change(ByVal Target As Range)
Range("C2").Select
Private Sub Worksheet_Change(ByVal Target As Range)
Range("C3").Select
Private Sub Worksheet_Change(ByVal Target As Range)
Range("C4").Select
Private Sub Worksheet_Change(ByVal Target As Range)
Range("C7").Select
End Sub
Quelqu'un de confirmer est-il capable de m'aider.
Je remercie d'ors et déjà l'âme charitable qui saura prendre le temps de m'expliquer les raisons de mon échec.
Autres pages sur : saisie guidee excel 2007
Lassé par la pub ? Créez un compte
Meilleure solution
Dans la définition de ta procédure Suite_1, tu définies des sous procédures Worksheet_Change, toutes du même nom. D'une part, il faudrait trouver des noms différents, d'autres part, VB ne permet pas de définir des sous-procédures. Donc Exit !
Je te propose deux solutions :
Renseigne-toi sur le verrouillage des cellules et sur la protection de la feuille. Et oui, c'est comme ça qu'on fait.
Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(False, False) = "C2" Then Range("C3").Select
If Target.Address(False, False) = "C3" Then Range("C4").Select
If Target.Address(False, False) = "C4" Then Range("C7").Select
End Sub
Bon, j'insiste, ce n'est pas une jolie façon de faire.
J'ai lu ta petite page de présentation (très bien pensée). Je vais tenter de suivre tes conseils à la lettre !
Bon ok ! Je reconnais que je n'y connais pas grand chose, mais j'essaie de faire les choses bien avec les moyens du bord... ...à savoir des moyens qui prennent l'eau !
Plaisanterie mise à part, je suis un autodidacte. Et un autodidacte dans les prémices de l'apprentissage en matière de programmation. (Tu voies de que ça donne !)
L'aide que je t'ai demandée servira (si j'y arrive...) à établir des devis. J'aurai souhaité pouvoir utiliser divers choix de paramètres, et en fonction de ces choix orienté le devis vers telle ou telle option...
Qu'il est difficile de décrire ce que l'on souhaite faire précisément ! J'espère, en tout cas, que tu comprends ma démarche
Parce que je ne sais pas si tout est clair.
Pour en revenir à la séquence que tu as écrite, et comme je ne sais pas encore utiliser le verrouillage des cellules, je l'ai essayée (même si c'est pas jolie), mais elle ne fonctionne pas.
Il faut à tout prix que je trouve pourquoi par moi-même. je cherche, et je te reviendrai si d'aventure je perdais mon latin !
Merci pour tes éclaircissements, et encore bravo pour votre site. je ne manquerai pas de te revenir.
Plaisanterie mise à part, je suis un autodidacte. Et un autodidacte dans les prémices de l'apprentissage en matière de programmation. (Tu voies de que ça donne !)
L'aide que je t'ai demandée servira (si j'y arrive...) à établir des devis. J'aurai souhaité pouvoir utiliser divers choix de paramètres, et en fonction de ces choix orienté le devis vers telle ou telle option...
Qu'il est difficile de décrire ce que l'on souhaite faire précisément ! J'espère, en tout cas, que tu comprends ma démarche
Parce que je ne sais pas si tout est clair.Pour en revenir à la séquence que tu as écrite, et comme je ne sais pas encore utiliser le verrouillage des cellules, je l'ai essayée (même si c'est pas jolie), mais elle ne fonctionne pas.
Il faut à tout prix que je trouve pourquoi par moi-même. je cherche, et je te reviendrai si d'aventure je perdais mon latin !
Merci pour tes éclaircissements, et encore bravo pour votre site. je ne manquerai pas de te revenir.
Je te rappelle que nous ne réalisons pas de prestation, mais nous nous entraidons entre développeurs. Et les programmeurs novices et/ou autodidactes sont les bienvenus.
Précise donc ta demande et accompagne-la éventuellement d'un bout de code.
Tiens étudie ça :
Et ça :
Tu vois, avec des tests on va pouvoir faire des tas de choses
Précise donc ta demande et accompagne-la éventuellement d'un bout de code.
Tiens étudie ça :
Sub Worksheet_Change(ByVal Target As Range)
MsgBox "La cellule nouvellement modifiée est " & Target.Address
MsgBox "La cellule courante est " & Selection.Address
Selection.Offset(2, 2)
MsgBox "Plus maintenant :)"
End Sub
Et ça :
Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$2" And Target.Value >= 10 Then
MsgBox "Dix et plus : on va en C10"
Range("C10").Select
Else
MsgBox "Moins de dix ! Recommence"
Range("C2").Select
End If
End Sub
Tu vois, avec des tests on va pouvoir faire des tas de choses
zeb a dit :
Je te rappelle que nous ne réalisons pas de prestation, mais nous nous entraidons entre développeurs. Et les programmeurs novices et/ou autodidactes sont les bienvenus.Précise donc ta demande et accompagne-la éventuellement d'un bout de code.
Tiens étudie ça :
Sub Worksheet_Change(ByVal Target As Range)
MsgBox "La cellule nouvellement modifiée est " & Target.Address
MsgBox "La cellule courante est " & Selection.Address
Selection.Offset(2, 2)
MsgBox "Plus maintenant :)"
End Sub
Et ça :
Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$2" And Target.Value >= 10 Then
MsgBox "Dix et plus : on va en C10"
Range("C10").Select
Else
MsgBox "Moins de dix ! Recommence"
Range("C2").Select
End If
End Sub
Tu vois, avec des tests on va pouvoir faire des tas de choses
Bonjour Zeb,
Tu avais raison. La protection répond tout à fait à ce que j'attendais, et la programmation alourdit et complique vraiment la conception.
alors merci bien pour tes conseils "zavisés" avec un "z" comme Zeb !
Zeb,
J'avance toujours sur mon projet, et je découvre un autre petit souci.
Lorsque, sur la page 1 du classeur, je clique sur un des deux boutons auquel j'ai associé la macro suivante :
Il exécute correctement la macro, mais n'affiche plus l'un des quatre boutons de la page 2 qui sont eux-mêmes associés à d'autres macros.
Pour les faire apparaitre, je dois saisir une valeur dans n'importe quelle cellule de la feuille 2 !
Est-ce un problème de programmation ou de fantôme ?
Pour information, voici les codes associés à chacun des quatre boutons :
Je suis relativement satisfait de ce que j'arrive à faire (pour un novice !), mais je n'ai pas encore ton esprit de programmeur averti et médaillé de bronze...
... ma médaille n'est encore qu'en chocolat !
merci.
J'avance toujours sur mon projet, et je découvre un autre petit souci.
Lorsque, sur la page 1 du classeur, je clique sur un des deux boutons auquel j'ai associé la macro suivante :
Sub Export()
Sheets("Paramètres Export").Select
Range("C2:C4").Select
Selection.ClearContents
Range("C7:C9").Select
Selection.ClearContents
Range("C12").Select
Selection.ClearContents
Range("C14").Select
Selection.ClearContents
Range("C16").Select
Selection.ClearContents
Range("C18").Select
Selection.ClearContents
Rows("7:10").Select
Selection.EntireRow.Hidden = True
Rows("12").Select
Selection.EntireRow.Hidden = True
Rows("14").Select
Selection.EntireRow.Hidden = True
Rows("16").Select
Selection.EntireRow.Hidden = True
Rows("18").Select
Selection.EntireRow.Hidden = True
Range("C2").Select
End Sub
Il exécute correctement la macro, mais n'affiche plus l'un des quatre boutons de la page 2 qui sont eux-mêmes associés à d'autres macros.
Pour les faire apparaitre, je dois saisir une valeur dans n'importe quelle cellule de la feuille 2 !
Est-ce un problème de programmation ou de fantôme ?
Pour information, voici les codes associés à chacun des quatre boutons :
Sub Export_palettes()
Rows("7:10").Select
Selection.EntireRow.Hidden = False
Range("C7").Select
End Sub
Sub Export_volume()
Rows("16").Select
Selection.EntireRow.Hidden = False
Range("C16").Select
End Sub
Sub Export_au_mètre()
Rows("12").Select
Selection.EntireRow.Hidden = False
Range("C12").Select
End Sub
Sub Export_au_poids()
Rows("14").Select
Selection.EntireRow.Hidden = False
Range("C14").Select
End Sub
Je suis relativement satisfait de ce que j'arrive à faire (pour un novice !), mais je n'ai pas encore ton esprit de programmeur averti et médaillé de bronze...
... ma médaille n'est encore qu'en chocolat !
merci.
Up !
Mon dieu, j'ai failli faire une attaque. Quel code horrible.
Je ne supporte pas de voir un select suivi d'un Selection.
C'est comme ça :
http://www.presence-pc.com/forum/ppc/Programmation/sele...
http://www.presence-pc.com/forum/ppc/Programmation/macr...
http://www.presence-pc.com/forum/ppc/Programmation/sele...
http://www.presence-pc.com/forum/ppc/Programmation/debu...
http://www.presence-pc.com/forum/ppc/Programmation/supp...
http://www.presence-pc.com/forum/ppc/Programmation/exis...
http://www.presence-pc.com/forum/ppc/Programmation/aide...
http://www.presence-pc.com/forum/ppc/Programmation/copi...
http://www.presence-pc.com/forum/ppc/Programmation/reso...
http://www.presence-pc.com/forum/ppc/Programmation/chem...
http://www.presence-pc.com/forum/ppc/Programmation/macr...
Bon alors, comme ça, c'est bien mieux :
Bon, je vois maintenant que tu caches pleins de lignes. Si tes boutons sont sur ces lignes, ils auront effectivement tendance à se planquer.
Fais des essais en fonction de la position de tes boutons et détermine l'endroit le plus adéquat pour les y placer.
Mon dieu, j'ai failli faire une attaque. Quel code horrible.
Je ne supporte pas de voir un select suivi d'un Selection.
C'est comme ça :
http://www.presence-pc.com/forum/ppc/Programmation/sele...
http://www.presence-pc.com/forum/ppc/Programmation/macr...
http://www.presence-pc.com/forum/ppc/Programmation/sele...
http://www.presence-pc.com/forum/ppc/Programmation/debu...
http://www.presence-pc.com/forum/ppc/Programmation/supp...
http://www.presence-pc.com/forum/ppc/Programmation/exis...
http://www.presence-pc.com/forum/ppc/Programmation/aide...
http://www.presence-pc.com/forum/ppc/Programmation/copi...
http://www.presence-pc.com/forum/ppc/Programmation/reso...
http://www.presence-pc.com/forum/ppc/Programmation/chem...
http://www.presence-pc.com/forum/ppc/Programmation/macr...
Bon alors, comme ça, c'est bien mieux :
Sub Export() With Worksheets("Paramètres Export" ) .Range("C2:C4" ).ClearContents .Range("C7:C9" ).ClearContents .Range("C12" ).ClearContents .Range("C14" ).ClearContents .Range("C16" ).ClearContents .Range("C18" ).ClearContents .Rows("7:10" ).EntireRow.Hidden = True .Rows("12" ).EntireRow.Hidden = True .Rows("14" ).EntireRow.Hidden = True .Rows("16" ).EntireRow.Hidden = True .Rows("18" ).EntireRow.Hidden = True End With End Sub Sub Export_palettes() Rows("7:10" ).EntireRow.Hidden = False Range("C7" ).Select End Sub Sub Export_volume() Rows("16" ).EntireRow.Hidden = False Range("C16" ).Select End Sub Sub Export_au_mètre() Rows("12" ).EntireRow.Hidden = False Range("C12" ).Select End Sub Sub Export_au_poids() Rows("14" ).EntireRow.Hidden = False Range("C14" ).Select End Sub
Bon, je vois maintenant que tu caches pleins de lignes. Si tes boutons sont sur ces lignes, ils auront effectivement tendance à se planquer.
Fais des essais en fonction de la position de tes boutons et détermine l'endroit le plus adéquat pour les y placer.
Bonjour Zeb,
Tu as raison : j'affiche toute l'étendue de ma méconnaissance du VBA, et de l'informatique en général !
Néanmoins, je suis motivé et je n'ai pas l'intention de renoncer... ...alors je m'accroche au branches !
J'ai corrigé mon code avec les indications que tu m'as données : (plus de sélect + sélection !!!) Il est certain que tout va plus vite, la réaction est plus rapide.
Aussi, pour que le curseur se place en C2 sur la feuille "Paramètre export", j'ai ecrit une petite suite au code :
Ma question est : y a t-il possibilité de réduire cette écriture ?
Par ailleurs, mes boutons se cache toujours... ...J'ai tenté de les changer de place, et rien n'y fait. C'est même chiant à force !
pour répondre à ta question : il n'y a pas de ligne cachées, à la place des lignes vides dans le code que je t'ai posté précédemment, il y a des lignes grisées dans le code de la macro. C'est moi qui ai passé des lignes afin que ce soit plus clair et pour matérialiser ces fameuses lignes continues et grisées.
En tout cas, merci pour ton aide. Je progresse lentement, grâce à tes corrections.
Tu as raison : j'affiche toute l'étendue de ma méconnaissance du VBA, et de l'informatique en général !
Néanmoins, je suis motivé et je n'ai pas l'intention de renoncer... ...alors je m'accroche au branches !
J'ai corrigé mon code avec les indications que tu m'as données : (plus de sélect + sélection !!!) Il est certain que tout va plus vite, la réaction est plus rapide.
Aussi, pour que le curseur se place en C2 sur la feuille "Paramètre export", j'ai ecrit une petite suite au code :
Sheets("paramètres Export").Select
Range("c2").Select
Ma question est : y a t-il possibilité de réduire cette écriture ?
Par ailleurs, mes boutons se cache toujours... ...J'ai tenté de les changer de place, et rien n'y fait. C'est même chiant à force !
pour répondre à ta question : il n'y a pas de ligne cachées, à la place des lignes vides dans le code que je t'ai posté précédemment, il y a des lignes grisées dans le code de la macro. C'est moi qui ai passé des lignes afin que ce soit plus clair et pour matérialiser ces fameuses lignes continues et grisées.
En tout cas, merci pour ton aide. Je progresse lentement, grâce à tes corrections.
Oh, nous ne nous sommes pas compris.
Les lignes cachées sont les lignes de ta feuille de calcul, pas ceux de ton code !
As-tu besoin de sélectionner (rendre actif et mettre au premier plan) ta feuille et ta cellule ?
Si oui, laisse ce code.
Si non, et bien sache que Excel sait travailler sur la feuille 12 tout en affichant la feuille 1. Et heureusement.
Juste un tout petit détail minuscule. Sheets est la collection de toutes les feuilles, celles de calcul (Worksheets) et celles de graphisme (Charts). Tu peux donc, par soucis d'exactitude, utiliser la collection Worksheets.
Maintenant un gros détail que j'ai raté :
Range() c'est une plage de cellules désignée par le paramètre.
Range().EntireRow c'est la ou les lignes entières concernées par la plage de cellules.
Rows() c'est la ou les lignes entières désignées.
Donc l'écriture Rows(n).EntireRow est inutile.
Ca donne donc :
Quant à tes boutons qui disparaissent, je ne comprends pas où est ton problème
Les lignes cachées sont les lignes de ta feuille de calcul, pas ceux de ton code !
As-tu besoin de sélectionner (rendre actif et mettre au premier plan) ta feuille et ta cellule ?
Si oui, laisse ce code.
Si non, et bien sache que Excel sait travailler sur la feuille 12 tout en affichant la feuille 1. Et heureusement.
Juste un tout petit détail minuscule. Sheets est la collection de toutes les feuilles, celles de calcul (Worksheets) et celles de graphisme (Charts). Tu peux donc, par soucis d'exactitude, utiliser la collection Worksheets.
Maintenant un gros détail que j'ai raté :
Range() c'est une plage de cellules désignée par le paramètre.
Range().EntireRow c'est la ou les lignes entières concernées par la plage de cellules.
Rows() c'est la ou les lignes entières désignées.
Donc l'écriture Rows(n).EntireRow est inutile.
Ca donne donc :
Sub Export()
With Worksheets("Paramètres Export" )
.Range("C2:C4" ).ClearContents
.Range("C7:C9" ).ClearContents
.Range("C12" ).ClearContents
.Range("C14" ).ClearContents
.Range("C16" ).ClearContents
.Range("C18" ).ClearContents
.Rows("7:10" ).Hidden = True
.Rows("12" ).Hidden = True
.Rows("14" ).Hidden = True
.Rows("16" ).Hidden = True
.Rows("18" ).Hidden = True
End With
End Sub
Quant à tes boutons qui disparaissent, je ne comprends pas où est ton problème
J'ai l'impression que tu parles d'acné juvénile, lorsque que tu énonces la disparition de mes boutons...!!!
Effectivement, j'ai besoin de rendre la saisie possible en c2 de la feuille 2.
Merci pour tes précisions, et il me semblait bien avoir intégré la subtilité d'excel travaillant sur une page alors qu'elle n'est pas au premier plan. Je l'ai comprise au moment ou j'ai intégré tes corrections sur le code car la macro fonctionnait alors que je restait sur la première feuille.
Le plan de mon classeur est le suivant :
feuille 1 : présentation et choix : 2 boutons (import et export)
feuille 2 : paramètres export : 3 cellules à renseigner + choix de 4 types de calcul (les 4 boutons qui disparaissent) : /palettes, /m, /volume, /poids.
à chaque choix, je souhaite qu'apparaissent d'autres choix.
ex :
si choix /palette
apparition de plusieurs dimensions de palettes et avoir la possibilité de panachage entre plusieurs type différents.
Toutes les autres feuilles, concerne des calculs, et des renseignements divers que la feuille de calcul va rechercher pour donner le devis.
Voilà, tu sais presque tout...
Peut-être as-tu des suggestions ?
Dis-moi s'il te plait...
... est-il possible de pouvoir éditer un devis en word à envoyer au client, avec les renseignements fournis dans le tableur excel, une fois les choix effectués ?
Si oui, est-il possible par la validation sur un bouton par exemple de l'éditer de manière automatique selon une trame prédéfini ?
Le souci avec l'informatique, c'est que les possibilités sont immenses, est d'un petit projet, qui ne prendrait que quelques jours, on en rajoute, on en rajoute, on en rajoute... et finalement : ça prend plus de temps que prévu car on veut fignoler, peaufiner.
merci encore une fois pour le temps que tu consacres.
Effectivement, j'ai besoin de rendre la saisie possible en c2 de la feuille 2.
Merci pour tes précisions, et il me semblait bien avoir intégré la subtilité d'excel travaillant sur une page alors qu'elle n'est pas au premier plan. Je l'ai comprise au moment ou j'ai intégré tes corrections sur le code car la macro fonctionnait alors que je restait sur la première feuille.
Le plan de mon classeur est le suivant :
feuille 1 : présentation et choix : 2 boutons (import et export)
feuille 2 : paramètres export : 3 cellules à renseigner + choix de 4 types de calcul (les 4 boutons qui disparaissent) : /palettes, /m, /volume, /poids.
à chaque choix, je souhaite qu'apparaissent d'autres choix.
ex :
si choix /palette
apparition de plusieurs dimensions de palettes et avoir la possibilité de panachage entre plusieurs type différents.
Toutes les autres feuilles, concerne des calculs, et des renseignements divers que la feuille de calcul va rechercher pour donner le devis.
Voilà, tu sais presque tout...
Peut-être as-tu des suggestions ?
Dis-moi s'il te plait...
... est-il possible de pouvoir éditer un devis en word à envoyer au client, avec les renseignements fournis dans le tableur excel, une fois les choix effectués ?
Si oui, est-il possible par la validation sur un bouton par exemple de l'éditer de manière automatique selon une trame prédéfini ?
Le souci avec l'informatique, c'est que les possibilités sont immenses, est d'un petit projet, qui ne prendrait que quelques jours, on en rajoute, on en rajoute, on en rajoute... et finalement : ça prend plus de temps que prévu car on veut fignoler, peaufiner.
merci encore une fois pour le temps que tu consacres.
>>J'ai l'impression que tu parles d'acné juvénile, lorsque que tu énonces la disparition de mes boutons...!!!
Concernant l'interopérabilité entre Excel et Word, c'est possible, et c'est même assez facile. Reste à savoir ce que tu veux faire. Deux clefs : Automation (en VB, côté Excel et/ou Word) ou Mailing (côté Word).
Tu veux qu'on en discute, fais donc un nouveau topic
Concernant l'interopérabilité entre Excel et Word, c'est possible, et c'est même assez facile. Reste à savoir ce que tu veux faire. Deux clefs : Automation (en VB, côté Excel et/ou Word) ou Mailing (côté Word).
Tu veux qu'on en discute, fais donc un nouveau topic
Lassé par la pub ? Créez un compte
- Contenus similaires :
, c'est un schizophrène qui va péter un câble
si tu ne respectes pas le règlement : les bouts de programmes doivent être encadrés par les balises [code] [