données ecraser après copie dans un tableau

sky45

XLDnaute Nouveau
salut à tous,

j'ai un tableau dont les données sont réguilièrement mise a jour (feuille data) je copie uniquement les cellules avec les montants sont superieur a 100 vers le tableau (feuille rapport)
seulement lorsque je change les données sur la feuille data et que je fais un nouvel enregistrement celui ci efface l'ancien contenu sur la feuille rapport !
je voudrais que les données se mette à la suite sans etre effacées et avec un saut de une ligne apres chaque enregistrement
pouvez vous m'aider s'il vous plait ?

en copie le fichier de ce que j'ai fait merci d'avance
 

Pièces jointes

  • sky_45.xlsm
    33 KB · Affichages: 40

job75

XLDnaute Barbatruc
Re : données ecraser après copie dans un tableau

Bonsoir sky45,

On ne sait pas bien si vous voulez les valeurs > 100 ou > 300 mais peu importe.

Voyez le fichier joint et cette macro dans le code de la feuille :

Code:
Private Sub Worksheet_Activate()
Dim limit#, celdeb As Range, nlig&, ncol%, h&, source, dest(), i&, j%, n&
limit = 100 'à adapter
With Sheets("data") 'nom à adapter
  Set celdeb = .[D4] '1ère cellule, à adapter
  nlig = .Cells(.Rows.Count, celdeb.Column).End(xlUp).Row - celdeb.Row
  ncol = .Cells(celdeb.Row, .Columns.Count).End(xlToLeft).Column - celdeb.Column
End With
h = 2 * Application.CountIf(celdeb(2, 2).Resize(nlig - 1, ncol - 1), ">" & limit)
source = celdeb.Resize(nlig, ncol)
ReDim dest(1 To h, 1 To 3)
For i = 2 To nlig
  For j = 2 To ncol
    If source(i, j) > limit Then
      n = n + 2
      dest(n, 1) = CDate(source(1, j))
      dest(n, 2) = source(i, 1)
      dest(n, 3) = source(i, j)
    End If
  Next
Next
[A2].Resize(h, 3) = dest
Rows(h + 2 & ":" & Rows.Count - 1).ClearContents
End Sub
La macro s'exécute quand on active la feuille "rapport".

Edit : j'ai mis la MFC sur toute la colonne C (sauf C1).

A+
 

Pièces jointes

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

job75

XLDnaute Barbatruc
Re : données ecraser après copie dans un tableau

Re,

Avec la macro précédente le tableau est ordonné suivant les "PTAC".

Si on veut l'ordonner suivant les dates, inverser l'ordre des boucles :

Code:
For j = 2 To ncol
  For i = 2 To nlig
Fichier (2).

A+
 

Pièces jointes

  • sky_45(2).xls
    103 KB · Affichages: 26

job75

XLDnaute Barbatruc
Re : données ecraser après copie dans un tableau

Re,

Noter que s'il n'y a pas de valeur > limit la macro beugue.

Donc il est plus prudent d'ajouter 1 pour définir h :

Code:
h = 2 * Application.CountIf(celdeb(2, 2).Resize(nlig - 1, ncol - 1), ">" & limit) + 1
Bonne nuit et A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : données ecraser après copie dans un tableau

Re,

Encore une chose, si le tableau en feuille "rapport" est organisé en "tableau" (Liste) Excel, il est utile de le redimensionner à la fin :

Code:
On Error Resume Next
Me.ListObjects(1).Resize Range("A1:C" & h)
Fichier (3).

A+
 

Pièces jointes

  • sky_45(3).xls
    103.5 KB · Affichages: 28
Dernière édition:

sky45

XLDnaute Nouveau
Re : données ecraser après copie dans un tableau

Bonjour job75 un grand merci de prendre de ton temps pour m'aider!
tu as raison en ce qui concerne la limite en réalité il y en a 2 montant > 251 et 100<montant<250)
et j'en ai mit que une en me disant que je vais prendre de votre temps alors pas besoin d'en rajouter !
mais sa m a plus déservit qu'autre chose alors cette fois je met le code exact que j'ai fait.
En fait c'est un TCD dont les données sont régulièrement mise a jour et le but de la feuille rapport est d'enregistrer les données après chaque mise à jour sans quel ne soit écraser (les données sont donc ajouter à la suite) lorsque clik sur le bouton rapport de la feuille data.
Et avec ta macro les données sont effacé je me suis mal expliqué la première fois désolé

Voila la feuille et maintenant nouveau probleme sa bugg, sur la feuille rapport plus rien ne se met dans le bon ordre je suis à l'agoinie sur ce ficher!
 

Pièces jointes

  • sky_452[1].xlsm
    86.4 KB · Affichages: 26

job75

XLDnaute Barbatruc
Re : données ecraser après copie dans un tableau

Bonjour sky45,

Le problème que vous avez posé concerne la feuille "rapport" non ??

Cette feuille n'a rien à voir avec le TCD qui se trouve dans la feuille "data".

Et quand vous dites :

Et avec ta macro les données sont effacé je me suis mal expliqué la première fois désolé

c'est complètement faux puisque toutes les données de la feuille "data" sont analysées à chaque activation de "rapport".

Maintenant utiliser les 2 limites 100 et 250 ne pose pas de problème :

Code:
Private Sub Worksheet_Activate()
Dim limit1#, limit2#, celdeb As Range, nlig&, ncol%
Dim h1&, h2&, h&, source, dest(), i&, j%, n&
limit1 = 100 'à adapter
limit2 = 250 'à adapter
With Sheets("data") 'nom à adapter
  Set celdeb = .[D2] '1ère cellule, à adapter
  nlig = .Cells(.Rows.Count, celdeb.Column).End(xlUp).Row - celdeb.Row
  ncol = .Cells(celdeb.Row, .Columns.Count).End(xlToLeft).Column - celdeb.Column
End With
h1 = 2 * Application.CountIf(celdeb(2, 2).Resize(nlig - 1, ncol - 1), ">" & limit1)
h2 = 2 * Application.CountIf(celdeb(2, 2).Resize(nlig - 1, ncol - 1), ">" & limit2)
h = IIf(h1 > h2, h1, h2) + 1
source = celdeb.Resize(nlig, ncol)
ReDim dest(1 To h, 1 To 4)
For j = 2 To ncol
  For i = 2 To nlig
    If source(i, j) > limit1 Or source(i, j) > limit2 Then
      n = n + 2
      dest(n, 1) = CDate(source(1, j))
      dest(n, 2) = source(i, 1)
      If source(i, j) > limit2 Then dest(n, 3) = source(i, j) _
        Else dest(n, 4) = source(i, j)
    End If
  Next
Next
[A2].Resize(h, 4) = dest
Rows(h + 2 & ":" & Rows.Count).ClearContents
On Error Resume Next
Me.ListObjects(1).Resize Range("A1:D" & h + 1)
End Sub
Fichier (4) enregistré en .xlsm cette fois.

A+
 

Pièces jointes

  • sky_45(4).xlsm
    90.4 KB · Affichages: 25

sky45

XLDnaute Nouveau
Re : données ecraser après copie dans un tableau

Bonjour Job75 merci une fois de plus d'avoir repondu aussi vite

votre code fonctionne impec!, la ou on ne se comprend pas c'est au niveau de la feuille rapport
je vous prend un exemple clair pour qu'on se comprenne:

On par des données sur la feuille data :

-A la date du 11/06/2014 NB: on supprime toutes les autres date et données pour ne garder que celle la on des valeurs
valeur>=251 et des valeurs 100<>250
En ouvrant la feuille rapport avec votre code le tableau se rempli automatiquement ! super

- On fait une mise à jour du tableau sur la feuille data à la date du 12/06/2014 NB: Toutes les autres dates sont supprimées
on des valeur>=251 et des valeurs 100<>250
On ouvre la feuille rapport avec votre code les données du 11/06/2014 seront alors ecrasées


En fait il ne faut pas effacer les données précédentes (donc du 11/06/2014) il faut que les mises a jours quotidiennes du
tableau (feuille data) s'ajoute à la suite des précédentes

je ne sais pas si vous m'avez mieux compris ?
 

sky45

XLDnaute Nouveau
Re : données ecraser après copie dans un tableau

ok merci bonne continuation,
On génère un tableau croisé on extrait les données interessante en les sauvegargant dans une autre feuille cette operation est répété quotidiennement avec de nouvelles data
ci c'était juste d'écraser les données je ne me serait pas donné tant de mal j'aurai conservé le TCD... (je ne suis pas mazo)

je ne vois pas ou est ecrit le mot base de donnée dans tout mes post ?? ci j'en voulais une se serait deja fait.
et stupide non en aucun cas..
on ne peut pas faire plus clair ci vous comprenez pas c'est pas nécessaire d'etre désagreable tout le monde a ces limites.. moi le premier

bonne journée
 

Discussions similaires

Statistiques des forums

Discussions
312 379
Messages
2 087 769
Membres
103 662
dernier inscrit
rterterert