Couper-Coller lignes vers un autre tableau

Bonjour à tous,

Je suis nouveau sur le forum. Je suis novice en programmation VBA, j'ai réussi à pondre quelques bouts de code en utilisant l'enregistreur de macro et en copiant quelques morceaux trouvés sur ce fourm et d'autres. Aujourd'hui je bloque sur certaines macros afin d'optimiser la gestion de mes informations à traiter.

Je souhaite utiliser trois tableaux, deux tableaux sur la feuille "Orders" et un tableau sur la feuille "Terminé".

Sur le premier tableau "Pre Order", j'enregistre les informations, une ligne = un projet.

J'utilise deux macros, qui fonctionne pas trop mal

  • Macro 1 : "Nouvprojet" - ajoute une ligne en bas de mon tableau "Pre Order" en conservant la mise en forme.
  • Macro 2 : "SupprProjet" - Permet de supprimer la ligne selon où le curseur se situe.

J'aimerai créer une troisième macro qui permettrai de créer le lien entre ce premier tableau et le second tableau nommé "Order".

- Macro 3 : "PreOrder_Order" : Si la cellule en colonne O If Not IsEmpty alors on coupe la ligne correspondante pour l'insérer dans le tableau "Order".

Il faut que les zones de sélections de chaque tableaux puissent s’agrandir et s'adapter selon les nouvelles entrées, et c'est là que je pêche dans la programmation.

Sur le second tableau donc, "Order", de nouvelles informations vont s'ajouter au fur à mesure du projet.

La macro suivante devra assurer le lien entre ce tableau "Order" et le tableau sur la feuille "Terminé". Beaucoup de problème similaires ont déjà été réalisé, j'ai pu d'ailleurs bricoler le début de ce code, mais il ne fonctionne pas à merveille.

- Macro 4 : "Terminé" : Si la cellule en colonne S If Not IsEmpty alors on coupe la ligne correspondante, comme pour la précédente macro, pour l'insérer sur la feuille "Terminé". A chaque ajout il serait pratique que l'ensemble des lignes présentent sur la feuille "Terminé" soient trier selon la colonne B.

- Option : Jusque là, les seules macros que j'utilise s'exécutent grâce à un bouton, est-il possible que cette macro s'exécute automatiquement dés que la condition est remplie ? Pour ce point j'ai pas compris ce que j'ai pu trouver sur internet.

Le fichier en question est joint à ce post.

J'espère que ma demande est suffisamment claire,

Merci d'avance pour votre aide !

Salut AxelGrel,

voici un premier jet de ton fichier, un peu à l'arrache!

Je n'ai plus vraiment le temps de tester à fond mais tu peux (normalement!) :

  • entrer une date dans PRE ORDER et tout l'affichage se règle tout seul ;
  • entrer un OUI dans ORDER pour le même résultat.

Ce soir, je ferai en sorte que tu n'aies plus besoin d'aucun bouton!

A+

Bonjour Curulis57,

Déjà je te remercie beaucoup pour ton aide.

Je n'ai pas encore regardé la manière dont tu t'es organisé avec les macros, et comment tu les as écrites.

J'ai seulement fait quelques tests. Et ça me semble super intéressant !

- Quand j'entre une date dans la colonne O du tableau PreOrder, ça se régle tout seul, c'est génial ça ! C'est ce que je voulais !

Il y a juste la fenêtre "Erreur d'exécution 1004" qui s'affiche, "La méthode ' intersect de l'objet '_Application' a échoué". A part ça la macro fonctionne correctement.

Je découvre aussi que la macro est donc écrite dans la feuille correspondante et non pas dans un module.

Une question : as-tu fait exprès de placer les bouton "Nouveau Projet" et "Supprimer Projet" dans l'entête du titre ? Y-aT-il une raison spécifique ?

- Quand j'utilise la macro "Nouveau Projet", la macro copie la mise en forme de ligne 17, et j'aimerai qu'elle copie la ligne 18, c'est possible ? Ou c'est juste chiant pour pas grand chose ?

Pour la dernière macro "Projet Terminé", si je veux automatisé la macro, je copie juste le code de la macro dans "Microsoft Objects" de la feuille terminé c'est bien cela?

Par contre le code que j'avais écrit, fonctionne mais il ne transfère pas toutes les lignes d'un coup sur l'autre feuille je ne sais pas pourquoi. Et si clique trop sur le bouton il supprime également la ligne 22, la ligne avec tous les titres.

De plus, si je pouvais intégré une fonction tri par ordre croissant sur la colonne cela me permettrai de ne quasiment plus touché la feuille "Terminé".

Je joins à nouveau le fichier,

A part de la mise en forme je n'ai rien modifié !

Merci encore pour ton aide.

A bientôt !

Salut Axelgrel,

je regarde tout ça ce soir...

Les boutons sont dégagés dans la barre-titre car, pour moi, ils occupent un espace plus utile à autre chose.

Je vois que tu n'aimes pas les lignes de données vides : je m'arrangerai autrement...

Puisque tu n'aimes pas les lignes vides, il faudra garder le bouton NOUVEAU PROJET, les autres actions étant déclenchées par la validation de la date (PRE ORDER) ou du "Oui" dans ORDER.

Même la suppression d'un projet peut se passer de bouton!

J'aurai le temps cette nuit de faire le tri dans TERMINE.

En fait, c'est bête comme chou mais j'ai beaucoup perdu la main après quelques mois de pause...

A+

Bonjour AxelGrel,

J'ai finalement supprimé tous les boutons devenus inutiles!

  • en colonne O en PRE ORDER, rentrer une date envoie le projet en ORDER avec effacement ;
  • en colonne S en ORDER, rentrer un Oui envoie le projet terminé en TERMINE où il est trié aussitôt ;
  • cliquer sur la première cellule vide en colonne A en PRE ORDER crée une nouvelle ligne pour compléter un nouveau projet ;
  • cliquer sur une cellule remplie en colonne A en PRE ORDER te permet de supprimer le projet concerné après confirmation.

Tu parles! En chipotant avec le fichier, mes derniers changements ont foutu le b...

Ce sera pour ce soir! Et m...

A+

Bonjour Curulius57,

Tu m'as mis l'eau à la bouche. J'ai hâte de migrer mes informations sur cette nouvelle version.

J'espère que tu n'as pas perdu tout le fruit de ton travail.

Merci encore pour ton aide et de ton implication !

A+

Salut Alex,

je pense que, cette fois-ci, c'est bon! 8)

J'ai finalement supprimé tous les boutons devenus inutiles!

  • en colonne O en PRE ORDER, rentrer une date envoie le projet en ORDER avec effacement ;
  • en colonne S en ORDER, rentrer un Oui envoie le projet terminé en TERMINE où il est trié aussitôt.
L'affichage se dirige alors sur la feuille TERMINE pour consultation.

Cliquer n'importe où dans cette feuille ramène directement dans ORDER ;

- cliquer sur la première cellule vide en colonne A en PRE ORDER crée une nouvelle ligne pour compléter un nouveau projet.

J'ai un peu verrouillé l'affaire : si tu cliques par inadvertance sur une cellule non-autorisée, la nouvelle ligne-projet ne se créera pas!

- cliquer sur une cellule-projet remplie, uniquement en colonne A, en PRE ORDER te permet de supprimer le projet concerné après confirmation.

Petit inconvénient de cette façon de faire : si tu te trompes dans l'encodage de la cellule A d'un nouveau projet, tu ne pourras alors plus la corriger qu'en neutralisant la feuille (mode création, menu développeur)!

Tout ça repose sur les calculs des coordonnées des différents tableaux (première et dernière lignes de données) d'où provenait d'ailleurs mon problème d'hier, des lignes parasites s'étant malicieusement insérées dans la partie supérieure de ta feuille, faussant les-dits calculs.

Maintenant, tout est sous contrôle si tu respectes deux choses :

  • j'ai placé deux repères (invisibles) en colonne A de tes lignes-titres (TAB1, TAB2) : les enlever ou les déplacer ne serait pas une bonne idée!
  • je postule que tes lignes-titres ne comporteront jamais que les deux lignes qui les composent actuellement : en ajouter ou supprimer serait aussi une mauvaise idée!

Ce mode de calcul te permettrait, par contre, d'ajouter des informations d'encodage dans la partie supérieure de ta feuille, au-dessus des tableaux de données (où tu devras faire des réparations de formules, d'ailleurs), le calcul des coordonnées étant insensible à ces ajouts ou suppressions.

Tu testes ça grandeur nature ?

Bon travail!

A+

50etude-sbi.xlsm (72.38 Ko)

Salut Curulius 57,

Tu as fait un énorme travail !

J'ai analysé ton code ça me semble pro et propre, en tout cas tu as fait ça de manière précise et ordonnée. Bravo et merci !

Je serai clairement incapable d'écrire la même chose, ou même de tenter de modifier quoique ce soit mais on comprend bien ta démarche (tes commentaires sont parfaits !).

Je prends note des conditions de sécurité, je ne toucherai pas aux lignes titres !

En revanche est ce que je peux modifier la mise en forme, contour, couleur... de ces lignes titres ? Ajouter une nouvelle colonne ? Modifier la validation des données des colonnes ayant une liste déroulante ?

(Je me suis rendu compte un peu tardivement de l'utilité d'une nouvelle colonne, je pourrais m'en servir plus tard..)

Alors j'ai commencé le teste grandeur nature ! Trop bien !

C'est beau à voir faire, touche Entrée et hop c'est parti.

Je me permets de te soumettre quelques remarques ou quelques questions après mes petits tests de la matinée.

Tout fonctionnait bien et puis à un moment donné j'ai eu l'impression que quelque chose avait sauté, les fonctions ne répondent plus.

- La fonction ajout, je suis pas sûr de l'avoir correctement exécutée. Selon ton code la fonction doit tout descendre d'une ligne avec copie de la mise en forme en cliquant en A, j'ai beau cliquer un peu partout cela n'a pas fonctionné.

- La ligne en cours sur le tableau "Pre Order" ne se déplace pas en tableau "Order" lorsque la case en colonne O est remplie. Ça a fonctionné 3-4 fois d'affilée et puis là plus rien.

- La non visualisation de la feuille "Terminé" est gênante pour moi. De temps à autre je vais avoir besoin de trier le tableau selon d'autres colonnes. Le tri que tu as programmé, selon la colonne B, est celui que j'utilise le plus souvent donc très pratique quand c'est automatique.

- Le module 1 : Bordure, est le module auquel tu fait appel quand tu veux copier la mise en forme c'est bien cela ? Si je veux modifier la mise en forme, la modification passe par ce module ?

- Pour la nouvelle colonne en "X", est ce que cela est correct ?

Range("A" & iRow2 + 1 & ":O" & iRow2 + 1).Value = Range("A" & iTRow & ":O" & iTRow).Value

Range("T" & iRow2 + 1 & ":V" & iRow2 + 1).Value = Range("P" & iTRow & ":R" & iTRow).Value

Range("X" & iRow2 + 1).Value = Range("X" & iTRow).Value

(j'ose pas toucher ton code j'ai peur de tout casser)

Curulius, Je te remercie vraiment encore pour ton travail.

Voici le fichier renommé V1.4.

Avec mes petites modifications de mise en forme + colonne + validation de données.

(A priori la feuille ne devrai plus bouger).

16etude-sbi-v1-4.xlsm (68.01 Ko)

Bonjour Axel,

voici la nouvelle version.

J'ai aussi de temps en temps des couacs, parfois même sans message d'erreur, qui bloque l'exécution des macros. Dans ces cas-là, je coupe Excel et recommence.

J'ai modifié le code en TERMINE : le retour vers ORDER ne s'effectuera que sur un clic en ligne A, te laissant la possibilité de travailler sur la feuille.

Tout compte fait, cela serait très possible de te laisser la possibilité d'ajouter autant de lignes-titres que tu le désires : il faudrait juste que je sache si tu envisages cette éventualité pour que je t'explique ce qu'il faudrait faire dans ce cas!

Pas compliqué pour l'utilisateur et sans toucher au code!

Ose mettre les mains dans le cambouis : c'est ainsi qu'on apprend! Fais juste une copie de chipotage, histoire de ne pas mettre tes données réelles en péril!

Autre chose ?

A+

15etude-sbi-v1-4.xlsm (73.45 Ko)

Re-,

voilà déjà une autre améliorée! 8)

  • J'avais laissé un MsgBox embêtant quelque part! Supprimé!
  • J'ai adapté le code pour te laisser la possibilité de modifier le nombre de lignes dans tes bandeaux-titres. Tout ce que tu as à faire dans ces cas-là est de renseigner le nombre de lignes de ton nouveau bandeau-titre dans la case Bxxx, à côté du marqueur TABx.
  • Dans TERMINE, il te suffit de cliquer sur une des cellules-options de la ligne inférieure de ton bandeau-titre pour exécuter le tri sur cette base.

Autre chose ?

Bon travail!

A+

36etude-sbi-v1-4.xlsm (75.17 Ko)

Re Curulius,

Merci pour ton retour rapide !

Je viens de comprendre quelque chose !!

Quand j'ai d'autres classeurs ouvert en même temps que celui que tu viens de me bichonner ^^, la programmation ne répond pas.

Lorsque que je n'ai que le classeur concerné d'ouvert, tout fonctionne.

Est-ce normal ?

Pour le bandeau-titre (A16:X17) et (A21:X22), je n'envisage pas d'ajouter de nouvelles lignes.

Peut être une nouvelle colonne mais c'est pas prévu.

Comment peux-t-on voir les marqueur TABx ?

Et troisième remarque, après celle-ci j'espère ne plus t'embêter... je n'arrive pas à créer une nouvelle ligne en cliquant en A.

Peux-tu juste m'éclaircir sur cette manipulation, et sur celle de la suppression également?

Si c'est trop compliqué à gérer, tu ne m'en voudra pas si je repasse avec la solution des deux boutons ?

A moins que cela soit incompatible avec ton nouveau système ?

Salut Axel,

je ne sais pas quoi te répondre pour les dysfonctionnements que tu relates!

Quand ça m..., ici, c'est souvent dû à une erreur de programmation (ben, oui ) qui plante Excel.

J'ai utilisé la dernière version dans tous les sens avant de te l'envoyer : pas de soucis, y compris la création ou la suppression d'une ligne PRE ORDER.

Je vais t'installer 2 boutons , scrogneugneu, au cas où... mais je ne comprends pas!

Je vais peut-être mettre ce projet en discussion sur le forum pour que d'autres l'essayent et me disent si ça foire chez eux!

Je te reviens avec les 2 boutons!

A+

Bonjour Axel,

une version avec un petit bouton mignon qui devrait prendre le relais du traitement automatique.

Bouton gris = inactif

Bouton vert = créer un projet

Bouton rouge = supprimer un projet

J'espère que cette fois-ci, tu seras tranquille!

A+

Bonjour Curulius,

Sympa le système de couleur.

Si j'ai bien compris la manipulation, il faut aller en A, monter avec la flèche pour supprimer un projet ou descendre pour ajouter un projet.

Quand je te disais "Bouton", je m'attendais à un vieux bouton tout moche comme ceux que j'avais fait auparavant...en bas de mon tableau "Pre order".

J'aime bien ton système mais il y a peut être pas besoin que ce soit si complexe.

Après plusieurs tests, le système fait apparaitre une erreur d'exécution "424". Quand je descend pour ajouter un projet (bouton vert) la fenêtre d'erreur s'affiche. La ligne s'ajoute tout de même, mais je dois quitter Excel et relancer.

En faisant cette manipulation j'ai remarqué aussi que la mise en forme n'était pas collé. Avant je copié la ligne sans les valeurs...

Pour la suppression aussi, je n'arrive pas à viser la ligne que je veux delete.

Désolé de t'embêter pour un nouveau problème,

Merci encore pour ton travail Curulius.

Salut Axel,

j'avais le même problème sur cet ordinateur : la procédure Bordures foutait le b...

J'ai cherché dans le forum et trouvé un code de MFerrand qui a réglé l'affaire!

Merci, MFerrand! Salut à toi!

Bon, reprenons!

Dans PRE ORDER, quand tu commences (pas de projet), la première ligne sous N° SBI a déjà ses bordures, prête pour un encodage : suffit de se positionner en A.

Pour créer un nouveau projet, il faut cliquer en A (et seulement en A!) sous le dernier N° SBI encodé et la ligne se crée avec ses bordures et A sélectionnée, prête à l'encodage.

Pour supprimer un projet, il suffit de cliquer en A (et seulement en A!) et la demande de confirmation s'affiche.

Si, pour une raison que j'ignore, le code de création ou suppression automatique est zappé, le bouton s'allume (vert ou rouge) pour te permettre l'action potentielle.

Pour éviter des créations ou suppressions de lignes-projet intempestives, si tu veux, je peux rendre obligatoire le passage par le bouton, ce qui éviterait l'affichage hideux de la boîte de dialogue! Ce serait joli, ça!

Je ferai ça ce soir!

Tu me dis ce que tu en penses, en espérant que les problèmes soient réglés une fois pour toutes!

A+

Re Curulis, (et non pas curulius...)

C'est parfait pour moi, j'ai même commencé la migration de toutes mes informations sur ce nouveau classeur.

Deux petites chose qui m'embête un peu :

- Quand je rempli "Oui" en colonne "S" dans le tableau "Order" j'aimerai éviter que ça me change d'onglet automatiquement, si c'est possible, ça me stresse .

- C'est un tout petit détail, mais j'aime bien quand c'est précis, sur la feuille "Terminé", je voudrai juste changer mon titre "Order" pour "Terminé" ou "Projets Terminé" histoire de faire la différence avec les tableaux précédents.

Quand on clique dessus, hop on est redirigé direct vers la feuille "Orders".

Pourtant j'essaye de comprendre ton code, de le modifier un peu en faisant deux/trois tests.

Pour le reste c'est juste génial !

Merci beaucoup !

Bonsoir Axel,

voici ton fichier avec les changements que tu souhaitais.

  • pas de passage automatique vers TERMINE. En cliquant sur le titre ORDERS, tu y atterris quand même!
  • titre changé en TERMINE.

Au passage, les marqueurs TAB1 et TAB2 sont en colonne A sur les lignes-titre PRE ORDERS et ORDERS.

En B sont renseignés le nombre de lignes qui composent les bandeaux-titre ( chiffre à changer manuellement si tu chipotes aux-dits bandeaux).

Tu suis?

Avec plaisir!

Bon travail, sans anicroches désormais, j'espère!

A+

Bonjour Curulis,

Désolé de te donner des nouvelles que maintenant.

J'étais trop impatient d'effectuer la migration de mes informations sur ce nouveau classeur.

Tout fonctionne parfaitement, le transfert d'un tableau à un autre puis d'un tableau à une feuille c'est déjà une super amélioration pour mon besoin.

Tes derniers changements également.

J'ai découvert aussi, avec plaisir, ton tri automatique !! En cliquant seulement sur la colonne le tri s'effectue !

C'est un comme de la magie... ! Bref, je me suis amusé comme un gosse à trier ma feuille Excel !

Je te remercie énormément pour ton aide et ton travail sur ce nouveau fichier !!

A bientôt sur le forum.

Bonjour Curulis,

Je suis fan de ta fonction de tri automatique en cliquant sur la colonne !

J'aimerai le programmer moi-même pour mes deux tableaux "PreOrder" et "Order".

- Déjà, penses-tu que c'est réalisable ? Sachant que ces deux tableaux ont deux plages de sélection différentes, et que chacune de ces sélections doivent s’agrandir ou se réduire selon la manipulations des informations.

C'est peut être un peu compliqué non ?!?!

- Ensuite, après avoir décortiquer ton travail, tu as écrit cela en feuille "Terminé" :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'

Select Case Target.Row

Case 1

Worksheets("Orders").Activate

Case 2

iRow = Range("A" & Rows.Count).End(xlUp).Row

If iRow >= 4 And Target.Value <> "" Then

sFlag = Chr$(64 + Target.Column) & Cells(1, 2) + 1

Range("A" & Cells(1, 2) + 1 & ":X" & iRow).Sort Key1:=Range(sFlag), Order1:=xlAscending

End If

End Select

'

End Sub

Est-ce la bonne partie à travailler, et à réutiliser en feuille "Orders"?

Comme je te l'expliquais je suis novice en programmation.

Si tu pouvais m'expliquer la démarche que tu as eu pour réaliser cette fonction cela me permettrait d'essayer !

Merci par avance si tu en as le temps !

Salut Axel,

bonne idée d'essayer par toi-même! C'est ainsi que ça rentre : par les doigts!

Au passage, corrige ceci dans TERMINE.

        iRow = Range("A" & Rows.Count).End(xlUp).Row
        If iRow >= Cells(1, 2) + 2 Then
            sFlag = Chr$(64 + Target.Column) & Cells(1, 2) + 1
            Range("A" & Cells(1, 2) + 1 & ":X" & iRow).Sort Key1:=Range(sFlag), Order1:=xlAscending
        End If

Crée d'abord une copie de travail de ton fichier, histoire de mettre sans risque les mains dans le cambouis.

C'est effectivement la bonne partie à travailler! Bien vu!

  • WorkSheets_SelectionChange(), dans ORDERS ;
  • intercepter la ligne du clic et déterminer si elle fait partie du TAB1 ou TAB2.
Donc, iTopRow1 étant la première ligne théorique de TAB1, iTopRow2 de TAB2, il faut, pour être valable, que le clic intervienne en iTopRow1 - 1 ou iTopRow2 - 1. Logique ?
  • iRow1 et iRow2 étant la dernière ligne NON VIDE de TAB1 ou TAB2, vérifié avant de trier que iRow1 > iTopRow1 ou iRow2 > iTopRow2. On ne va quand même pas trier UNE ligne!
  • construction de l'adresse de la cellule de référence du tri
sFlag = Chr$(64 + Target.Column) & ...... n° de la première ligne du tableau (je te laisse trouver cette variable que tu dois avoir reconnu si tu as bien suivi) 8)

Pourquoi Chr$(64.......) ? A porte le n° ASCII 65 ---> 64 + n° de colonne = la bonne lettre

- Range("A" & variable première ligne(hé, hé) & ":X" & variable dernière ligne (hé, hé) ).Sort Key1:=Range(sFlag), Order1:=xlAscending

Tu me racontes ?

Déjà, félicitations!

A+

Rechercher des sujets similaires à "couper coller lignes tableau"