remplir un tableau sur une autre feuille suivant la date choisi

Gargol

XLDnaute Nouveau
Bonjour,

j'ai une idée en tete mais je ne sais pas du tous comment mettre cela en oeuvre, ni meme si cela est possible.
J'imagine que oui quand meme, c'est pas si complexe que ca ;p

1- remplir tableau BDD
j'ai donc une feuille dans laquelle je rempli une cellule avec la date, puis d'autre cellule avec des valeurs numerique principalement.
Ce que j'aimerai faire c'est que lorsque je rempli les différentes cellule, les valeurs s'inscrivent dans un tableau sur une autre feuille dans la ligne de la date choisi.
Dans se tableau il y a biensur chaque jour de l'année + 15j, jamais plus. le fichier sera neuf chaque année.

En gros j'apparente ca a remplir une base de données.

2- consultation/modification tableau BDD
en etant sur ma feuille formulaire, si je renseigne une date pour laquelle des valeurs ont deja été tapé, il faudrait les faires revenir dans mon "formulaire"

3- cerise sur le gateau
conserver la mise en forme et les eventuelle commentaire d'une feuille a l'autre.

Bref je ne sais pas trop par ou commencer ni comment m'y prendre, donc si quelqu'un a des idées je suis prenneur.

Un petit fichier exemple ci joint ;p ca sera certainement utile.

Merci
 

Pièces jointes

  • exemple.xlsx
    52.1 KB · Affichages: 54
  • exemple.xlsx
    52.1 KB · Affichages: 61
  • exemple.xlsx
    52.1 KB · Affichages: 58

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : remplir un tableau sur une autre feuille suivant la date choisi

Bonjour Cargol,

un essai en pièce jointe

à+
Philippe
 

Pièces jointes

  • 111.xlsm
    61.4 KB · Affichages: 54
  • 111.xlsm
    61.4 KB · Affichages: 53
  • 111.xlsm
    61.4 KB · Affichages: 62

Dranreb

XLDnaute Barbatruc
Re : remplir un tableau sur une autre feuille suivant la date choisi

Bonjour.
Un essai avec ça dans le module Feuil1 (Formulaire)
VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$2" Then
   Application.EnableEvents = False
   Me.[E7:N7].Value = Feuil2.[B:K].Rows(Me.[E2].Value - [debut_exercice].Value + 4).Value
   Application.EnableEvents = True
ElseIf Not Intersect(Me.[E7:N7], Target) Is Nothing Then
   Feuil2.Cells(Me.[E2].Value - [debut_exercice].Value + 4, Target.Column - 3).Value = Target.Value
   End If
End Sub
P.S. À la reflexion, ceci serait plus proche de ce que vous souhaitez :
VB:
Option Explicit
Dim Ligne As Long

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$2" Then
   Ligne = Me.[E2].Value - [debut_exercice].Value + 4
   Application.EnableEvents = False
   Feuil2.[B:K].Rows(Ligne).Copy Destination:=Me.[E7:N7]
   Application.EnableEvents = True
Else
   Set Target = Intersect(Me.[E7:N7], Target)
   If Target Is Nothing Then Exit Sub
   If Ligne = 0 Then Ligne = Me.[E2].Value - [debut_exercice].Value + 4
   Target.Copy Destination:=Feuil2.Cells(Ligne, Target.Column - 3)
   End If
End Sub
 
Dernière édition:

Gargol

XLDnaute Nouveau
Re : remplir un tableau sur une autre feuille suivant la date choisi

Merci phlaurent55 pour le 1er exemple.

Et merci Dranreb car ta 2eme proposition est presque parfaite, seul petite amelioration si tu peux l'apporté est pour la mise en forme / commentaire, il n'apparaissent dans BDD uniquement si ma cellule contient une formule (ou commence par = ).
Si, par exemple, je tape simplement "19" la mise en forme n'est pas reporté.

Je vais adapter cela a mon veritable fichier, pour voir si j'arrive a tous faire fonctionné ;p

En tous les cas MERCI pour l'aide.
 

Dranreb

XLDnaute Barbatruc
Re : remplir un tableau sur une autre feuille suivant la date choisi

Je ne peux malheureusement pas détecter un changement de mise en forme ou de commentaire.
La seule solution est de ne changer qu'après sa valeur.
Quoique… Il n'est d'ailleurs pas nécessaire que la ligne se mette à jour en temps réel,
seulement quand on change la date ou qu'on active une autre feuille.
À +

Donc:
VB:
Option Explicit
Dim Ligne As Long

Private Sub Worksheet_Activate()
Récupérerligne
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$2" Then ReporterLigne: Récupérerligne
End Sub

Private Sub Worksheet_Deactivate()
ReporterLigne
End Sub

Private Sub Récupérerligne()
Ligne = Me.[E2].Value - [debut_exercice].Value + 4
Application.EnableEvents = False
Feuil2.[B:K].Rows(Ligne).Copy Destination:=Me.[E7:N7]
Application.EnableEvents = True
End Sub

Private Sub ReporterLigne()
If Ligne <> 0 Then Me.[E7:N7].Copy Destination:=Feuil2.[B:K].Rows(Ligne): Ligne = 0
End Sub
 
Dernière édition:

Gargol

XLDnaute Nouveau
Re : remplir un tableau sur une autre feuille suivant la date choisi

Je pense que j'ai mal expliquer, ce n'est pas le changement de mise en forme que je veux detecter, ton vb fonctionne correctement pour les mise en forme.
Simplement les mises en forme sont reporté dans BDD uniquement si mes cellule de formulaire commencent par =.

mais pas grave c'etais juste un petit plus.

Je suis en train d'adapter le vb a mon fichier final et je coince un petit peu car j'ai plusieurs plages a reporté sur le fichier bdd et je ne comprends pas comment modifie ton script.

VB:
Option Explicit
Dim Ligne As Long

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$2" Then
   Ligne = Me.[E2].Value - [debut_exercice].Value + 5
   Application.EnableEvents = False
   Feuil2.[B:K].Rows(Ligne).Copy Destination:=Me.[E7:N7]
   Feuil2.[M:V].Rows(Ligne).Copy Destination:=Me.[E12:N12]
   Feuil2.[X:AD].Rows(Ligne).Copy Destination:=Me.[E23:K23]
   Feuil2.[AF:AI].Rows(Ligne).Copy Destination:=Me.[E29:H29]
   Feuil2.[AJ:AM].Rows(Ligne).Copy Destination:=Me.[E30:H30]
   Feuil2.[AN:AW].Rows(Ligne).Copy Destination:=Me.[E34:N34]
   Feuil2.[AX:BF].Rows(Ligne).Copy Destination:=Me.[E35:M35]
   Feuil2.[BH:BO].Rows(Ligne).Copy Destination:=Me.[E17:L17]
   Feuil2.[BP:BW].Rows(Ligne).Copy Destination:=Me.[E18:L18]
   Application.EnableEvents = True
Else
   Set Target = Intersect(Me.[E7:N7], Target)
   If Target Is Nothing Then Exit Sub
   If Ligne = 0 Then Ligne = Me.[E2].Value - [debut_exercice].Value + 5
   Target.Copy Destination:=Feuil2.Cells(Ligne, Target.Column - 3)
   End If
End Sub

la 1ere partie fonctionne bien mais je ne comprends pas trop les lignes apres le else.
Comment y inclure les zones detaillé dans la 1ere partie du script?

j'ai joint un fichier un peu plus avancé que le 1er.
 

Pièces jointes

  • exemple3.xlsm
    278.9 KB · Affichages: 49
  • exemple3.xlsm
    278.9 KB · Affichages: 48
  • exemple3.xlsm
    278.9 KB · Affichages: 54

Dranreb

XLDnaute Barbatruc
Re : remplir un tableau sur une autre feuille suivant la date choisi

Voir ma dernière proposition en Edit. Devrait être assez simple à adapter avec plusieurs Copy Destination de lignes différentes du formulaire dans les deux procédures finales sur la même ligne BDD

Remarque: rien n'expliquait que qu'un "=" permette la copie du format. Ça devait coïncider avec l'ordre préalable du format d'abord changé. Mais avec la dernière proposition le problème tombe.
 
Dernière édition:

Gargol

XLDnaute Nouveau
Re : remplir un tableau sur une autre feuille suivant la date choisi

Voila j'ai avancé sur cela avec mes competences ;p
j'obtiens ce que je souhaite mais l'execution est assez lente.

Est il possible d'ameliorer se script:
VB:
Option Explicit
Dim Ligne As Long

'Form_Range = plage cellule Formulaire
'Tab_Range = plage cellule Tableau report
Dim Form_Range1 As Range, Tab_Range1 As Range
Dim Form_Range2 As Range, Tab_Range2 As Range
Dim Form_Range3 As Range, Tab_Range3 As Range
Dim Form_Range4 As Range, Tab_Range4 As Range
Dim Form_Range5 As Range, Tab_Range5 As Range
Dim Form_Range6 As Range, Tab_Range6 As Range
Dim Form_Range7 As Range, Tab_Range7 As Range
Dim Form_Range8 As Range, Tab_Range8 As Range
Dim Form_Range9 As Range, Tab_Range9 As Range
Dim Form_Range10 As Range, Tab_Range10 As Range
Dim Form_Range11 As Range, Tab_Range11 As Range
Dim Form_Range12 As Range, Tab_Range12 As Range
Dim Form_Range13 As Range, Tab_Range13 As Range
Dim Form_Range14 As Range, Tab_Range14 As Range

Dim decalage_ligne As Integer
'...

  
Private Sub Variable_config()
    'ENC_ESP_AKS FR
    Set Form_Range1 = Me.Range("C7:G7")
    Set Tab_Range1 = Feuil3.[B:F]
    'ENC_ESP_AKS CH
    Set Form_Range2 = Me.Range("H7:L7")
    Set Tab_Range2 = Feuil3.[I:M]
    'TRANS_CB_CA_FR
    Set Form_Range3 = Me.Range("C12:E12")
    Set Tab_Range3 = Feuil4.[C:E]
    Set Form_Range4 = Me.Range("F12:G12")
    Set Tab_Range4 = Feuil4.[H:I]
    Set Form_Range5 = Me.Range("H12:J12")
    Set Tab_Range5 = Feuil4.[L:N]
    Set Form_Range6 = Me.Range("K12:L12")
    Set Tab_Range6 = Feuil4.[Q:R]
    'TRANS_CB_CA_CH
    Set Form_Range7 = Me.Range("C17:J17")
    Set Tab_Range7 = Feuil7.[C:J]
    'TRANS_CB_CA_CH Nbr
    Set Form_Range8 = Me.Range("C18:J18")
    Set Tab_Range8 = Feuil7.[L:S]
    'ENC_ESP_DG4
    Set Form_Range9 = Me.Range("C23:F23")
    Set Tab_Range9 = Feuil5.[C:F]
    Set Form_Range10 = Me.Range("G23:I23")
    Set Tab_Range10 = Feuil5.[I:K]
    'ENC_CM_FR
    Set Form_Range11 = Me.Range("C29:F29")
    Set Tab_Range11 = Feuil6.[C:F]
    'ENC_CM_FR Nbr
    Set Form_Range12 = Me.Range("C30:F30")
    Set Tab_Range12 = Feuil6.[S:V]
    'ENC_CM_CH
    Set Form_Range13 = Me.Range("C34:L34")
    Set Tab_Range13 = Feuil6.[H:Q]
    'ENC_CM_CH Nbr
    Set Form_Range14 = Me.Range("C35:K35")
    Set Tab_Range14 = Feuil6.[X:AF]
    
    'decalage 1ere ligne tableau
    decalage_ligne = "3"
    
End Sub
    

Private Sub Worksheet_Activate()
Variable_config
Récupérerligne
End Sub

Private Sub Worksheet_Deactivate()
Variable_config
ReporterLigne
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
Variable_config
    'If Ligne = 0 Then MsgBox "calcul ligne"
    If Ligne = 0 Then Ligne = Me.[C2].Value - [debut_exercice].Value + decalage_ligne ': Variable_config
    If Target.Address = "$C$2" Then ReporterLigne: Récupérerligne
    
    'OK_If Target.Address = "$C$7" Then MsgBox "change": Me.[C7:L7].Copy Destination:=Feuil11.[B:K].Rows(Ligne): Me.[C7:L7].Copy Destination:=Feuil12.[B:K].Rows(Ligne - 33)
    'OK_If Not Intersect(Target, Range("C7:L7")) Is Nothing Then Me.[C7:L7].Copy Destination:=Feuil11.[B:K].Rows(Ligne)
    
    If Not Intersect(Target, Form_Range1) Is Nothing Then Form_Range1.Copy Destination:=Tab_Range1.Rows(Ligne)
    If Not Intersect(Target, Form_Range2) Is Nothing Then Form_Range2.Copy Destination:=Tab_Range2.Rows(Ligne)
    If Not Intersect(Target, Form_Range3) Is Nothing Then Form_Range3.Copy Destination:=Tab_Range3.Rows(Ligne)
    If Not Intersect(Target, Form_Range4) Is Nothing Then Form_Range4.Copy Destination:=Tab_Range4.Rows(Ligne)
    If Not Intersect(Target, Form_Range5) Is Nothing Then Form_Range5.Copy Destination:=Tab_Range5.Rows(Ligne)
    If Not Intersect(Target, Form_Range6) Is Nothing Then Form_Range6.Copy Destination:=Tab_Range6.Rows(Ligne)
    If Not Intersect(Target, Form_Range7) Is Nothing Then Form_Range7.Copy Destination:=Tab_Range7.Rows(Ligne)
    If Not Intersect(Target, Form_Range8) Is Nothing Then Form_Range8.Copy Destination:=Tab_Range8.Rows(Ligne)
    If Not Intersect(Target, Form_Range9) Is Nothing Then Form_Range9.Copy Destination:=Tab_Range9.Rows(Ligne)
    If Not Intersect(Target, Form_Range10) Is Nothing Then Form_Range10.Copy Destination:=Tab_Range10.Rows(Ligne)
    If Not Intersect(Target, Form_Range11) Is Nothing Then Form_Range11.Copy Destination:=Tab_Range11.Rows(Ligne)
    If Not Intersect(Target, Form_Range12) Is Nothing Then Form_Range12.Copy Destination:=Tab_Range12.Rows(Ligne)
    If Not Intersect(Target, Form_Range13) Is Nothing Then Form_Range13.Copy Destination:=Tab_Range13.Rows(Ligne)
    If Not Intersect(Target, Form_Range14) Is Nothing Then Form_Range14.Copy Destination:=Tab_Range14.Rows(Ligne)

End Sub

Private Sub Récupérerligne()
    Ligne = Me.[C2].Value - [debut_exercice].Value + decalage_ligne
    Application.EnableEvents = False
    'Feuil11.[B:K].Rows(Ligne).Copy Destination:=Me.[C7:L7]
    Tab_Range1.Rows(Ligne).Copy Destination:=Form_Range1
    Tab_Range2.Rows(Ligne).Copy Destination:=Form_Range2
    Tab_Range3.Rows(Ligne).Copy Destination:=Form_Range3
    Tab_Range4.Rows(Ligne).Copy Destination:=Form_Range4
    Tab_Range5.Rows(Ligne).Copy Destination:=Form_Range5
    Tab_Range6.Rows(Ligne).Copy Destination:=Form_Range6
    Tab_Range7.Rows(Ligne).Copy Destination:=Form_Range7
    Tab_Range8.Rows(Ligne).Copy Destination:=Form_Range8
    Tab_Range9.Rows(Ligne).Copy Destination:=Form_Range9
    Tab_Range10.Rows(Ligne).Copy Destination:=Form_Range10
    Tab_Range11.Rows(Ligne).Copy Destination:=Form_Range11
    Tab_Range12.Rows(Ligne).Copy Destination:=Form_Range12
    Tab_Range13.Rows(Ligne).Copy Destination:=Form_Range13
    Tab_Range14.Rows(Ligne).Copy Destination:=Form_Range14
    Application.EnableEvents = True
    'MsgBox "recupererligne"
End Sub

Private Sub ReporterLigne()
    'If Ligne <> 0 Then Me.[C7:L7].Copy Destination:=Feuil11.[B:K].Rows(Ligne)
    If Ligne <> 0 Then Form_Range1.Copy Destination:=Tab_Range1.Rows(Ligne)
    If Ligne <> 0 Then Form_Range2.Copy Destination:=Tab_Range2.Rows(Ligne)
    If Ligne <> 0 Then Form_Range3.Copy Destination:=Tab_Range3.Rows(Ligne)
    If Ligne <> 0 Then Form_Range4.Copy Destination:=Tab_Range4.Rows(Ligne)
    If Ligne <> 0 Then Form_Range5.Copy Destination:=Tab_Range5.Rows(Ligne)
    If Ligne <> 0 Then Form_Range6.Copy Destination:=Tab_Range6.Rows(Ligne)
    If Ligne <> 0 Then Form_Range7.Copy Destination:=Tab_Range7.Rows(Ligne)
    If Ligne <> 0 Then Form_Range8.Copy Destination:=Tab_Range8.Rows(Ligne)
    If Ligne <> 0 Then Form_Range9.Copy Destination:=Tab_Range9.Rows(Ligne)
    If Ligne <> 0 Then Form_Range10.Copy Destination:=Tab_Range10.Rows(Ligne)
    If Ligne <> 0 Then Form_Range11.Copy Destination:=Tab_Range11.Rows(Ligne)
    If Ligne <> 0 Then Form_Range12.Copy Destination:=Tab_Range12.Rows(Ligne)
    If Ligne <> 0 Then Form_Range13.Copy Destination:=Tab_Range13.Rows(Ligne)
    If Ligne <> 0 Then Form_Range14.Copy Destination:=Tab_Range14.Rows(Ligne)
    'MsgBox "reporterligne"
End Sub

- Comment declarer mes variable sans les mettre dans une fonction (Variable_config()) que je suis obliger d'appeler par la suite.
Comment "fixer" les valeurs des variables pour la durée de l'utilisation du fichier?
Workbook_Open() est il une bonne solution?
Donc plus besoin d'appeler Variable_config() dans chacune de mes procedures....

-pour la declaration de mes variable dim et set, y'a il possibilité de faire cela avec une boucle?

-pareil pour RecupererLigne ou ReporterLigne, comment utiliser une boucle en changeant uniquement le chiffre du nom de la variable?

En esperant que ces changement puissent ameliorer l'execution du script qui me fige excel pendant plusieurs seconde actuellement :x

Merci d'avance
 

Dranreb

XLDnaute Barbatruc
Re : remplir un tableau sur une autre feuille suivant la date choisi

Bonsoir.
Je ne comprends pas votre adaptation.
Elle ne devait toucher que les procédures RécupérerLigne et ReporterLigne.
Pour ReporterLigne vous n'avez pas besoin de répéter If Ligne <> 0 Then à chaque ligne ! faites une bonne fois pour toutes devant If Ligne = 0 Then Exit Sub
Si le classeur risque d'être fermé sans que la cellule E2 ait été changée ni que la fiche ait été quittée, prévoyez dans une Thisworkbook_BeforeClose la remise à 0 de cette cellule pour que ça provoque l'enregistrement de la fiche via ReporterLigne.
Vous pourriez mettre un code plus sympa avec des boucles en mettant des noms se terminant par un nombre aux colonnes de la liste et aux différentes parties de la fiche. Ce peut êtres les mêmes noms s'ils sont définis avec les noms des feuilles en préfixe.
 
Dernière édition:

Gargol

XLDnaute Nouveau
Re : remplir un tableau sur une autre feuille suivant la date choisi

Pour le fonctionnement je le pensait de cette facon:

Si on change une valeur dans une plage de cellule defini Worksheet_Change() mets a jour le tableau concerné mais uniquement pour une plage et non pour toutes.

Si on change la date, on mets a jour toutes les plages de tous les tableaux ReporterLigne() puis on recupere les valeurs de la nouvelle date.

On change d'onglet => mise a jour de toute les plages
On charge l'onglet => recuperation de toutes les valeurs

Pour la boucle je cherche justement comment faire afin de simplifier le code...
 

Dranreb

XLDnaute Barbatruc
Re : remplir un tableau sur une autre feuille suivant la date choisi

Mais à quoi ça sert ??? Pourquoi mettre à jour le tableau quand on change autre chose que la date, puisqu'on sait que ce serait fait ne serait-ce que si on allait vérifier que ça l'est ? Pour pourriez jurer que toute modification est toujours aussitôt reportée, personne ne serait capable de vous démontrer le contraire ! Il y avait juste ce problème de fermeture du classeur à laquelle je n'avais pas pensé.
 

Gargol

XLDnaute Nouveau
Re : remplir un tableau sur une autre feuille suivant la date choisi

Effectivement c'est tous de suite plus propre comme cela

VB:
Option Explicit
Dim Ligne As Long

'decalage 1ere ligne tableau
Const decalage_ligne As Integer = 3

'[bdd_form_1] à [bdd_form_14] => plage de cellule de la feuille formulaire
'[bdd_tab_1] à [bdd_tab_14] => plage de colonne dans les tableau à remplir
'...


Private Sub Worksheet_Activate()
Récupérerligne
End Sub

Private Sub Worksheet_Deactivate()
ReporterLigne
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
    If Ligne = 0 Then Ligne = Me.[C2].Value - [debut_exercice].Value + decalage_ligne: MsgBox "calcul ligne"
    If Target.Address = "$C$2" Then ReporterLigne: Récupérerligne
        
    If Not Intersect(Target, [bdd_form_1]) Is Nothing Then [bdd_form_1].Copy Destination:=[bdd_tab_1].Rows(Ligne)
    If Not Intersect(Target, [bdd_form_2]) Is Nothing Then [bdd_form_2].Copy Destination:=[bdd_tab_2].Rows(Ligne)
    If Not Intersect(Target, [bdd_form_3]) Is Nothing Then [bdd_form_3].Copy Destination:=[bdd_tab_3].Rows(Ligne)
    If Not Intersect(Target, [bdd_form_4]) Is Nothing Then [bdd_form_4].Copy Destination:=[bdd_tab_4].Rows(Ligne)
    If Not Intersect(Target, [bdd_form_5]) Is Nothing Then [bdd_form_5].Copy Destination:=[bdd_tab_5].Rows(Ligne)
    If Not Intersect(Target, [bdd_form_6]) Is Nothing Then [bdd_form_6].Copy Destination:=[bdd_tab_6].Rows(Ligne)
    If Not Intersect(Target, [bdd_form_7]) Is Nothing Then [bdd_form_7].Copy Destination:=[bdd_tab_7].Rows(Ligne)
    If Not Intersect(Target, [bdd_form_8]) Is Nothing Then [bdd_form_8].Copy Destination:=[bdd_tab_8].Rows(Ligne)
    If Not Intersect(Target, [bdd_form_9]) Is Nothing Then [bdd_form_9].Copy Destination:=[bdd_tab_9].Rows(Ligne)
    If Not Intersect(Target, [bdd_form_10]) Is Nothing Then [bdd_form_10].Copy Destination:=[bdd_tab_10].Rows(Ligne)
    If Not Intersect(Target, [bdd_form_11]) Is Nothing Then [bdd_form_11].Copy Destination:=[bdd_tab_11].Rows(Ligne)
    If Not Intersect(Target, [bdd_form_12]) Is Nothing Then [bdd_form_12].Copy Destination:=[bdd_tab_12].Rows(Ligne)
    If Not Intersect(Target, [bdd_form_13]) Is Nothing Then [bdd_form_13].Copy Destination:=[bdd_tab_13].Rows(Ligne)
    If Not Intersect(Target, [bdd_form_14]) Is Nothing Then [bdd_form_14].Copy Destination:=[bdd_tab_14].Rows(Ligne)

End Sub

Private Sub Récupérerligne()
    Ligne = Me.[C2].Value - [debut_exercice].Value + decalage_ligne
    Application.EnableEvents = False
    'Feuil11.[B:K]].Rows(Ligne).Copy Destination:=Me.[C7:L7]
    [bdd_tab_1].Rows(Ligne).Copy Destination:=[bdd_form_1]
    [bdd_tab_2].Rows(Ligne).Copy Destination:=[bdd_form_2]
    [bdd_tab_3].Rows(Ligne).Copy Destination:=[bdd_form_3]
    [bdd_tab_4].Rows(Ligne).Copy Destination:=[bdd_form_4]
    [bdd_tab_5].Rows(Ligne).Copy Destination:=[bdd_form_5]
    [bdd_tab_6].Rows(Ligne).Copy Destination:=[bdd_form_6]
    [bdd_tab_7].Rows(Ligne).Copy Destination:=[bdd_form_7]
    [bdd_tab_8].Rows(Ligne).Copy Destination:=[bdd_form_8]
    [bdd_tab_9].Rows(Ligne).Copy Destination:=[bdd_form_9]
    [bdd_tab_10].Rows(Ligne).Copy Destination:=[bdd_form_10]
    [bdd_tab_11].Rows(Ligne).Copy Destination:=[bdd_form_11]
    [bdd_tab_12].Rows(Ligne).Copy Destination:=[bdd_form_12]
    [bdd_tab_13].Rows(Ligne).Copy Destination:=[bdd_form_13]
    [bdd_tab_14].Rows(Ligne).Copy Destination:=[bdd_form_14]
    Application.EnableEvents = True
    'MsgBox "recupererligne"
End Sub

Private Sub ReporterLigne()
    'If Ligne <> 0 Then Me.[C7:L7].Copy Destination:=Feuil11.[B:K].Rows(Ligne)
    If Ligne = 0 Then Exit Sub
    [bdd_form_1].Copy Destination:=[bdd_tab_1].Rows(Ligne)
    [bdd_form_2].Copy Destination:=[bdd_tab_2].Rows(Ligne)
    [bdd_form_3].Copy Destination:=[bdd_tab_3].Rows(Ligne)
    [bdd_form_4].Copy Destination:=[bdd_tab_4].Rows(Ligne)
    [bdd_form_5].Copy Destination:=[bdd_tab_5].Rows(Ligne)
    [bdd_form_6].Copy Destination:=[bdd_tab_6].Rows(Ligne)
    [bdd_form_7].Copy Destination:=[bdd_tab_7].Rows(Ligne)
    [bdd_form_8].Copy Destination:=[bdd_tab_8].Rows(Ligne)
    [bdd_form_9].Copy Destination:=[bdd_tab_9].Rows(Ligne)
    [bdd_form_10].Copy Destination:=[bdd_tab_10].Rows(Ligne)
    [bdd_form_11].Copy Destination:=[bdd_tab_11].Rows(Ligne)
    [bdd_form_12].Copy Destination:=[bdd_tab_12].Rows(Ligne)
    [bdd_form_13].Copy Destination:=[bdd_tab_13].Rows(Ligne)
    'MsgBox "reporterligne"
End Sub

Me reste plus qu'a réussir a mettre en place mes boucles ^^
 

Gargol

XLDnaute Nouveau
Re : remplir un tableau sur une autre feuille suivant la date choisi

effectivement je vais supprimer cette partie, mais pourquoi remettre Ligne a 0? autant executer Reporterligne() a la fermeture ou a l'enregistrement et récupérerLigne() a l'ouverture du fichier.

Je continu sur la lancé.

Merci
 

Dranreb

XLDnaute Barbatruc
Re : remplir un tableau sur une autre feuille suivant la date choisi

Ça ne va pas parce que c'est une Private Sub d'un module de feuille. Elle n'est pas connue dans ThisWorkbook. On peut éventuellement la mettre Public mais ç'en serait alors une propriété: il faudrait la qualifier devant du nom du module de feuille.
Non je crois qu'il serait plus simple d'effacer la cellule pour induire la Worksheet_Change. Quitte à la remettre après un EnableEvents à true. À l'ouverture on pourrait faire la même chose juste pour que Ligne soit initialisé.
 

Gargol

XLDnaute Nouveau
Re : remplir un tableau sur une autre feuille suivant la date choisi

je n'arrive pas a trouver comment mettre mes noms dans une boucle.

j'ai lu ailleurs que ce n'etais pas possible... est ce vrai?

en PHP, par exemple, les variables variables fonctionnent sans souci mais qu'en est il du vb?

J'aimerai transformer cela
VB:
    [bdd_tab_1].Rows(Ligne).Copy Destination:=[bdd_form_1]
    [bdd_tab_2].Rows(Ligne).Copy Destination:=[bdd_form_2]
    [bdd_tab_3].Rows(Ligne).Copy Destination:=[bdd_form_3]
    [bdd_tab_4].Rows(Ligne).Copy Destination:=[bdd_form_4]
    [bdd_tab_5].Rows(Ligne).Copy Destination:=[bdd_form_5]
    [bdd_tab_6].Rows(Ligne).Copy Destination:=[bdd_form_6]
    [bdd_tab_7].Rows(Ligne).Copy Destination:=[bdd_form_7]
    [bdd_tab_8].Rows(Ligne).Copy Destination:=[bdd_form_8]
    [bdd_tab_9].Rows(Ligne).Copy Destination:=[bdd_form_9]
    [bdd_tab_10].Rows(Ligne).Copy Destination:=[bdd_form_10]
    [bdd_tab_11].Rows(Ligne).Copy Destination:=[bdd_form_11]
    [bdd_tab_12].Rows(Ligne).Copy Destination:=[bdd_form_12]
    [bdd_tab_13].Rows(Ligne).Copy Destination:=[bdd_form_13]
    [bdd_tab_14].Rows(Ligne).Copy Destination:=[bdd_form_14]

en cela par exemple

VB:
    For num_variable = 1 To 14
        "[bdd_tab_"& num_variable &"]".Rows(Ligne).Copy Destination:="[bdd_form_"& num_variable &"]"
    Next

Qu'en est il?
 

Discussions similaires

Réponses
0
Affichages
233

Statistiques des forums

Discussions
312 207
Messages
2 086 246
Membres
103 163
dernier inscrit
Pelaez