Utilisation Array pour transfert Tableau et entête vers feuille BD

cathodique

XLDnaute Barbatruc
Bonjour,

Quand les lignes sont conséquentes, le transfert par boucles (ligne par ligne) prend beaucoup de temps.

Je ne sais pas utilisé les tableaux VBA, d'autant plus que les données de l’entête doivent se mettre sur chaque ligne des données du tableau (sur la feuille BD).

Sur la feuille de saisie, les données de l'entête se trouvent en B1,B2,B3,F1,L1,L2,L3 et L4 et la plage du tableau de A7 à L&dernièreLigne.

Sur la feuille BD, de A à H sont les données de l'entête et de I à S les données du tableau (la 1ère colonne "N°" n'est pas transférées).

Pourriez-vous m'aider à effectuer ce transfert en utilisant les tableaux VBA? Je bloque surtout pour l'entête, comment le mettre dans un tableau? Utiliser autant de tableaux que que cellules? Je se sais pas.

Je vous remercie par avance.

Cordialement,
 

Pièces jointes

  • Tb.xls
    121 KB · Affichages: 56
  • Tb.xls
    121 KB · Affichages: 56
  • Tb.xls
    121 KB · Affichages: 55

Dranreb

XLDnaute Barbatruc
Re : Utilisation Array pour transfert Tableau et entête vers feuille BD

Bonsoir.
Je ne comprend pas du tout votre problème.
Vous avez pourtant déjà bien des opérations sur des tableaux dans votre Module1
On pourrait juste reprocher l'absence de Option Explicit en tête du module et des liaisons systématiquement tardives à cause de l'emploi du type Object au lieu des types d'objets spécifiques, mais ça ne devrait pas ralentir considérablement.
À +
 

cathodique

XLDnaute Barbatruc
Re : Utilisation Array pour transfert Tableau et entête vers feuille BD

Bonjour Drandeb,

Etant débutant, mes codes ne sont pas très conformes aux règles de l'art.

La feuille de saisie sert comme son nom l'indique à la saisie journalière de températures. Je voudrais donc archiver

cette feuille sur la feuille BD, et la fin de l'archivage la feuille "saisie" se vide pour la saisie du jour suivant.

Je bloque pour l'archivage de l’entête de la feuille de saisie. Je dois créer une feuille pour la consultation des

données, mais je n'en suis pas là. Je pensais que mon fichier était clair, je précise que je n'avais mis que quelques

lignes, en réalité il arrive que je saisisse plus de mille lignes. Merci quand même.

Cordialement,
 

Efgé

XLDnaute Barbatruc
Re : Utilisation Array pour transfert Tableau et entête vers feuille BD

Bonjour cathodique, Bonjour Dranreb ,
Avec ce que j'ai compris (classement des données pour correspondre à la mise en forme de la feuille BD) :

VB:
Sub Test_Archivage()
Dim i&, J&, Plg As Range
Dim T_EnTete As Variant, T_Data As Variant, T_Report As Variant

With Sheets("Saisie")
    Set Plg = .Range(.Cells(8, 1), .Cells(.Rows.Count, 2).End(3).Offset(, 10))
    T_EnTete = .Range("A1:L4")
End With

T_Data = Plg
ReDim T_Report(1 To UBound(T_Data, 1), 1 To 19)

For i = LBound(T_Data, 1) To UBound(T_Data, 1)
    T_Report(i, 1) = T_EnTete(1, 6)
    T_Report(i, 2) = T_EnTete(1, 2)
    T_Report(i, 3) = T_EnTete(2, 2)
    T_Report(i, 4) = T_EnTete(3, 2)
    For J = 5 To 15
        T_Report(i, J) = T_Data(i, J - 3)
    Next J
    For J = J To 19
        T_Report(i, J) = T_EnTete(J - 15, 12)
    Next J
Next i

Sheets("BD").Cells(Rows.Count, 1).End(3)(2).Resize(UBound(T_Report, 1), UBound(T_Report, 2)) = T_Report
Plg.ClearContents

End Sub

Cordialement

EDIT Un oubli de . Set Plg = [size=+2].[/size]Range ....
 

Pièces jointes

  • Tb(1).xls
    128 KB · Affichages: 34
Dernière édition:

cathodique

XLDnaute Barbatruc
Re : Utilisation Array pour transfert Tableau et entête vers feuille BD

Bonjour Efgé,

Je m'excuse pour ma réponse tardive, j'ai beaucoup de travail ces jours-ci. Je te remercie pour ton code mais il ne manque le transfert des cellules "C1"(Région),"C2"(Commune) et "C3"(Site). Je voudrais transférer les données qui sont en jaunes sur la feuille "saisie" vers la feuille "bd" (voir fichier joint); en rouge sont les entêtes de colonnes de la feuille "BD".

Je te remercie beaucoup pour ton aide. Bonne journée.

nb: j'ai ajouté le point avant range (.Range) du set plg

Cordialement,
 

Pièces jointes

  • Tb(1)(1).xls
    128 KB · Affichages: 38

Efgé

XLDnaute Barbatruc
Re : Utilisation Array pour transfert Tableau et entête vers feuille BD

Bonjour cathodique,
Je ne comprends pas bien...
La base que tu propose n'est que partiellemant remplie.
En la vidant et en cliquant sur le bouton de ton deuxième fichier exemple, toutes les données sont transférées.
Les villes, communes et site également (d'ailleurs ces données sont en colonne B et pas C )
Tu as mis en jaune la colonne repère alors que tu avais précisé que ces données étaient les seules à ne pas devoir être tranférées.
J'ai du rater quelque chose :D
A te re lire
Cordialement
 

Efgé

XLDnaute Barbatruc
Re : Utilisation Array pour transfert Tableau et entête vers feuille BD

Re
Après consultation des rûnes magiques par la grande pretresse du vilage, une idée est apparue.
tu voudrais que les données Ville, commune, etc... soient supprimées également.
Cordialement
 

Pièces jointes

  • Tb(2).xls
    48.5 KB · Affichages: 54

cathodique

XLDnaute Barbatruc
Re : Utilisation Array pour transfert Tableau et entête vers feuille BD

Bonjour Efgé,

Avant tout, je te remercie beaucoup pour ton aide. Toutes mes excuses, sur mon dernier fichier joint, je me suis en effet trompé en mettent en jaune la première colonne (j'ai répondu hâtivement, juste avant d'aller au boulot).
Je te dis bravo pour ton dernier code, c'est ce que je voulais exactement.
1000 mercis.

Cordialement,
 

cathodique

XLDnaute Barbatruc
Re : Utilisation Array pour transfert Tableau et entête vers feuille BD

Rebonjour Efgé,

Code:
With Sheets("Saisie")
    Set PLg_EnTete = .Range("B1:B3,F1,L1:L4")
    Set Plg = Range(.Cells(8, 1), .Cells(.Rows.Count, 2).End(3).Offset(, 10))     ' cette ligne
    T_EnTete = .Range("A1:L4")
End With

Sur cette partie du code, je suppose que je dois mettre le point(.) avant Range. Pourrais-tu s'il te plait m'expliquer "cette ligne" de code, j'ai compris le (.cells(8,1)) , le Rows.Count mais pas le 2 et le End(3).

Je te remercie beaucoup. je dois y aller. Bonne journée!

Cordialement,
 

Efgé

XLDnaute Barbatruc
Re : Utilisation Array pour transfert Tableau et entête vers feuille BD

Bonjour Cathodique, le fil, le forum

Gros bosseur, un 1er Mai devoir partir à 6h45... Chapeau :)

Il faut effectivement ajouter un . devant Range (c'est une manie chez moi d'oublier les . )
On déclare un range:
Code:
.Range(.Cells(8,1),.Cells(Rows.count,2).End(3).Offset(,10))
Le range commence en .Cells(8,1) 8em ligne 1er colonne soit $A$8
Pour la dernière cellule du range (le coin inférieur droit)
Code:
.Cells(Rows.count,2).End(3).Offset(,10)
Comme dans ton premier exemple il y avait des données en colonne A sous le tableau, j'ai pris la colonne B (2)
Pour trouver la dernière cellule remplie en colonne B on utilise:
Code:
.Cells(Rows.count,2).End(Xlup)
En partant de la cellule $B$65536 (mais comme sous 2007 il y a plus de lignes, on utilise Rows.count qui renvoi le nombre de ligne maximum de la version d'excel utilisée). et en remontant vers le haut (Xlup) .On peux remplacer (Xlup) par (3)

Comme notre dernière cellule ce trouve en colonne K on décale la cellule trouvée de 10 colonnes (colonne B + 10 colonne = Colonne K) et pas de lignes
Code:
.Offset(,10)
On a notre plage remplie:
Code:
.Range(.Cells(8,1),.Cells(Rows.count,2).End(3).Offset(,10))

N'hésites pas si tu as d'autres questions.

Cordialement
 

cathodique

XLDnaute Barbatruc
Re : Utilisation Array pour transfert Tableau et entête vers feuille BD

Bonjour Efgé,

Je te remercie infiniment pour toute l'aide que tu m'as apporté et tes explications très claires.
Quand on est dans le besoin, on bosse dés qu'une occasion se présente. Et les exploiteurs profite de l’aubaine. Nous subissons la loi de la nature. Dans le règne animal, il y a les prédateurs et les proies (pour la survie) et dans le nôtre, le plus impitoyable, les exploiteurs et exploités (par cupidité). Mais bon ainsi va la vie.

Merci beaucoup, je te souhaite une très bonne journée!

Cordialement,
 

cathodique

XLDnaute Barbatruc
Re : Utilisation Array pour transfert Tableau et entête vers feuille BD

Rebonjour, même aujourd'hui je travaille

en prenant mon petit-dejeuner, j'ai relu ton pour le comprendre un peu plus. mais je n'ai pas bien compris cette partie (lignes avec astérisque):
Code:
ReDim T_Report(1 To UBound(T_Data, 1), 1 To 19) *****

For i = LBound(T_Data, 1) To UBound(T_Data, 1)   *****
    T_Report(i, 1) = T_EnTete(1, 6)
    T_Report(i, 2) = T_EnTete(1, 2)
    T_Report(i, 3) = T_EnTete(2, 2)
    T_Report(i, 4) = T_EnTete(3, 2)
    For J = 5 To 15
        T_Report(i, J) = T_Data(i, J - 3)  *****
    Next J
    For J = J To 19
        T_Report(i, J) = T_EnTete(J - 15, 12)  *****
    Next J
Next i

j'ai compris qu'on faisait des boucles et c'est tout. Je te remercie par avance pour éclairer ma petite lanterne.

Cordialement,
 

Efgé

XLDnaute Barbatruc
Re : Utilisation Array pour transfert Tableau et entête vers feuille BD

Bonjour Cathodique,
Je t'ai (abondemment) commenté le code.
Je pense que tu as assez de lecture pour plusieurs petits-déjeuners :D

Cordialement
 

Pièces jointes

  • Tb_Commentaires.xls
    54.5 KB · Affichages: 51

Discussions similaires

Réponses
25
Affichages
665

Statistiques des forums

Discussions
312 248
Messages
2 086 595
Membres
103 250
dernier inscrit
keks974