rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

VBA recopier tableau sans lignes vides

jefe.k, le mardi 13 février 2007 à 14:14:59
Bonjour,

voila mon problème :

j'ai un tableau excel contenant des palges de cellules vides sur une feuille, ces plages étant soumises à une formule conditionelles suivant les entrées d'une feuille précédente.
Ce que j'aimerais obtenir, a laide d'une macro, c'est de recopier les plages remplies sur une autre feuille sans qu'il n'y ai de ligne vides intercalées. (feuille récapitulative).

autre donnée importante c'est que selon l'entrée les plages vides peuvent se remplir.

la macro devrai pouvoir, a chaque fois qu'elle est activée, inserer les les plages vides au bon endroit.

voila un petit schéma de ce que j'aimerais obtenir :

feuille 1
1 ___________
2- - - - - - - - - -
3 ___________
4___________
5 -- - - - - - - -
6 ___________

clic sur macro =>

feuille récapitulative

1 ___________
3__________
3 ___________
4___________
6 ___________

et si plus tard la feuille 1 change, l'activation de la macro devrait faire que :

1 ___________
2___________
3__________
4___________
5 -- - - - - - - -
6 ___________

clic sur macro =>

1 ___________
2___________
3__________
4___________

6 ___________

donc je tiens a remercier d'avance quiconque pourrait m'aider a obtenir ce résultat.
Merci,
Configuration: Windows XP
Firefox 2.0.0.1
Répondre à jefe.k  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ruzakruzak, le mardi 13 février 2007 à 16:43:33
On dirait que tu veux juste faire un tri ! dans ce cas, trie suivant le critère que tu veux avant de te préoccuper du calcul, t'auras déjà un bout de fait...
Répondre à ruzakruzak

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jefe.k, le mardi 13 février 2007 à 16:55:24
la tableau que je veut recopier se rempli ou pas selon des conditions de remplissage de plusieurs autres feuilles; en fait ce que je veut faire c'est un récapitulatif sans les plages vides de ce tableau qui evolue souvent....pour avoir un "résumé"
Répondre à jefe.k

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
JvDo, le mardi 13 février 2007 à 19:27:41
Bonsoir,

en formule matricielle dans ta feuille RECAP :
A1=SI(ESTERREUR(INDEX(Feuil1!$A$1:$A$10000;PETITE.VALEUR(SI­(Feuil1!$A$1:$A$10000<>"";LIGNE(Feuil1!$A$1:$A$10000));LIGNE())));"";INDEX(Feuil1!$A$1:$A$10000;PETITE.VALEUR(SI(Feuil1!$A$1:$A$10000<>"";LIGNE(Feuil1!$A$1:$A$10000));LIGNE())))
à recopier vers le bas aussi loin que nécessaire.

cordialement
Répondre à JvDo

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jefe.k, le mercredi 14 février 2007 à 09:23:20
Merci pour l'aide, mais la formule ne recopie que la première ligne du tableau, quand je la fait glisser vers le bas les plages remplis ne sont pas recopiées...

si quelqu'un aurait une solution pour mon problème soit par formule excel soit sous forme de macro ca serait bien sympatique de m'éclairer...
^^,

cordialement
jefe.k
Répondre à jefe.k

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
JvDo, le mercredi 14 février 2007 à 11:23:19
Bonjour,

cette formule fonctionne très bien et pas seulement sur la première ligne.

as-tu intégré que c'est une formule matricielle?

A+
Répondre à JvDo

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jefe.k, le mercredi 14 février 2007 à 11:44:06
bonjour,

non je n'ai pas intégré cet état de fait j'ai recopier la formule dans la première cellule de m'a feuille récap puis j'ai fait glisser ma formule...

que change le fait qu'il s'agisse d'une formulle matricielle ?
que dois je faire pour que cela marche ?

merci,

@+ ^^
Répondre à jefe.k

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jefe.k, le mercredi 14 février 2007 à 12:00:26
Re,

en fait j'ai trouvé pour intégrer le fait qu'il s'agisse d'une formule matricielle...

maintenant cela marche effectivement, mais les cellules vides affiche la valeur O comment faire pour les cacher ?
et cette formulle peut elles s'étendre sur plusieurs colonnes ?
Répondre à jefe.k

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
JvDo, le mercredi 14 février 2007 à 12:47:33
Bonjour,

curieux ces zéros. pas de zéros chez moi!!!
d'autant plus que j'ai surchargé la formule afin qu'elle affiche "" si plus de données.

pour afficher la colonne B (si en A il y a une donnée ):
=SI(ESTERREUR(INDEX(Feuil1!$A$1:$A$10000;PETITE.VALEUR(SI(Feuil1!$A$1:$A$10000<>"";LIGNE(Feuil1!$A$1:$A$10000));LIGNE())));"";INDEX(Feuil1!$B$1:$B$10000;PETITE.VALEUR(SI(Feuil1!$A$1:$A$10000<>"";LIGNE(Feuil1!$A$1:$A$10000));LIGNE())))
si les zéros ne partent pas, envoie le fichier (sur cjoint.com par exemple)

A+

PS : attention au fait que les formules matricielles sont lourdes et coûteuse en temps de calcul.
si tu as beaucoup de cellules dans ta feuille, il faudra sans doute envisager d'autres solutions
Répondre à JvDo

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jefe.k, le mercredi 14 février 2007 à 14:48:43
ce qu'il y a c'est que j'aimerais pouvoir effectuer cette action sur un nombre important de lignes et de colonnes.

peut on rentrer une plage de ligne et de colonnes a la place des

$a$1:$a$100000

cela est il possible ?

merci,
Répondre à jefe.k

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
JvDo, le mercredi 14 février 2007 à 17:06:52
Re,

tu sélectionnes A1:Q1 par exemple et tu saisis

=SI(ESTERREUR(INDEX('Phase 1'!$A$1:$A$10000;PETITE.VALEUR(SI('Phase 1'!$A$1:$A$10000<>"";LIGNE('Phase 1'!$A$1:$A$10000));LIGNE())));"";INDEX('Phase 1'!$A$1:$Q$10000;PETITE.VALEUR(SI('Phase 1'!$A$1:$A$10000<>"";LIGNE('Phase 1'!$A$1:$A$10000));LIGNE());COLONNE())&"")

en matriciel (on pourrait dire double matricielle puisque à la fois le calcul et la restitution sont en matriciel)
j'ai mis en gras ce que j'ai modifié

A+
Répondre à JvDo

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jefe.k, le jeudi 15 février 2007 à 08:44:34
bonjour,

cette formule a l'air de marcher mais est vraiment trait lourde en temps vu la plage de donnée que je veux recopier,

de plus serait il possible de n'entamer cette recopie qu'a partir de la ligne 6, par exemple ?

une programmation en visual basic ne serai elle pas plus adaptée à ce que je voudrai faire ?

cordialement,
Répondre à jefe.k

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
JvDo, le jeudi 15 février 2007 à 09:10:42
Bonjour,

la formule marche-t-elle ou a-t-elle l'air de marcher?

combien de lignes/colonnes veux-tu traiter?

quels temps de réponse as-tu? (en secondes par ex)

il est possible de commencer à la ligne 6 en changeant les $A$1 à l'intérieur des PETITE.VALEUR( ) par $A$6

il est possible(probable) que du code VBA soit plus performant, il faudrait essayer.

d'après ton 1er post, tu n'as pas besoin de mettre à jour la feuille archive en temps réel.
Dans ce cas, tu passes en mode recalcul manuel et tu ne lances une mise à jour de la feuille archive qu'avec un recalcul (via la touche F9)
tu limites ainsi la lourdeur des formules matricielles aux recalculs que tu lances.

A+
Répondre à JvDo

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jefe.k, le jeudi 15 février 2007 à 09:29:23
bonjour,

je veux traiter genre une centaines de lignes et de colonnes,

rien que pour 6 colonnes et 90 lignes le temps de réponses est de l'ordre de 3/4 min.

je pense qu'avec un code vba ce que je veux faire demandrai moin de calcul ce qu'il y a c'est que j'ai très peu de notion visual basic et que je ne sais pas comment me diriger....

@+
Répondre à jefe.k

14


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
JvDo, le jeudi 15 février 2007 à 13:23:33
Bonjour,

bizarre, chez moi ça prend 1 seconde, ce qui est quand même gênant et modérément acceptable.

pour ce qui est de VBA, essaye ce code :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Row > 5 And Target.Row < 106 Then
    j = 1
    For i = 6 To 105
        If Range("A" & i).Value <> "" Then
            Range("A" & i & ":CV" & i).Copy Destination:=Worksheets("archive").Range("a" & j)
            j = j + 1
        End If
    Next
    Application.CutCopyMode = False
End If
End Sub
c'est une macro évènementielle à mettre donc derrière la "feuil1" (celle de la saisie).
pour accéder à VBA directement derrière la "feuil1", fais un "clic droit/visualiser le code" sur l'onglet de la "feuil1".
ensuite, tu colles le code ci-dessus

je l'ai limité aux lignes 6 à 105 et aux colonnes Aà CV pour correspondre à tes 100 lignes x 100 colonnes

A+
Répondre à JvDo

15


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jefe.k, le jeudi 15 février 2007 à 14:53:00
j'ai essayé mais ma feuille récap reste vide...

quand j'ai rentré la selection à copier :

Range("A" & i & ":CV" & i).Copy

visual basic me renvoi un message d'erreur, j'ai donc remplacé la formule par celle ci :

Range("A" & i & ,"CV" & i).Copy

ai je bien fait ? ou est ce la cause de ma page blanche,

merci pour toute cette aide, c'est fort sympatique

A+
Répondre à jefe.k

16


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
JvDo, le jeudi 15 février 2007 à 15:17:45
Re,

il faut laisser le ":" dans le range.

ta feuille "récap", je l'ai appelée "archive" dans la macro. modifie le nom

il serait bon de rajouter la ligne :

Worksheets("archive").Rows("" & j & ":" & Worksheets("archive").Range("A65536").End(xlUp).Row & "").ClearContents

juste après le NEXT pour gérer l'effacement des lignes devenues inutiles dans archive/récap

A+

PS : as-tu fais un copier/coller du code ? ou l'as-tu recopié?
la largeur de l'écran introduit des retours à la ligne qui n'ont pas lieu d'être et qu'un copier/coller remet dans l'ordre
Répondre à JvDo

17


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jefe.k, le jeudi 15 février 2007 à 15:54:18
j'avais retaper la source et j'avai bien changé le nom..

je vais essayé voir si cela marche, merci

a+
Répondre à jefe.k

18


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jefe.k, le jeudi 15 février 2007 à 16:38:59
tjs aucun effet sur ma deuxième feuille...
et tjs l'erreur au niveau du range "a" ":cv"

message d'erreur : problème sur le sépartaeur de liste...


c bien sur ma première feuille que je dois taper la source ?
Répondre à jefe.k

19


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
JvDo, le jeudi 15 février 2007 à 16:48:28
fais un copier/coller du code que tu as saisis en réponse.

sinon on va tourner en rond.

j'espère seulement que tu n'as pas retapé le texte mais que tu as bien fait un copier/coller du code du message (je ne sais plus trop lequel d'ailleurs) mais je te le remet ci dessous :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Row > 5 And Target.Row < 106 Then
    j = 1
    For i = 6 To 105
        If Range("A" & i).Value <> "" Then
            Range("A" & i & ":CV" & i).Copy Destination:=Worksheets("archive").Range("a" & j)
            j = j + 1
        End If
    Next
    Worksheets("archive").Rows("" & j & ":" & Worksheets("archive").Range("A65536").End(xlUp).Row & "").ClearContents
    Application.CutCopyMode = False
End If
End Sub
A+
Répondre à JvDo

20


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jefe.k, le vendredi 16 février 2007 à 08:58:13
quand je fait un copier coller de ce code sur ma première feuille
il ne se passe rien sur ma feuille archive...

il suffit pourtant de le coller avec l'action visualiser le code ? et de le coller tout simplement dans la fenêtre qui s'ouvre. non ?

a+
Répondre à jefe.k

21


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
JvDo, le vendredi 16 février 2007 à 09:28:23
bonjour,

oui, c'est ce qu'il faut faire.

envoie ton fichier sur cjoint.com que je regarde.

ça doit être un truc tout bête.

A+
Répondre à JvDo

22


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 jefe.k, le vendredi 16 février 2007 à 16:24:13
merci pour tout,

j'ai trouvé de l'aide sur un autre forum et le résultat qui en est sortit marche bien aussi...

pour plus d'information http://www.developpez.net/forums/showthread.php?t=280312

merci encore pour toute cette réflexion et cette attention apportée à mon problème.
a bientot
Répondre à jefe.k
Logiciels pertinents trouvés dans les téléchargements
Télécharger PSP Video 9 2.25PSP Video 9 - PSP Video 9 est un outil de conversion gratuit permettant de convertir des fichiers vidéo (avi, divx, mpeg, etc.) au formats...Catégorie: Edition vidéo
Licence: Freeware/gratuit
Télécharger MTV Video Converter 1.11.4MTV Video Converter - Le programme MTV Video Converter est un convertisseur vidéo vers le format MTV acceptant les formats d'entrée suivants : ...Catégorie: Conversion
Licence: Freeware/gratuit
Télécharger WinAVI Video Capture 2.0.0.1WinAVI Video Capture - WinAVI Video Capture peut capturer vos films en provenance de périphériques AV comme un magnétoscope, un camescope ou une...Catégorie: Edition vidéo
Licence: Freeware/gratuit
Télécharger PS3 Video 9 1.94PS3 Video 9 - PS3 Video 9 est un outil de conversion gratuit permettant de convertir des fichiers vidéo (avi, divx, mpeg, etc.) au formats...Catégorie: Edition vidéo
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « VBA recopier tableau sans lignes vides »