VBA TCDS insertion des données sur toutes les feuilles du classeur

Bonjour,

J'aimerai faire en vba une macro qui me permettrait de mettre à jour tous mes tableaux sur mon fichier de reporting que je fais chaque jour. L'objectif de cette macro serait d'insérer chaque jour les nouvelles données du jour. Je me débrouille un peu en VBA et j'ai créer une macro qui fonctionne mais pour seulement un tableau à la fois alors que j'aimerai que cela se fasse automatiquement sur chacun des tableaux. Je ne peux vous déposer de fichier car ce sont données confidentiels mais voici la macro qui je souhaiterai marché sur les 5 feuilles de mon fichier qui sont tous fait de manière identique mais pour des clients différents.

Voici la macro que j'utilise sur chaque onglet pour le moment :

Sub insertion()
moncpteur = 0
differencedate = 0
ladate = 0
Celluledébut = ""
cellulefin = ""

Range("g8").Select
Selection.End(xlDown).Select
'Do While ActiveCell.Value <> ""
'ActiveCell.Offset(1, 0).Select
'Loop
ladate = ActiveCell.Value
celluledebut = ActiveCell.Address

ActiveCell.Offset(1, 0).Select
differencedate = Range("g3").Value - ladate
Range(ActiveCell.Offset(0, 0), ActiveCell.Offset(0, 19)).Select

Do While moncpteur <= differencedate - 1
Selection.Insert Shift:=xlDown
moncpteur = moncpteur + 1
'ActiveCell.Offset(1, 0).Select
Loop
cellulefin = ActiveCell.Offset(moncpteur - 1, 19).Address
Selection.End(xlUp).Select
Range(ActiveCell.Offset(0, 0), ActiveCell.Offset(0, 19)).Select
Selection.Copy
Range(celluledebut, cellulefin).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("g8").Select
End Sub

Merci de votre aide.

Bonjour,

Les données de votre fichier sont confidentielles, mais rien ne vous empêche de déposer un fichier bidon(donc sans données confidentielles) mais construit identiquement au fichier réel, ainsi vous obtiendrez rapidement de l'aide.

Pour votre code, il suffit de créer une boucle qui sélectionne chaque feuille à tour de rôle. Je vous mets le code pour la méthode à employer, cependant votre code, qui est visiblement le résultat de l'enregistreur de macro, n'est pas du tout optimisé, (tous ces "select" et "Selection" sont inutiles) .

Un code bien écrit devrait réduire considérablement le nombre de lignes et verrait sa vitesse d'exécution grandement augmenter .

Voici le principe, si vous aviez mis le nom des 5 feuilles à traiter, j'aurai pu vous fournir le code amélioré mais en absence de ces quelques détails, je ne peux que faire ceci, mais en faisant cela je ne vous rends pas service pour évoluer dans vos prochaines macros:

    moncpteur = 0
    differencedate = 0
    ladate = 0
    Celluledébut = ""
    cellulefin = ""
    Application.ScreenUpdating = False
    For i = 1 To Sheets.Count 'boucle sur chaque feuille
        Sheets(i).Select
        Range("g8").Select
        '***** la suite de votre code *****************
    Next i

Cdlt

Bonjour,

Merci pour votre aide malheureusement je ne pourrai pas faire un fichier fictif car la base de donnée est interne à l'entreprise et n'est pas sur le fichier en lui même.

Tous mes TCDS se mettent à jour via la "BI" qui est notre base de donnée dès que j'actualise les données du jour.

Votre code m'aide bien et j'ai essayer de faire ce code en macro mais je m'y connais pas beaucoup en VBA. Je me forme actuellement dessus pour essayer d'automatiser le plus possible de fichier pour faciliter le travail à mes collègues et à moi même.

Les 6 feuilles en questions se nomme : dans l'ordre précis : Avant Cap, BAB2, CAP 3000, Deauville, Toulouse, Web.

En attente de votre retour.

Merci de votre aide.

Cordialement,

David

Bonjour,

Voilà, d'après l'analyse de votre code, dites-moi si cela correspond bien à ce que vous espériez. J'ai commenté chaque ligne pour que vous puissiez comprendre.

Option Explicit 'oblige de déclarer les variables
Option Compare Text 'pour ne pas faire de distinction entre les majuscules et les minuscules

Sub insertion()
    'déclaration des variables
    Dim Sh As Worksheet
    Dim MonCpteur As Long, DifferenceDate As Long, i As Long, DerLig As Long
    Dim LaDate As Date

    'initialisation des variables
    MonCpteur = 0
    DifferenceDate = 0
    LaDate = 0

    Application.ScreenUpdating = False 'évite les rafraîchissements de l'écran et accélère la vitesse d'exécution
    For i = 1 To Sheets.Count 'on passe tour à tour sur toutes les feuilles
        Select Case Sheets(i).Name 'selon le nom de la feuille
            Case Is = "Avant Cap", "BAB2", "CAP 3000", "Deauville", "Toulouse", "Web" 'si la feuille à traiter est l'une de ces six, alors:
                Set Sh = Sheets(Sheets(i).Name) 'Affectation de la variable "Sh" à la feuille traitée
                DerLig = Sh.Range("G8").End(xlDown).Row 'on recherche la dernière ligne de la colonne G en partant de la ligne 8
                LaDate = Sh.Cells(DerLig, "G") 'la date est celle de la dernière cellule de la colonne G
                DifferenceDate = Sh.Range("G3").Value - LaDate 'Différence entre les dates
                Do While MonCpteur <= DifferenceDate - 1
                    Range(Sh.Cells(DerLig + 1, "G"), Sh.Cells(DerLig + 1, "S")).Insert Shift:=xlDown 'on insére une ligne au-dessous de la dernière ligne
                    MonCpteur = MonCpteur + 1 'on incrémente le compteur
                Loop
            Range(Sh.Cells(DerLig + 1, "G"), Sh.Cells(DerLig + MonCpteur, "S")).Value = Range(Sh.Cells(DerLig, "G"), Sh.Cells(DerLig, "S")).Value
        End Select
    Next i 'on passe à la feuille suivante
    Set Sh = Nothing 'on libère la mémoire
End Sub

Cdlt

Bonjour,

C'est presque ça mais ca ne tient pas compte si je le fais sur une période longue quand ça insère les lignes cela doit prendre en compte toutes les données.

Par exemple quand je le fais le lundi cela doit prendre en compte les données du vendredi au dimanche et pas juste de la veille. Mon ancien code prenait en compte ces variables la. Mais grâce à vous et vos détails je m'en rapproche.

Je vous met en pièce jointe une capture d'écran du résultat de votre code pour vous montrer :

En tout cas c'est presque ça mais je dois avoir les données de tous les jours quand ça insère les données sur chaque ligne. Tout commence de la colonne G pour les données de chaque tableau mais sur chaque feuille j'ai eu une insertion de ligne différente qui ne prenait pas en compte des tableaux du dessous.

Je ne sais pas si j'explique bien mais en tout cas déjà merci.

En attente de votre retour.

Résultat attendu quand cela étire du 14 novembre au 22 novembre de la colonne G à Z.

Il suffit de remplacer tous les "S" par "Z" dans le code ( il n'y a que 3 endroits).

Option Explicit 'oblige de déclarer les variables
Option Compare Text 'pour ne pas faire de distinction entre les majuscules et les minuscules

Sub insertion()
    'déclaration des variables
    Dim Sh As Worksheet
    Dim MonCpteur As Long, DifferenceDate As Long, i As Long, DerLig As Long
    Dim LaDate As Date

    'initialisation des variables
    MonCpteur = 0
    DifferenceDate = 0
    LaDate = 0

    Application.ScreenUpdating = False 'évite les rafraîchissemenst de l'écran et accélère la vitesse d'exécution
    For i = 1 To Sheets.Count 'on passe tour à tour sur toutes les feuilles
        Select Case Sheets(i).Name 'selon le nom de la feuille
            Case Is = "Avant Cap", "BAB2", "CAP 3000", "Deauville", "Toulouse", "Web" 'si la feuille à traiter est l'une de ces six, alors:
                Set Sh = Sheets(Sheets(i).Name) 'Affectation de la variable "Sh" à la feuille traitée
                DerLig = Sh.Range("G8").End(xlDown).Row 'on recherche la dernière ligne de la colonne G en partant de la ligne 8
                LaDate = Sh.Cells(DerLig, "G") 'la date est celle de la dernière cellule de la colonne G
                DifferenceDate = Sh.Range("G3").Value - LaDate 'Différence entre les dates
                Do While MonCpteur <= DifferenceDate - 1
                    Range(Sh.Cells(DerLig + 1, "G"), Sh.Cells(DerLig + 1, "Z")).Insert Shift:=xlDown 'on insére une ligne au-dessous de la dernière ligne
                    MonCpteur = MonCpteur + 1 'on incrémente le compteur
                Loop
            Range(Sh.Cells(DerLig + 1, "G"), Sh.Cells(DerLig + MonCpteur, "Z")).Value = Range(Sh.Cells(DerLig, "G"), Sh.Cells(DerLig, "Z")).Value
        End Select
    Next i 'on passe à la feuille suivante
    Set Sh = Nothing 'on libère la mémoire
End Sub

Bonjour,

ça pour le Z je le savais mais cela ne change rien au résultat qui reste erroné car cela ne prend pas en compte dans la boucle qu'il faut ajouter jour par jour les données des TCDS et des formules dans le tableau comme dans ma précédente macro qui prenait en compte ce détail.

En attente de votre retour,

Bonjour,

Comme je n'ai pas votre fichier à disposition, j'ignore s'il y a des formules dans la partie à recopier, sinon essayez ceci:

Sub insertion()
    'déclaration des variables
    Dim Sh As Worksheet
    Dim MonCpteur As Long, DifferenceDate As Long, i As Long, DerLig As Long
    Dim LaDate As Date

    'initialisation des variables
    MonCpteur = 0
    DifferenceDate = 0
    LaDate = 0

    Application.ScreenUpdating = False 'évite les rafraîchissemenst de l'écran et accélère la vitesse d'exécution
    For i = 1 To Sheets.Count 'on passe tour à tour sur toutes les feuilles
        Select Case Sheets(i).Name 'selon le nom de la feuille
            Case Is = "Avant Cap", "BAB2", "CAP 3000", "Deauville", "Toulouse", "Web" 'si la feuille à traiter est l'une de ces six, alors:
                Set Sh = Sheets(Sheets(i).Name) 'Affectation de la variable "Sh" à la feuille traitée
                DerLig = Sh.Range("G8").End(xlDown).Row 'on recherche la dernière ligne de la colonne G en partant de la ligne 8
                LaDate = Sh.Cells(DerLig, "G") 'la date est celle de la dernière cellule de la colonne G
                DifferenceDate = Sh.Range("G3").Value - LaDate 'Différence entre les dates
                Do While MonCpteur <= DifferenceDate - 1
                    Range(Sh.Cells(DerLig + 1, "G"), Sh.Cells(DerLig + 1, "Z")).Insert Shift:=xlDown 'on insére une ligne au-dessous de la dernière ligne
                    MonCpteur = MonCpteur + 1 'on incrémente le compteur
                Loop
                Range(Sh.Cells(DerLig, "G"), Sh.Cells(DerLig, "Z")).Copy Range(Sh.Cells(DerLig + 1, "G"), Sh.Cells(DerLig + MonCpteur, "Z"))
        End Select
    Next i 'on passe à la feuille suivante
    Set Sh = Nothing 'on libère la mémoire
End Sub

Merci beaucoup ça fonctionne parfaitement.

Bonjour,

Merci encore pour ton aide pourrais-tu m'aider pour un dernier sujet sur le même fichier stp ??

J'ai poster une autre annonce " VBA reporter le CA de chaque jour sur la feuille budget de mon fichier" .

Merci de ton aide.

Rechercher des sujets similaires à "vba tcds insertion donnees toutes feuilles classeur"