Insérer un bouton sur Excel 2013

Bonjour,

nouveau sur le site, et débutant sur Excel 2013!

J'aimerai savoir si une condition telle que : si je frappe "1" dans ma cellule, une nouvelle feuille apparaît avec à l'intérieur plusieurs listes déroulantes. Si je frappe rien bien entendu, rien ne se passe.

Lorsque mes données sont rentrées dans la nouvelle feuille de calcul, celle -ci enregistre tout automatiquement et peut se fermer.

Bien sûr, une action que l'on peut répéter sur n'importe quelle cellule.

Merci d'avance pour votre aide.

PS : les listes déroulantes ne sont pas de très bonne qualité.

14help.xlsx (11.33 Ko)

Bonjour,

Tu ne veux pas placer un bouton (onglet développeurs -> insérer -> bouton de formulaire) ?

Ca me semble plus compliqué de créer une procédure (évenementielle à priori ?!) pour jouer sur un clic sur cellule,

Je me renseigne, apparemment c'est impossible sur clic gauche, possible avec un clic droit ou un double clic (j'ai choisis ici cette dernière option)

Je cherche un peu, ça m'intéresse aussi, je te tiens au courant !

Ps : en fait il faudrait savoir d'où proviennent tes données dans la nouvelle feuille aussi, tu veux faire un copié collé de la feuille déjà existante ?

Je t'ai proposé un fichier en pièce jointe, il ne fait que rajouter une feuille, pas de listes déroulantes (j'attends de voir d'où tu veux les avoir, ces listes )

Tout est décrit, j'ai juste pris ton fichier colorié en jaune la cellule A11 (arbitrairement fixée) de la feuille2,

Voici le code ajouté non sur un module, mais sur le code de la Feuille adéquate (la 2).

Option Explicit
Option Base 1

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim n As Byte
Dim m As Byte

'on désactive la mise à jour de l'écran
Application.ScreenUpdating = False

'si l'intersection entre la cellule du double clic et la cellule A11 est non vide
'i.e finalement si on a cliqué sur la cellule A11
If Not Application.Intersect(Target, Range("A11")) Is Nothing Then

'message
MsgBox "Vous avez double-cliqué sur la cellule A11 !"

'n récupère le nombre de feuilles
n = Application.Sheets.Count

'm récupère l'indice de la feuille active (la 2) pour pouvoir y revenir ensuite
m = ThisWorkbook.ActiveSheet.Index

'Ajout d'une nouvelle feuille
ThisWorkbook.Worksheets.Add(after:=Worksheets(n)).Name = "Feuille " & n + 1

'retour sur la feuille du clic
ThisWorkbook.Worksheets(m).Activate

End If

End Sub

Et voici le fichier :

Edit : n'hésite pas à aller voir les captures d'écran ici, aussi

14copie-de.xlsm (20.39 Ko)

J'ai choisi l'option lien hypertexte pour me renvoyer sur une différente feuille, concernant les listes déroulantes je les ai laissées telles qu'elles sont.

merci beaucoup, je vais sans doute me servir aussi de ce bouton !!

j'ai réussi à faire un fichier à peu près convenable avec les fonctionnalités que j'espérais.

Encore merci !!

J'aurai besoin de ta précieuse aide encore une fois je sais je suis vraiment nul sur Excel.....

Après avoir construit mon tableau j'aimerai y associer des graphiques. Mais encore une fois, un problème. Il faudrait que mes données se valident automatiquement après les avoir rentrées.

je m'explique :

je vais sur le mois de janvier, je rentre mes données grâce au listes déroulantes, et je construis un graphique, par exemple :

pour chaque données "204" un graphique secteurs représentant la part en % du nombre de fois où cette donnée apparaît.

Je ne sais pas vraiment comment l'expliquer, je pense que je dois lui affecter une formule, j'y travaille encore

Je te joins mon fichier :

16nb-asr.xlsx (45.54 Ko)

Coucou,

Je suis content de voir que ça a pu t'aider un peu,

En revanche sur les graphiques je ne gère pas encore bien,

Je regarde cette aprèm après mes cours

Courage,

Si d'autres peuvent aider n'hésitez pas (je suis vraiment pas certain de pouvoir le gérer, là comme ça je penserais à des graphiques dynamiques, mais j'ai pas trop compris ton histoire de formules ... Je relirais, promis )

Bonjour,

Je cherche à créer un bouton me permettant de copier le contenu d'une ligne i (qui est choisi par l'utilisateur à travers d'une inputbox) dans la feuille1 dans la première ligne de la feuille4 puis d'enregistrer la feuille5 sous format pdf.

voici mon code qui ne marche pas(il est incomplet, je suis vrm nul en vba):

Sub Bouton217_Cliquer()
Dim i As Integer
Worksheets("Feuil1").Activate
Worksheets("Feuil4").Activate
Worksheets("Feuil5").Activate
Set i = Application.InputBox("Sample")
Sheets("feuil1").Select
Rows("i").Select
Selection.Copy
Sheets("feuil4").Select
Rows("1").Select
Selection.PasteSpecial
End Sub

merci de m'aider

Moui.. Tu aurais pu ouvrir ta propre discussion,

Cela dit ta demande étant élémentaire (enfin disons que puisque j'en ai le niveau, pour une fois ), j'ai codé ta demande :

Option Explicit
Option Base 1

'Je cherche à créer un bouton me permettant de copier le contenu d'une ligne i _
(qui est choisi par l'utilisateur à travers d'une inputbox) dans la feuille1 dans la première ligne de la feuille4 puis d'enregistrer la feuille5 sous format pdf.
'voici mon code qui ne marche pas(il est incomplet, je suis vrm nul en vba):

Sub BoutonChoix()

Dim i As Byte
Dim ws1 As Worksheet
Dim ws4 As Worksheet
Dim ws5 As Worksheet
Dim Mat As Variant
Dim j As Byte
Dim trouve As Boolean

Set ws1 = ThisWorkbook.Worksheets("Feuille1")
Set ws4 = ThisWorkbook.Worksheets("Feuille4")

i = Application.InputBox("Quelle ligne de la feuille 1 voulez-vous copier ?", Default:=1, Title:="Choix ligne")

ws1.Rows(i).Copy Destination:=ws4.Rows(1)

'Boucle pour vérifier que la feuille5 n'existe pas encore, et si c'est le cas la créer
'Ca c'est juste pour mon kiff :D

trouve = False
For j = 1 To Application.Sheets.Count
    If Sheets(j).Name = "Feuille5" Then trouve = True: GoTo ok
Next j
ok:
If trouve = False Then Sheets.Add(after:=ws4).Name = "Feuille5"

Set ws5 = ThisWorkbook.Worksheets("Feuille5")

ws4.Cells.Copy Destination:=ws5.Cells

'ws5.SaveAs("Feuille5",pdf)
End Sub

A noter :

1/ Les noms des feuilles sont obligatoirement Feuille1 et Feuille4

2/ Le recopiage se fait dans la ligne 1 de la feuille 4. je peux coder le fait que si tu relances la procédure, ça colle dans la ligne d'en dessous pour ne pas effacer les premières données ...

3/ j'ai pas terminer de coder l'enregistrement en PDF, j'y travaille, mais là je fais une pause : à toute

c'est parfait Douzal je te remercie c'est toop, et pour enregistrer la feuille 2 sous format pdf avec le même bouton j'ai ce code (qui ne marche pas ):

Dim fichier As String

With Worksheets("Feuil2")

fichier = "Symbo" & .Range("C12") & .Range("B11") & ".pdf"

Chemin = rep \ D: Mohamed DELMAACHI \ Mesdocuments \ Symbolisation & fichier.ExportAsFixedFormatType = xlTypePDF, Filename:=Chemin, Quality:=xlQualityStandard, _

IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

End With

End Sub

merci merci merci

Tu peux copier ce code, j'ai juste rajouté un appel à une procédure toute faite du net (d'ici plus exactement) ;

Je n'ai pas le temps de m'attarder plus sur la façon dont on enregistre,

Ci dessous, procédure d'avant j'ai juste rajouté un appel de la nouvelle procédure.

Option Explicit
Option Base 1

'Je cherche à créer un bouton me permettant de copier le contenu d'une ligne i _
(qui est choisi par l'utilisateur à travers d'une inputbox) dans la feuille1 dans la première ligne de la feuille4 puis d'enregistrer la feuille5 sous format pdf.
'voici mon code qui ne marche pas(il est incomplet, je suis vrm nul en vba):

Sub BoutonChoix()

Dim i As Byte
Dim ws1 As Worksheet
Dim ws4 As Worksheet
Dim ws5 As Worksheet
Dim Mat As Variant
Dim j As Byte
Dim trouve As Boolean

Set ws1 = ThisWorkbook.Worksheets("Feuille1")
Set ws4 = ThisWorkbook.Worksheets("Feuille4")

ws4.Cells.Clear

'En gros, ça dit "Affecte à ws5 la feuille 5 ; s'il y a une erreur à ce moment, pas grave passe à l'étape suivante : là tu vérifie qu'il n'y a 'pas eu d'erreur depuis le début du programme, s'il y en a eu une, c'est forcément que la feuille5 n'existait pas, donc tu la crée.
'Ensuite, qu'elle ait été là depuis le début (tu l'affectes une seconde fois, mais aucune importance) ou qu'elle vienne d'être créée, elle 'sera désormais désignée par Feuille5"
On Error Resume Next
Set ws5 = ThisWorkbook.Worksheets("Feuille5")
If Err.Number <> 0 Then Sheets.Add(after:=ws4).Name = "Feuille5"

Set ws5 = ThisWorkbook.Worksheets("Feuille5")

i = Application.InputBox("Quelle ligne de la feuille 1 voulez-vous copier ?", Default:=1, Title:="Choix ligne")

ws1.Rows(i).Copy Destination:=ws4.Rows(1)

ws4.Cells.Copy Destination:=ws5.Cells

Call PDFActiveSheet

'ws5.SaveAs("Feuille5",pdf)
End Sub
Sub PDFActiveSheet()
Dim ws As Worksheet
Dim strPath As String
Dim myFile As Variant
Dim strFile As String
On Error GoTo errHandler

Set ws = ActiveSheet

'enter name and select folder for file
' start in current workbook folder
strFile = Replace(Replace(ws.Name, " ", ""), ".", "_") _
            & "_" _
            & Format(Now(), "yyyymmdd\_hhmm") _
            & ".pdf"
strFile = ThisWorkbook.Path & "\" & strFile

myFile = Application.GetSaveAsFilename _
    (InitialFileName:=strFile, _
        FileFilter:="PDF Files (*.pdf), *.pdf", _
        Title:="Select Folder and FileName to save")

If myFile <> "False" Then
    ws.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=myFile, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False

    MsgBox "PDF file has been created."
End If

exitHandler:
    Exit Sub
errHandler:
    MsgBox "Could not create PDF file"
    Resume exitHandler
End Sub

Si je comprends bien le code, la première partie affecte à StrFile un nom de document, ensuite configuration d'une proposition de nom de fichier et selection du format pdf (là dessus, je décrypte pas forcément tout en détail), et ensuite on vérifie que l'utilisateur a bien cliqué sur OK et enregistré.

Puis message de vérification.

Voilà ce que j'en conclus, et ça marche pour moi.

Seulement, ça soule un peu si tu dois faire ça sur plusieurs pages, d'avoir les messages d'alerte.

Ca se désactive (comme le msgbox à la fin pour dire si l'enregistrement a bien marché)

NB : en fait je viens aussi de changer du code dans la première partie, un code d'une élégance différente, je ne sais s'il l'est plus ou moins, mais j'aime bien

On Error Resume Next
Set ws5 = ThisWorkbook.Worksheets("Feuille5")
If Err.Number <> 0 Then Sheets.Add(after:=ws4).Name = "Feuille5"

Set ws5 = ThisWorkbook.Worksheets("Feuille5")

En gros, ça dit "Affecte à ws5 la feuille 5 ; s'il y a une erreur à ce moment, pas grave passe à l'étape suivante : là tu vérifie qu'il n'y a pas eu d'erreur depuis le début du programme, s'il y en a eu une, c'est forcément que la feuille5 n'existait pas, donc tu la crée.

Ensuite, qu'elle ait été là depuis le début (tu l'affectes une seconde fois, mais aucune importance) ou qu'elle vienne d'être créée, elle sera désormais désignée par Feuille5"

C'est plus rapide en tout cas.

Et ensuite, j'efface les feuilles 4 et 5 pour les remettre à 0, et là je commence le copiage etc.

C'est parfait Douzal tu as répondu à toutes mes questions. tu me sauves la vie

merci merci

Bonjour,

Je reviens concernant le code que tu m'as fait DOUZAL, il est parfait sauf qu'il ne marche plus à partir de la 256 ème ligne.

ce qui se passe c'est qu'il ne copie plus la ligne 256 de la feuille1 dans la première ligne de la feuille 4.

J'ai essayé de cherché d'où pouvait venir le pb mais je ne trouve pas.

Si vous pouviez m'aider SVVP

simo77 a écrit :

Bonjour,

Je reviens concernant le code que tu m'as fait DOUZAL, il est parfait sauf qu'il ne marche plus à partir de la 256 ème ligne.

ce qui se passe c'est qu'il ne copie plus la ligne 256 de la feuille1 dans la première ligne de la feuille 4.

J'ai essayé de cherché d'où pouvait venir le pb mais je ne trouve pas.

Si vous pouviez m'aider SVVP

Ah oui, j'ai la mauvaise habitude de déclarer BYTE certaines variables que j'estime ne pas dépasser 255 en valeurs...

Ce qui est, ici, faux.

En général pour un compteur pour une petite boucle, ça suffit.

Change ma déclaration de Byte à Integer, voir à Long (si tu as plus de 32.764 valeurs, de mémoire, mets en LONG)

Dim TaVariable as Byte
Dim TaVariable as Integer

Ca devrait fonctionner

Merci, ça marche. J'aurais appris plein de trucs

simo77 a écrit :

Merci, ça marche. J'aurais appris plein de trucs

Avec plaisir

Pour une fois que je suis assez calé pour aider ...

Rechercher des sujets similaires à "inserer bouton 2013"