Déplacer des lignes avec conditions sur une feuille

Bonjour à tous,

Je suis nouveau sur le forum donc je m'excuse par avance si l'énoncé n'est pas complet selon vous.

Je vous expose mon problème:

Mon tableau excel est un suivi de chantier: chaque chantier est étendu sur une ligne. Je rentre la date de début et de fin de chantier (dans des colonnes respectives), et obtiens dans une autre colonne la durée du chantier (en semaines). J'aimerais, dès lors que le chantier dure 2 semaines ou moins, toute la ligne (assez grande) du chantier correspondant soit déplacée dans une seconde feuille "petits chantiers". Il faut de toute évidence que toutes mes formules et mes règles de mise en page soient conservées...

L'idéal étant qu'à chaque fois que l'on rentre les dates d'un nouveau chantier, celui-ci se déplace automatiquement s'il répond à mon critère (<2 semaines), sans laisser de lignes vides entre les chantiers.

Rmq: Une ligne de chantier correspond réellement à 3 lignes fusionnées (utiles pour autre chose), ce qui peut poser un problème lorsque le tout se déplace sur la 2eme feuille.

J’espère que vous arriverez à visualiser le problème... je suis vraiment bloqué la-dessus et cela me serait d'une grande utilité.

Mon ficher étant trop lourd, je partage seulement une capture d'écran du tableau:

planning chantier

Bonjour,

Avant de monter une usine à gaz avec des macros compliquées dans tous les sens, ne serait-il pas plus simple d'indiquer par une croix dans une colonne les "petits chantiers" ? Puis faire un filtre sur cette colonne qui indique les chantiers avec ou sans cette croix ?

Bonjour,

Avant de monter une usine à gaz avec des macros compliquées dans tous les sens, ne serait-il pas plus simple d'indiquer par une croix dans une colonne les "petits chantiers" ? Puis faire un filtre sur cette colonne qui indique les chantiers avec ou sans cette croix ?

bonjour

oxydum tu es la voie et la voix de la sagesse

note : il faut éviter les fusions car à elles seules elles complexifient tout. Dans le cas présent, si on veut vraiment les conserver, alors il faut que tout le reste du classeur reste trèèèèèèèèèèèèèèès simple, comme suggéré par notre oxydum désoxydable

amitiés à tous

Bonjour,

Avant de monter une usine à gaz avec des macros compliquées dans tous les sens, ne serait-il pas plus simple d'indiquer par une croix dans une colonne les "petits chantiers" ? Puis faire un filtre sur cette colonne qui indique les chantiers avec ou sans cette croix ?

bonjour

oxydum tu es la voie et la voix de la sagesse

note : il faut éviter les fusions car à elles seules elles complexifient tout. Dans le cas présent, si on veut vraiment les conserver, alors il faut que tout le reste du classeur reste trèèèèèèèèèèèèèèès simple, comme suggéré par notre oxydum désoxydable

amitiés à tous

Bonjour, merci pour vos réponses à tous les deux.

J'ai déjà envisagé la solution du filtre, qui parait la plus simple à mettre en place. Malheureusement, au lieu de déplacer les chantiers non voulus (petits chantiers) dans une autre feuille, le filtre supprime les chantiers voulus, sans conserver la mise en forme des cellules fusionnées.

De plus, je pense devoir conserver les cellules fusionnées car je ne trouve pas d'autre moyen de centrer un texte sur 3 lignes (malgré que ce soit possible sur plusieurs colonnes...)

Bonjour,

Au lieu de faire trois lignes par chantier, je propose ci-joint d'en faire une seule.

De plus, la proposition montre un filtre sur "PETIT" et permettrait aussi de filtrer par couleur... j'ignore si cela a un intérêt

(edit)

4chantier.xlsx (16.98 Ko)

Bonjour,

Au lieu de faire trois lignes par chantier, je propose ci-joint d'en faire une seule.

De plus, la proposition montre un filtre sur "PETIT" et permettrait aussi de filtrer par couleur... j'ignore si cela a un intérêt

(edit)

Merci pour l'attention porté à ce sujet !

Cependant, ta proposition ne convient pas vraiment... Je dois vraiment conserver mes trois lignes par chantier (question de lisibilité, et c'est imposé)

Je peux partager mon tableau pour pouvoir visualiser la chose, ET le programme que j'ai essayé de mettre en place.

Sur ce coup, la ligne doit être déplacé si la colonne "conducteur" répond à ma demande, mais le principe reste exactement le même !

Le programme s'effectue en appuyant sur un bouton que j'ai créé, vous pouvez apporter toutes les modifications que vous voulez.

Un certain nombre de commentaire sont placés pour expliquer la situation. Le problème, c'est que mon programme ne s'effectue pas sur toute la ligne, seulement sur une partie.

Si vous avez le temps d'y jeter un oeil... Merci !!

6planning.xlsm (119.11 Ko)

Je te présente ton fichier, si tu veux bien observer la case rouge et cliquer sur le bouton "petit chantier"

12planningchantier.xlsm (142.50 Ko)

Je te présente ton fichier, si tu veux bien observer la case rouge et cliquer sur le bouton "petit chantier"

Merci beaucoup, c'est exactement ce que je recherche pour les petits chantiers.

Quelques questions, d'abord technique pour comprendre la macro:

1:

Sub PCh(laquelle As Integer) ' Copier Coller vers PetitsChantiers
' copie
    Sheets("PlanningChantiers").Select
    Rows(CStr(laquelle) & ":" & CStr(laquelle + 2)).Select
    Selection.Cut

A quoi correspond le "laquelle" utilisé dès le début ? Je n'avais pas vu de As Integer entre parenthèse jusqu'à présent

2:

While Range("T" & CStr(Deb) + I).Cells.Value <> ""
  If Range("O" & CStr(Deb + I)).Cells.Value - Range("K" & CStr(Deb + I)).Cells.Value < 3 Then PCh (Deb + I)

J'ai mis un peu de temps à comprendre la fonctionnalité de "CStr", mais ici, je ne vois pas pourquoi on rajoute +I à CStr(Deb) ?

Enfin, j'ai remarqué qu'il y avait une macro "Supp" pour supprimer les lignes 3 à 5. Cette action n'est pas automatique avec le code ci-dessous? C'est peut-être seulement pour indiquer les premières lignes du tableau, une sorte d'initialisation pour ne pas effacer les en-têtes. J'éspère ne pas trop bloquer une nouvelle fois... Les macros ne sont pas encore ma tasse de thé

Sheets("PlanningChantiers").Select
    Rows(CStr(laquelle) & ":" & CStr(laquelle + 2)).Select
    Selection.Delete Shift:=xlUp

Ceci dit, cela marche comme je le souhaite et je te remercie pleinement. Je vais essayer de reproduire ceci pour de nouveaux critères dépendants du nom du conducteur. Cette fois, je n'aurais pas à couper coller une ligne, seulement à la copier sur une autre feuille sans l'effacer.

J'ai réalisé ces macros un peu vite, c'est clair que je ne prends jamais assez de temps pour la pédagogie.

La procédure PCh est un enregistrement de macros, puis modifié pour prendre un paramètre : laquelle qui est le numéro de ligne de la cellule de la feuille en cours d'utilisation. Comme c'est un numéro c'est un entier : c'est mieux en général de "typer" ses variables, surtout quand elles sont déclarés au niveau des arguments d'une fonction ou d'une procédure. Sans déclaration de type, toute variable est de type "variant" c'est à dire un pointeur vers une zone mémoire, ce qui prend un maximum d'espace, contrairement à toute autre déclaration.

CStr est une fonction prédéfinie qui permet de convertir une variable en String. En général une cellule est nommée, par exemple "A3" et ce nom est une chaîne, A comme 3 fait partie de cette chaine.

Range("O" & CStr(Deb + I)).Cells.Value

pourrait être simplifié en

Range("O" & CStr(Deb + I))

je crois, mais j'utilise la syntaxe complète depuis des décennies pour accéder aux diverses propriétés de ces objets.

Pour le reste, tu as vu certainement juste, on procède parfois par tâtonnement pour obtenir le bon résultat. Par exemple, on peut ajouter des espions sur les variables, le clic-droit est ton ami... On place en un clic un point rouge devant la ligne où l'on souhaite stopper l'exécution afin de contrôler les contenus de nos variables, c'est la phase de débogage. On peut aussi ajouter des instructions comme Debug.print laquelle ' la variable...

J'espère que ces explications te seront utiles, le plus important c'est de progresser autant de ses bonnes pratiques que de ses erreurs

J'ai réalisé ces macros un peu vite, c'est clair que je ne prends jamais assez de temps pour la pédagogie.

La procédure PCh est un enregistrement de macros, puis modifié pour prendre un paramètre : laquelle qui est le numéro de ligne de la cellule de la feuille en cours d'utilisation. Comme c'est un numéro c'est un entier : c'est mieux en général de "typer" ses variables, surtout quand elles sont déclarés au niveau des arguments d'une fonction ou d'une procédure. Sans déclaration de type, toute variable est de type "variant" c'est à dire un pointeur vers une zone mémoire, ce qui prend un maximum d'espace, contrairement à toute autre déclaration.

CStr est une fonction prédéfinie qui permet de convertir une variable en String. En général une cellule est nommée, par exemple "A3" et ce nom est une chaîne, A comme 3 fait partie de cette chaine.

Range("O" & CStr(Deb + I)).Cells.Value

pourrait être simplifié en

Range("O" & CStr(Deb + I))

je crois, mais j'utilise la syntaxe complète depuis des décennies pour accéder aux diverses propriétés de ces objets.

Pour le reste, tu as vu certainement juste, on procède parfois par tâtonnement pour obtenir le bon résultat. Par exemple, on peut ajouter des espions sur les variables, le clic-droit est ton ami... On place en un clic un point rouge devant la ligne où l'on souhaite stopper l'exécution afin de contrôler les contenus de nos variables, c'est la phase de débogage. On peut aussi ajouter des instructions comme Debug.print laquelle ' la variable...

J'espère que ces explications te seront utiles, le plus important c'est de progresser autant de ses bonnes pratiques que de ses erreurs

Merci, c'est beaucoup plus clair comme cela ! Je suis complètement d'accord

Malgré tout (et oui, encore...), j'aimerais aller plus loin. J'explique:

Lorsque que j'effectue cette macro, les mfc de la colonne V à NX ne sont pas en fonction des bonnes cellules, j'aimerais quelles soient systématiquement en fonction des cellules correspondant à la même ligne, et non pas aux lignes de la feuille de copie (voir planning 1)

9planning1.xlsm (127.06 Ko)

J'ai donc modifié le programme pour que ne soient copiées que les lignes A à U (je pensais que la mfc des colonnes suivantes seraient alors conservée), mais finalement non car mes lignes copiées remplacent complètement les lignes de la feuille PetitsChantiers

Je pense donc qu'il faut modifier le programme de manière à ce que les n premières lignes de la feuille PetitsChantiers soient supprimées avant que les n lignes correspondant à des chantiers < 3sem soient copiées... Sans profonde certitude mais je vais essayer ! Voici un exemple du Planning Voulu

16resultat-voulu.xlsm (132.77 Ko)
Rechercher des sujets similaires à "deplacer lignes conditions feuille"