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,

3did350.xlsm (396.67 Ko)

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

Rechercher des sujets similaires à "aide vba fichier pro"