Microsoft 365 Insérer des lignes dans un tableau en décalant celles du dessous

Léraud Florian

XLDnaute Junior
Bonjour Bonjour =)

J'aimerai savoir s'il est possible de copier des cellules d'un tableau pour ensuite les coller en dessous mais en décalant les lignes situées au dessous.

J'aimerai copier les cellules comprises entre F11 et F15 et les coller juste en dessous avec une ligne d'écart et en gardant les lignes inférieures. J'arrive à les copier et coller avec le code ci-dessous mais il écrase les informations du dessous :/

VB:
Sub copie_decal()

Dim i As Integer
Dim A As String

Dim plage As Range, nb_copie As Long
A = MsgBox("Voulez-vous saisir un nouveau chantier ?", vbYesNo + vbQuestion)
If A = vbYes Then
nb_copie = 1
Set plage = Range("F11:F16")
For i = 1 To nb_copie
    plage.Copy plage.Offset(plage.Rows.Count * i, 0)
    Cells(plage.Rows.Count * (i + 1) + i, 1).Value = Cells(plage.Rows.Count, 1)
Next i
End If
End Sub

PS : je sais que mes lignes de codes pourraient en faire vomir certains car très lourdes ^^

Mon fichier en PJ

Merci d'avance =)
 

Pièces jointes

  • Planning avancé.xlsm
    494.6 KB · Affichages: 15
Solution
Hello @Phil69970

je me permet de reprendre ta macro telle quelle pour l'intégrer dans le fichier ci joint
@Léraud Florian
j'ai aussi mis le code de ta fonction "copie décal" pour insérer les lignes dans ton tableau
comme il s'agit d'un tableau struturé, j'en ai profité pour corriger le code de l'évènement change de la feuille 2022 pour que Vacances soit toujours mis à la dernière ligne

Léraud Florian

XLDnaute Junior
Bonjour Phil69970,

Ton programme est incroyable (enfin pour moi qui suis débutant ^^)

C'est mon PC et moi-même qui vous remercions pour cette optimisation 😁

Cells(11, Semaine + 6) = "- " & B ' + 6 car il y a 6 colonnes avant les colonnes des semaines
Cells(12, Semaine + 6) = BE ' + 6 car il y a 6 colonnes avant les colonnes des semaines
Cells(13, Semaine + 6) = Fab ' + 6 car il y a 6 colonnes avant les colonnes des semaines
Cells(14, Semaine + 6) = Fini ' + 6 car il y a 6 colonnes avant les colonnes des semaines
Cells(15, Semaine + 6) = Pose ' + 6 car il y a 6 colonnes avant les colonnes des semaines
AutoColumnLength Cells(11, Semaine + 6) ' + 6 car il y a 6 colonnes avant les colonnes des semaines

Si j'ai compris, on fait +6 parce que je commence la colonne Semaine à la colonne F ?

Merci encore pour ce travail de qualité 😉
 

Léraud Florian

XLDnaute Junior
Pour les précisions à propos de ma question :

Je voudrai quelque chose comme le montre l'image ci-dessous :

1657013732210.png

Lorsqu'un chantier est déjà crée (ex : chantier "- p" de la semaine 1) mais que ce n'est pas le seul de la semaine, un msgbox apparait (si on clique sur la macro correspondante que je n'est pas encore crée) nous demandant si on veut rajouter un chantier
- Si oui, alors les cellules comprises entre F11et F15 sont dupliquées en bas (mais en décalant les cellules en dessous afin de ne pas les écraser)
-Si non, alors rien ne se passe

J'espère que ces petites précisions sont plus claires ^^

Merci à vous =)
 

Léraud Florian

XLDnaute Junior
VB:
Sub ResetChantier()
Dim Semaine$
With Sheets("2022")
    Semaine = InputBox("Quelle semaine voulez-vous supprimer ?", vbOKCancel)
                  
    Cells(11, Semaine + 6).ClearContents    ' + 6 car il y a 6 colonnes avant les colonnes des semaines
    Cells(12, Semaine + 6).ClearContents    ' + 6 car il y a 6 colonnes avant les colonnes des semaines
    Cells(13, Semaine + 6).ClearContents    ' + 6 car il y a 6 colonnes avant les colonnes des semaines
    Cells(14, Semaine + 6).ClearContents    ' + 6 car il y a 6 colonnes avant les colonnes des semaines
    Cells(15, Semaine + 6).ClearContents    ' + 6 car il y a 6 colonnes avant les colonnes des semaines

End With

End Sub

C'est fou le gain de temps gagné 😙

Merci d'optimiser mon programme, c'est très gentil à vous et surtout très appréciable 😁

Colonne 6 = Colonne F
Colonne 7 = Début des semaines
Regarde la pièce jointe 1144430

Si tu es à la semaine 1 par exemple tu es donc à la colonne 6 (F) + 1 (N° de la semaine choisi) donc colonne 7 ==> G

Est ce que je t'ai perdu ? 🤣

Comment je peux me perdre avec autant de pédagogie ? 😋
Votre explication est très claire et vos lignes de codes vont m'être très utiles pour m'en inspirer par la suite 😉

Merci à vous
 

Phil69970

XLDnaute Barbatruc
Le fil

Il te restes à optimiser tes 12 modules identiques de 1000 lignes en un seul module d'une cinquantaine de lignes !!!!! 🤣
Idem pour tes MFC 🤣
Et les mises à jour de ton fichier vont devenir 100 fois plus rapide :oops:qu'avant et ton fichier va perdre 30 % de son volume voir plus surtout après nettoyage des MFC :oops:

1657014728909.png


@Phil69970
 

Léraud Florian

XLDnaute Junior
je me permet de reprendre ta macro telle quelle pour l'intégrer dans le fichier ci joint
@Léraud Florian
j'ai aussi mis le code de ta fonction "copie décal" pour insérer les lignes dans ton tableau
comme il s'agit d'un tableau struturé, j'en ai profité pour corriger le code de l'évènement change de la feuille 2022 pour que Vacances soit toujours mis à la dernière ligne

Super @vgendron, c'est exactement ce que je voulais 😄

En plus avec ton amélioration, c'est nettement plus agréable =)

Merci pour ton investissement 😉
 

Léraud Florian

XLDnaute Junior
Le fil

Il te restes à optimiser tes 12 modules identiques en un seul module d'une cinquantaine de lignes !!!!! 🤣
Idem pour tes MFC 🤣
Et les mises à jour de ton fichier vont devenir 100 fois plus rapide :oops:qu'avant et ton fichier va perdre 30 % de son volume voir plus surtout après nettoyage des MFC :oops:

Regarde la pièce jointe 1144433

@Phil69970

Alors je m'y met tout de suite ^^ avec la structure de vos codes je vais pouvoir optimiser tout cela =)

Merci beaucoup 😁
 

Léraud Florian

XLDnaute Junior
j'ai aussi mis le code de ta fonction "copie décal" pour insérer les lignes dans ton tableau
comme il s'agit d'un tableau struturé, j'en ai profité pour corriger le code de l'évènement change de la feuille 2022 pour que Vacances soit toujours mis à la dernière ligne
Et du coup les cellules rajoutées peuvent être prise en compte dans le total ?

Par exemple pour les "heures restantes du BE", si je rajoute un chantier, est ce que la formule peut s'adapter en prenant en compte ce nouveau chantier ?
 

vgendron

XLDnaute Barbatruc
une remarque.. on est d'accord que le jour où un salarié part (julien par exemple) et qu'il est remplacé par stéphane.. plus aucune de tes macros congés ne fonctionne...
je pense qu'une modification profonde de tes macros est indispensable
 

Léraud Florian

XLDnaute Junior
toutes les macros 'identiques" dans le code des différentes feuilles peuvent etre supprimées et remplacées par ce code unique dans le code du "ThisWorkbook"
Merci de ton remarquable travail qui me fait gagner énormément de place ^^

Petite question, qu'est ce qu'est vraiment le "ThisWorkbook"
J'ai trouvé ça mais ça ne m'aide pas beaucoup ^^ : Renvoie un objet Workbook qui représente le workbook dans lequel le code de macro actuel est en cours d’exécution. En lecture seule.

Reedit : Problème résolu, cela venait de moi ^^

Cependant, j'ai un petit soucis, il me met incompatibilité de type avec ligne lorsqu'on lance la macro pour savoir si c'est une semaine de vacance et qu'on clique sur non :

1657020798916.png
 
Dernière édition:

Léraud Florian

XLDnaute Junior
une remarque.. on est d'accord que le jour où un salarié part (julien par exemple) et qu'il est remplacé par stéphane.. plus aucune de tes macros congés ne fonctionne...
je pense qu'une modification profonde de tes macros est indispensable
Oui effectivement, tu as tout à fait raison, c'est l'un des soucis.
Mais je voulais déjà faire un brouillon 'fait maison' afin d'avoir au moins l'idée globale 🙂
 

Léraud Florian

XLDnaute Junior
je n'ai pas encore revu la formule, mais j'ai simplifié les macros de saisie de congés et reset congés
==> j'ai supprimé tous les modules qui sont devenus inutiles
il faut que tu réaffectes TOUS tes boutons à ces deux macro (je l'ai fait pour les mois de janvier et février pour le test)
Je vais le redire encore une fois mais....merci beaucoup pour tout cela, c'est vraiment sympas de prendre votre temps pour regarder mon programme 😁

J'ai réaffecté toutes les macros et cela marche nickel 👍

Je t'avoue que (même avec les commentaires très bien détaillés d'ailleurs 😉) je ne comprends pas tout 😅 fin du moins je n'aurai jamais eu l'idée de faire comme cela ^^

Merci à vous !
 

Léraud Florian

XLDnaute Junior
oui j'ai vu le problème aussi, c'est quand tu cliques sur la colonne A==> target.offset(0,-1) n'existe pas. donc. il aime pas
j'ai corrigé dans la version que je viens de poster
J'ai essayé de rajouter votre nouveau code dans le "ThisWorkbook" mais je ne peux plus sélectionner les cases concernées (en fait il ne m'affiche plus le msgbox).

Si j'enlève les deux lignes :

VB:
If Target.Count > 1 Then Exit Sub
If Target.Column = 1 Then Exit Sub

Cela marche mais on reviens on au même problème que précédemment =/

Est-ce votre cas aussi ?

Merci d'avance =)
 

Léraud Florian

XLDnaute Junior
pour le fun, une V3 qui permet la saisie des congés via un formulaire
pour le lancer: bouton "Sasie de congés via formulaire" sur la feuille 2022

cela m'a permis de voir un problème dans tes feuilles
tes semaines ne sont pas forcément sur la bonne feuille
exemple de la semaine 5: cette année, elle a commencé le 31 Janvier==> elle appartient donc au mois de janvier

la règle que j'ai utilisée: la semaine 1 de l'année commence au 1er lundi de l'année
ex en 2022: 1 et 2 janvier étaient des samedi et dimanche
le 1er lundi de l'année est le 03/01/2022==> la semaine 1 est donc du 03 au 09 janvier, semaine 2: 10 au 16.....
Oui je m'en suis rendu compte une fois fini 😅

En soit cela n'a pas d'importance sur le résultat final puisque les colonnes "Semaines" dans le tableau de la feuille "2022" peuvent être modifiés mais c'est vrai que pour les autres années, il faudra que je fasse plus attention =)

Merci pour tes nombreuses versions toujours aussi plaisantes à utiliser 😁
 

Discussions similaires

Statistiques des forums

Discussions
312 368
Messages
2 087 669
Membres
103 633
dernier inscrit
Surfer