Aide VBA pour fichier pro
Bonjour à tous, je me tourne vers vous pour un peu d'aide.
Je vous joints mon fichier allégé, voilà ce que je cherche à faire : dans la cellule E6, une moulinette fait défiler les années, je désirerai que chaque fois que l'année change en E6 que l'onglet de l'année correspondante s'affiche et que les cellules D11 à H11 se remplissent de façon automatique. J’arrive à l'aide de bouton faire ce que je voudrais mais il me manque des connaissances pour finaliser cette manip. Comme vous pourrez le découvrir dans mes macros, je tâtonne pas mal pour arriver au résultat que je cherche.
J’ai trouvé comment faire pour que la suite de mon projet avance avec la création d'onglets suivant le nombre de relevé à effectuer. Et par la suite je voudrais que chaque feuille de relevé prenne les infos de l’année concernée, mais cela sera peut-être le sujet d’un prochain post si je ne m’en sors pas.
En vous remerciant du temps passé
Cordialement
Didier
bonsoir,
dans la cellule E6, une moulinette fait défiler les années, je désirerai que chaque fois que l'année change en E6 que l'onglet de l'année correspondante s'affiche et que les cellules D11 à H11 se remplissent de façon automatique
c'est quoi l'onglet de l'année correspondant à 2016 ou 2017.
a+
Fronck
bonjour,
Hum... J'ai ajouté une feuille 2017 et pour les besoins du test j'ai supprimé la toupie et remplacé par un Worksheet_Change parce que ça me les brisait ! Bon je suppose que de toute façon tu sauras adapter...
A+
Bonjour,
Merci de votre aide
Pour répondre à Fronck:
Les onglets 2016 /2017 etc., représentent les années ou les relevés de zones d'attaches doivent être effectué, ensuite il y a donc le relevé initial et si besoin un relevé après correction.
Pour répondre à galopin :
Merci pour le Worksheet, je vais tenter de le « bidouiller » pour le mettre à ma sauce, le vba est un peu comme le triangle des Bermudes pour moi lol un gros débutant le Did350.
Je reviendrai vers vous si je ne m’en sors pas
Merci pour votre temps
A bientôt
Bonjour,
Laisse donc comme j'ai fait : inutile de se compliquer la vie !
A+
Merci Galopin, effectivement j'ai mis du temps à répondre car je ne voulais pas lâcher l'affaire... et pour finir j’abandonne la moulinette sur la date. Avec des collègues nous avons tenté de résoudre ce problème mais vu nos niveau à part un claquage de neurone nous ne risquons pas de trouver
Je continus sur mon premier post vu que ma question est en rapport direct avec l'évolution du fichier.
Voilà ci joint le code et la création des onglets par rapport aux nombres de défauts à gérer fonctionne... 2 semaines pour comprendre le truc... maintenant je voudrais rajouter le remplissage automatique des onglets créés et du coup je ne sais pas où je dois mettre le système de copie des infos dans mon code de création d'onglet. Ce que je souhaiterai serait que suivant la date sélectionnée en E3 sur l'onglet "récapitulatif" les infos de l'onglet de l'année correspondante (ici 2017), remplissent chaque onglet de 1 à max, en récupérant les infos sur l'onglet 2017.
Sub premierrelevé()
'bloque le raffraichissement du classeur
Application.ScreenUpdating = False
'rendre visible la feuille relevé
Sheets("relevé").Visible = True
' nom de la feuille
Dim nom_feuille As Integer
' compteur de boucle
Dim A As Integer
' definition d'un objet feuille
Dim Feuille As Worksheet
' assignation des valeurs des variables
NO_relevé = Sheets("relevé").Range("P10").Value
nom_feuille = 0
'creation des onglets " relevés"
For A = 1 To Range("D4").Value
Sheets("relevé").Copy After:=Sheets(Worksheets.Count)
ActiveSheet.Name = nom_feuille + A
ActiveSheet.Range("D4").Value = NO_relevé + A
Next A
'c'est cette partie que je ne sais pas comment modifier et ou la mettre pour automatiser le remplissage
'selection du premier onglet à completer
Sheets("1").Select
'valeur pour completer l'onglet 1
'code geographique de la zone à relever
Range("Y8").Select
ActiveCell.FormulaR1C1 = "='2017'!R[-2]C[-13]"
'Groupe UIC de la ligne
Range("Q8").Select
ActiveCell.FormulaR1C1 = "='2017'!R[-2]C[5]"
'Vitesse de la ligne
Range("U8").Select
ActiveCell.FormulaR1C1 = "='2017'!R[-2]C"
'voie concernée
Range("AC8").Select
ActiveCell.FormulaR1C1 = "='2017'!R[-2]C[-16]"
'type de plancher de la voie
Range("Q12").Select
ActiveCell.FormulaR1C1 = "='2017'!R[-6]C[1]"
'rayonde la courbe
Range("Y12").Select
ActiveCell.FormulaR1C1 = "='2017'!R[-6]C[-5]"
'profil du rail de la zone
Range("Y18").Select
ActiveCell.FormulaR1C1 = "='2017'!R[-12]C[-8]"
'type d'attaches de la zone
Range("AG16").Select
ActiveCell.FormulaR1C1 = "='2017'!R[-10]C[-14]"
'point kilometrique du debut de la zone
Range("D12").Select
ActiveCell.FormulaR1C1 = "='2017'!R[-6]C[10]"
'point kilometrique de la fin de la zone
Range("K12").Select
ActiveCell.FormulaR1C1 = "='2017'!R[-6]C[4]"
'selection du second onglet à completer
Sheets("2").Select
'code geographique de la zone à relever
Range("Y8").Select
ActiveCell.FormulaR1C1 = "='2017'!R[-2]C[-13]"
'Groupe UIC de la ligne
Range("Q8").Select
ActiveCell.FormulaR1C1 = "='2017'!R[-1]C[5]"
'Vitesse de la ligne
Range("U8").Select
ActiveCell.FormulaR1C1 = "='2017'!R[-1]C"
'voie concernée
Range("AC8").Select
ActiveCell.FormulaR1C1 = "='2017'!R[-1]C[-16]"
'type de plancher de la voie
Range("Q12").Select
ActiveCell.FormulaR1C1 = "='2017'!R[-5]C[1]"
'rayonde la courbe
Range("Y12").Select
ActiveCell.FormulaR1C1 = "='2017'!R[-5]C[-5]"
'profil du rail de la zone
Range("Y18").Select
ActiveCell.FormulaR1C1 = "='2017'!R[-11]C[-8]"
'type d'attaches de la zone
Range("AG16").Select
ActiveCell.FormulaR1C1 = "='2017'!R[-9]C[-14]"
'point kilometrique du debut de la zone
Range("D12").Select
ActiveCell.FormulaR1C1 = "='2017'!R[-5]C[10]"
'point kilometrique de la fin de la zone
Range("K12").Select
ActiveCell.FormulaR1C1 = "='2017'!R[-5]C[4]"
Sheets("relevé").Visible = False
Sheets("Recapitulatif").Select
End Sub
bonjour,
voir fichier joint
Nota : Ce n'est pas une bonne idée de "peindre" toutes les bordures de cellules en blanc surtout dans les très grands tableaux.
Ce n'est pas une bonne idée non plus de tout quadriller pour les colonnes et de mettre des pointillés sur les lignes... toujours pour les très grands tableaux surtout pour des classeurs qui ont vocation à avoir un grand nombre de feuilles...
Je t'accorde que le quadrillage natif d'Excel n'est pas très visible pour les mal-voyants. mais Excel est un tableur et le transformer en tableau abstrait ou en sapin de Noel est une méconnaissance des impératifs de gestion des ressources d'Excel...
A+
merci beaucoup Galopin, ton code correspond bien a ce que je cherchais à faire depuis des semaines. pour le coté sapin de noel j'en suis désolé mais j'ai des chefs qui aiment bien le rapport visuel, que les choses contraire aux normes leur éclatent au visage sans avoir a lire tous les détails...
Bonjour à tous, une nouvelle question:
Avec l'aide de Galopin et de LooReed pour un autre post le code de mon fichier a bien avancé je les en remercie, par contre je n'arrive pas à faire en sorte qu'a la sélection de l'année en E3, celle-ci soit prise en compte directement dans le code de fabrication des onglets...
Sub PremierReleve()
'fonctionne mais à ameliorer pour que le choix des dates ne reste pas sur 2017
'stop le rafraichissement de la page
Application.ScreenUpdating = False
'stop les alertes
Application.DisplayAlerts = False
'affiche tous les onglets
Dim Onglets As Worksheet
For Each Onglets In Worksheets
Onglets.Visible = True
Next Onglets
'remplie les onglets de prospections avec les valeurs appropriées
Dim a%, aa%, iNomF%
Dim WsR As Worksheet
Set WsR = Worksheets("Recapitulatif")
For a = 1 To WsR.Range("D4").Value
aa = a + 5
Sheets("relevé").Copy After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = a
With Worksheets(CStr(a))
.Range("Y8").Formula = "='2017'!L" & aa 'code geographique de la zone à relever
.Range("Q8").Formula = "='2017'!V" & aa 'Groupe UIC de la ligne
.Range("U8").Formula = "='2017'!U" & aa 'Vitesse de la ligne
.Range("AC8").Formula = "='2017'!M" & aa 'voie concernée
.Range("Q12").Formula = "='2017'!R" & aa 'type de plancher de la voie
.Range("Y12").Formula = "='2017'!T" & aa 'rayon de la courbe
.Range("Y18").Formula = "='2017'!Q" & aa 'profil du rail de la zone
.Range("AG16").Formula = "='2017'!S" & aa 'type d'attaches de la zone
.Range("D12").Formula = "='2017'!N" & aa 'point kilometrique du debut de la zone
.Range("K12").Formula = "='2017'!O" & aa 'point kilometrique de la fin de la zone
End With
Next a
'selection de l'onglet 1
Sheets("1").Select
'selection de l'ensemble des onglets à imprimer puis à supprimer
Dim f As Worksheet
Nom_f = 1
For Each f In ActiveWorkbook.Sheets
If f.Index > 35 Then f.Select Replace:=False
Next f
'imprimer en pdf avec demande d'avis
Dim Chemin As String, Fich As String, Rep As String, CheminComplet As String
Chemin = "c:\temp"
Fich = CreateObject("Scripting.FileSystemObject").GetBaseName(ThisWorkbook.Name)
CheminComplet = Chemin & "\" & Fich & ".pdf"
Rep = Dir(Chemin & "\" & Fich & ".pdf")
If Rep = "" Then
réponse = MsgBox("Le fichier n'existe pas, création du fichier PDFCreator", vbYesNo)
If réponse = vbYes Then
Impression:
ChDir Chemin
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Rep, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False
Else
MsgBox "Sortie de la procédure"
Exit Sub
End If
Else
Réponse1 = MsgBox("le fichier existe voulez-vous le remplacer ?", vbYesNo)
If Réponse1 = vbYes Then
MsgBox "Remplacement du fichier existant"
GoTo Impression
Else
MsgBox "Sortie de la procédure"
End If
End If
'supprime les onglets aprés impression
ActiveWindow.SelectedSheets.Delete
'retour sur la feuille recap
Sheets("Recapitulatif").Select
'remise en route des alertes et de la mise a jour de la page
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
cela fait plusieurs jour que je me bats avec le code en essayant de rajouter des fonctions Dim for next mais ça plante tout... en gros j'ai réussi à faire cohabiter plusieurs codes avec pas mal de chance j'ai l'impression...mais là je ne m'en sort vraiment pas.
Donc ce que je désirerai, dans le code ci-dessus, à la place de 2017, que cela prenne en référence la valeur de la cellule E3 et non pas que l'année 2017.
en vous remerciant
Didier
merci de votre attention
je n'ai pas encore trouvé la solution mais je continues à chercher
bonjour,
Essaie :
Dim a%, aa%, iNomF%, Ann$
Dim WsR As Worksheet
Set WsR = Worksheets("Recapitulatif")
Ann = .[E3]
For a = 1 To WsR.Range("D4").Value
aa = a + 5
Sheets("relevé").Copy After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = a
With Worksheets(CStr(a))
.Range("Y8").Formula = "='" & Ann & "'!L" & aa
.Range("Q8").Formula = "='" & Ann & "'!V" & aa
'...
A+
merci beaucoup Galopin, je pensais que j'etais obligé de faire forcement un "for" pour introduire une variable dans le code... cela fonctionne mais j'ai du remplacer le
Ann = .[E3]
par
Ann = Range("E3").Value
chez moi il ne veut pas du . avec les crochets mais avec un peu de recherche j'ai compris ce que cela voulait dire. tu m'as bien fait progresser sur ce coup la.
à bientot
Didier