Transfert tableau feuil1 à feuil2 (sans cellules vides) Le sujet est résolu

Forum pour toutes vos questions à propos de LibreOffice/OpenOffice Calc ...
Clem3411
Jeune membre
Jeune membre
Messages : 19
Inscrit le : 24 mai 2018
Version d'Excel : 2016

Message par Clem3411 » 24 mai 2018, 14:34

Bonjour à tous,

(N'ayant pas vu de sujet ressemblant à la problématique que je m'apprête à poser)

Mon problème : J'ai un tableau en feuille 1 ("Janvier") et j'aimerais, à l'aide d'une MACRO, que les données se situant en ("D9:X26") ET celles se situant en ("D42:X47") se positionnent automatiquement sur le tableau de la feuille 2 ("Février") en ("D9:X26") sans que les cellules vides ne soient reproduites (pour que seulement les lignes remplies ne accommodent dans le nouveau tableau)...

Voilà, j'ai fait ça mais cela ne fonctionne pas ... (les lignes se reproduisent mais avec des espaces entre les tableaux collés...) help plz !!!
Sub MACROFEVRIER01()
'
' MACROFEVRIER01 Macro
'

'
Sheets("Janvier").Select
Range("D9:X26").Select
Selection.Copy
Sheets("Février").Select
Range("D9:X26").Select
ActiveSheet.Paste


Sheets("Janvier").Select
Range("D42:X47").Select
Selection.Copy
Sheets("Février").Select
Range("D21:X26").Select
ActiveSheet.Paste


End Sub
Matrice de suivi - Tableau CTD.xlsm
(130.12 Kio) Téléchargé 13 fois
Avatar du membre
Ausecour
Membre dévoué
Membre dévoué
Messages : 907
Appréciations reçues : 79
Inscrit le : 31 mai 2018
Version d'Excel : 2010 FR, 2013 FR

Message par Ausecour » 31 mai 2018, 12:36

Bonjour,

Je ne vais pas donner de code mais au moins des pistes à explorer pour ce que tu souhaites faire.

En clair ton code se contente de copier et de coller les donnés, c'est donc normal que ça te prenne aussi les lignes vides.

Ce que je te conseille de faire c'est de créer un tableau en VBA, puis de faire une boucle pour passer sur chacune de tes lignes (un for par exemple ça devrait faire l'affaire).

Dans ton for, tu vas mettre un If, qui va contrôler que ta cellule n'est pas vide, et si la condition est validée, tu enregistres la ligne dans ton tableau.

Une fois ta boucle terminée, tu vas sur ton autre feuille et tu ressors le contenu de ton tableau.

Je te laisse essayer, ça, bonne chance :mrgreen: :btres:
Clem3411
Jeune membre
Jeune membre
Messages : 19
Inscrit le : 24 mai 2018
Version d'Excel : 2016

Message par Clem3411 » 7 juin 2018, 11:27

Bonjour Ausecour, malheureusement mon problème n'est toujours pas à ce jour résolu.
Un similaire existait déjà dans le répertoire des sujets mais la solution donnée utilisait la fonction "SI", alors que là précisément ce que j'aimerais c'est qu'on utilise la macro sur cette matrice déjà existante (sans avoir à refaire entièrement un nouveau tableau) pour résoudre ce problème...
Avatar du membre
Ausecour
Membre dévoué
Membre dévoué
Messages : 907
Appréciations reçues : 79
Inscrit le : 31 mai 2018
Version d'Excel : 2010 FR, 2013 FR

Message par Ausecour » 7 juin 2018, 11:42

Bonjour,

Voici ce que je propose :

Le debut de ton programme reste le même, mais le second copier coller change un peu, je vais regarder dans ce que tu as copié, jusqu'où la colonne D est remplie, en partant vers le bas à partir de la cellule D9, et je garde cette information à ma façon.

Une fois que c'est fait je colle simplement en dessous de cette dernière ligne et hop! c'est fait ;;)

Bon c'est du bricolaje par contre, c'est nettement améliorable mais bon, si ça te convient :)
Fichiers joints
Copie de Matrice de suivi - Tableau CTD.xlsm
(135.08 Kio) Téléchargé 21 fois
Je comprends vite mais il faut m'expliquer longtemps, parfois ça vaut le coup :oops:
Qui sait, je vous apprendrai peut-être quelque chose 8-)

Je réponds aux messages privés, mais à éviter, c'est mieux si tout le monde peut accéder à la question et à la réponse ;;)
Clem3411
Jeune membre
Jeune membre
Messages : 19
Inscrit le : 24 mai 2018
Version d'Excel : 2016

Message par Clem3411 » 11 juin 2018, 17:32

Bonsoir Ausecour,

Ta solution fonctionnes parfaitement ... je te remercie infiniment pour le temps que tu as pu consacré à ce sujet !
Je vais un peu creuser ta proposition de MACRO quand même (qui a priori fonctionne super bien) et demain si je n'y vois aucune chose supplémentaire à demander sur ce topic, je fermerai mon poste. Encore merci :roll: ::D
Clem3411
Jeune membre
Jeune membre
Messages : 19
Inscrit le : 24 mai 2018
Version d'Excel : 2016

Message par Clem3411 » 12 juin 2018, 12:05

Voilà
Clem3411 a écrit :
11 juin 2018, 17:32
Bonsoir Ausecour,

Ta solution fonctionnes parfaitement ... je te remercie infiniment pour le temps que tu as pu consacrer à ce sujet !
Je vais un peu creuser ta proposition de MACRO quand même (qui a priori fonctionne super bien) et demain si je n'y vois aucune chose supplémentaire à demander sur ce topic, je fermerai mon poste. Encore merci :roll: ::D
Voilà, en fait il n'y a plus qu'un petit problème, c'est que la 2nde sélection à recopier (D42:D47) se copie/colle automatiquement à la suite de la 1ère sélection (même si les 5 lignes sont vides) ce qui a pour conséquences l'allongement du tableau de la Feuil 2 (où on colle les données récupérées) car pas assez d'espace... J'ai vu que tu avais rajouté dans la MACRO à savoir :

If Range("D10") = "" Then
Cellule_depart = Cells(10, 4).Address
Else
Cellule_depart = Cells(Range("D9").End(xlDown).Row + 1, 4).Address
End If

Mais je n'arrive pas à faire en sorte que les données de la 2nde sélection (D42:D47) ne se copient/collent pas si cellules vides... Aurais tu une solution à me proposer pour en conclure avec ce problème ?
Avatar du membre
Ausecour
Membre dévoué
Membre dévoué
Messages : 907
Appréciations reçues : 79
Inscrit le : 31 mai 2018
Version d'Excel : 2010 FR, 2013 FR

Message par Ausecour » 12 juin 2018, 12:19

Bonjour,

Il faut modifier un peu le code pour prendre ce cas en compte :

Code : Tout sélectionner

Sub MACROFEVRIER01()
'
' MACROFEVRIER01 Macro
'

'
    Sheets("Janvier").Select
    Range("D9:X26").Select
    Selection.Copy
    Sheets("Février").Select
    Range("D9:X26").Select
    ActiveSheet.Paste
       
If Range("D10") = "" Then
Cellule_depart = Cells(10, 4).Address
Else
Cellule_depart = Cells(Range("D9").End(xlDown).Row + 1, 4).Address
End If

    Sheets("Janvier").Select
    If Range("D42") = "" Then 'Bien mettre ce code après avoir sélectionné la feuille Janvier, sinon le programme regarde la cellule D42 de la feuille Février
        Exit Sub
    End If
    Range("D42:X47").Select
    Selection.Copy
    Sheets("Février").Select
    Range(Cellule_depart).Select
    ActiveSheet.Paste
    
End Sub
1 membre du forum aime ce message.
Je comprends vite mais il faut m'expliquer longtemps, parfois ça vaut le coup :oops:
Qui sait, je vous apprendrai peut-être quelque chose 8-)

Je réponds aux messages privés, mais à éviter, c'est mieux si tout le monde peut accéder à la question et à la réponse ;;)
Clem3411
Jeune membre
Jeune membre
Messages : 19
Inscrit le : 24 mai 2018
Version d'Excel : 2016

Message par Clem3411 » 13 juin 2018, 12:04

ça marche parfaitement. Merci beaucoup pour ton aide !

Problème résolu.
Avatar du membre
Ausecour
Membre dévoué
Membre dévoué
Messages : 907
Appréciations reçues : 79
Inscrit le : 31 mai 2018
Version d'Excel : 2010 FR, 2013 FR

Message par Ausecour » 13 juin 2018, 12:06

De rien!

Si tu as d'autres questions à l'avenir, n'hésite pas à repasser par le forum ;;)
Je comprends vite mais il faut m'expliquer longtemps, parfois ça vaut le coup :oops:
Qui sait, je vous apprendrai peut-être quelque chose 8-)

Je réponds aux messages privés, mais à éviter, c'est mieux si tout le monde peut accéder à la question et à la réponse ;;)
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message