Insertion de lignes ou de colonnes avec modif de formules par macro

KIM

XLDnaute Accro
Bonjour le forum, et les ami(e)s,
J'ai un modèle de tableau utilisé dans le cadre d'une demande et de suivi finacier de projets. Pour l'ensemble des projets le nombre de colonnes et de lignes ne sont pas les mêmes.
Quand je remplis ce cadre pour un projet donné,
1- Pour un nouveau partenaire, j'insère 5 lignes avec une ligne sous-total avant la dernière ligne du TOTAL, et je modifie les formules de la dernière ligne total manuellement.
2- Pour une année supplémentaire d'investissement, j'insère l 3 colonnes avant les 3 dernières colonnes des sous/totaux par type et je modife les formules manuellement
voir fichier joint
Est-il possible d'automatiser par macro ces 2 manipulations independantes l'une de l'autre.
Merci de votre aide
Bien amicalement
KIM
 

Pièces jointes

  • Fiche_KIM.zip
    8.4 KB · Affichages: 68

KIM

XLDnaute Accro
Re : Insertion de lignes ou de colonnes avec modif de formules par macro

Re le fil,
@Pierrejean,
J'ai suivi tes explications. ça marche correctement. Merci pour ton acharnement et aussi Bebere, Yojema et JeanMarie.
Dans Sommeprod est-il possible de donner la reference de la cellule et non le contenu? cela evitera de la modifier.
En tout cas mille mercis.
J'ai un autre soucis urgent à regler dans le fil ci-dessous et j'espère avoir un coup de main du forum et des ami(e)s.
https://www.excel-downloads.com/threads/selection-colonnes-et-lignes-selon-conditions.71269/

Votre aide m'a été et l'est toujours précieuse
Amicalement
KIM
 

yojema

XLDnaute Occasionnel
Re : Insertion de lignes ou de colonnes avec modif de formules par macro

Un bonsoir a tous

j avais un peu perdu le fil mais je vois que les probleme on ete résolu

donc je vais suivre mon chemin ca été un plaisir de collaborer avec vous

tous Kim Pierrejean et Berber abientot sur le forum

Ps j ai jeter un Oeil sur le nouveau fil mais comme il y a deja beaucoup de

monde dessus et que j ai pas mal de retard je vais m en tenir la

salut kiss :p
 

KIM

XLDnaute Accro
Bonsoir le fil, bonsoir les amis,
Comme d'habitude, dès que j'ai à résoudre un problème VBA, je reviens vers le forum et vers vous et vous en remercie par avance.
J'ai défini un bloc de 14 lignes et un bloc de lignes de recap des phases de tous les . La feuille 1 est initialisée par 2 blocs et un bloc de RECAP. Une ligne vide sépare les blocs de données du bloc RECAP.
Je souhaite une macro qui me créé un nouveau bloc, vide de données mais avec les formules existantes du bloc à la suite des blocs existants et avant le bloc RECAP. Suite à cette insertion du nouveau bloc, les formules du bloc RECAP se mettent à jour automatiquement et toutes les lignes des phases des blocs anciens sont maquées (clic -). Voir fichier ci-joint et réseultat souhaité en Feuil 2.
Le fichier final est très lourd. je n'ai pas pu utiliser les macros de ce fil car elles recopient ligne par ligne.
Merci de votre aide
KIM
 

Pièces jointes

  • CopyLignesv1.xlsm
    54.3 KB · Affichages: 28

Bebere

XLDnaute Barbatruc
bonjour
Kim à mettre dans un module
Code:
Sub CopyInsertHiddenLignes()

With Feuil1
    .Rows("41:41").Insert Shift:=xlDown
    .Rows("27:40").Copy
    .Rows("42:42").Insert Shift:=xlDown
    Application.CutCopyMode = False
    With .Rows("41:41").Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    .Rows("15:26").EntireRow.Hidden = True
    .Rows("29:41").EntireRow.Hidden = True
    End With
End Sub

Sub MontreLignes()
    Feuil1.Rows("15:26").EntireRow.Hidden = False 'True
    Feuil1.Rows("29:41").EntireRow.Hidden = False 'True
End Sub
 

KIM

XLDnaute Accro
Bonjour Bebere, bonjour les amis, bonjour le forum,
Merci Bebere de ta macro.
1/ Elle fonctionne la 1è fois.
Par contre si je dois l'exécuter une 2è fois, il faut qu'elle insère le bloc à la suite du dernier bloc existant avant le bloc de RECAP. Le nombre d'insertion est illimité.
2/Tu m'as devancé pour la macro "montrerligne". Elle est globale et très utile.
Ma demande est la suivante comment clicquer sur la 1è cellule du bloc pour montrer les lignes de ce bloc et cacher les lignes des autres blocs.
Merci de ton aide et bon dimanche
KIM
 

pierrejean

XLDnaute Barbatruc
Bonjour KIM
Salut bebere

Heureux de vous croiser à nouveau
un essai permettant répéter l’opération
Il me manque la possibilité de rétracter les groupes (je continue à chercher)
 

Pièces jointes

  • CopyLignesv1.xlsm
    94.2 KB · Affichages: 23

KIM

XLDnaute Accro
Bonsoir Pierrejean, Bonsoir Bebere et le fil,
@pierrejean,
Content de te retrouver aussi. J'ai testé ta macro.
1/ C'est le 2è bloc à copier.
Set bloc = Sheets("Feuil1").Range("A27:AV40")
Est-il possible de définir le bloc en sélectionnant des lignes coplètes et non les cellules car les colonnes ne sont pas figées?
2/ Au 1er lancement de la macro, il crée un nouveau bloc avant le bloc RECAP
3/ Au 2è lancement de la macro, tous les blocs sont masqués.
Est-ce un focntionnement normal de la macro?
Est-il possible de rendre visible le dernier bloc ?
4/ Comment numéroter correctement les blocs ?
5/ Pour le bloc récap, est-il possible de n'afficher que les lignes contenant des valeurs différentes de '0' en colonne G et masquer les autres lignes col G à '0'?
Merci d'avance de ton aide.
Bonne soirée
KIM
 

Bebere

XLDnaute Barbatruc
bonjour
Kim une partie de la demande à tester
avec n° bloc et cacher l'avant dernier
2 possibilités pour trouver total

Code:
Option Explicit
Public L As Long, nbL As Long

Sub CopyInsertHiddenLignes()
    nbL = 14
    With Feuil1
        'L = .Columns(2).Find("Total", LookIn:=xlValues, lookat:=xlWhole).Row
        L = .Cells.Find("Total", LookIn:=xlValues, lookat:=xlWhole).Row
        .Rows(L - nbL - 1 & ":" & L - 1).Select
                .Rows(L - nbL - 1 & ":" & L - 1).Copy

        .Rows(L).Insert Shift:=xlDown
            L = .Cells.Find("Total", LookIn:=xlValues, lookat:=xlWhole).Row
      .Range("B" & L - nbL - 1) = .Range("B" & L - nbL - 1) + 1
        Application.CutCopyMode = False
   End With
   L = L + 2
  CacheLignes
End Sub

Sub CacheLignes()
    nbL = 12
    Feuil1.Rows(L - nbL - 1 & ":" & L - 1).EntireRow.Hidden = False   'True
    '    Feuil1.Rows("29:41").EntireRow.Hidden = False 'True
End Sub
 

Bebere

XLDnaute Barbatruc
Kim
un code pour recap
Code:
Public Sub Recap()
    Dim i As Long
   
    L = Feuil1.Cells.Find("Total", LookIn:=xlValues, lookat:=xlWhole).Row + 1
    Feuil1.Rows(L & ":" & L + 11).EntireRow.Hidden = False
    For i = L To L + 11
        If Feuil1.Range("G" & i) > 0 Then Feuil1.Rows(i).EntireRow.Hidden = True
    Next
   
End Sub
 

KIM

XLDnaute Accro
Bonjour les amis, bonjour le fil,
@pierrejean,
Merci de ta macro, elle fonctionne.
Pour le bloc Recap, est-il possible d'avoir une macro qui affiche les lignes masquées ?
Est-il possible de me documenter ton code, j'ai eu du mal à suivre ton raisonnement ?
@Bebere,
En exécutant la macro, j'ai une erreur de type
Incompatibilité de type au niveau de la ligne :
.Range("B" & L - nbL - 1) = .Range("B" & L - nbL - 1) + 1
Les autres macros sont utiles et je les utilise déjà.
Je vous remercie d'avance de toute votre aide qui est toujours de qualité.
KIM
 

Bebere

XLDnaute Barbatruc
bonjour
Kim met ce code
Code:
.Range("B" & L - nbL - 1) = Application.CountIf(.Range("B:B"), "abc") - 1

trouvé sur ce forum
Code:
Public Sub AfficheTout()
With Feuil1.Cells
'.EntireColumn.Hidden = False
.EntireRow.Hidden = False
'.ColumnWidth = 12.86
.RowHeight = 12
End With
End Sub

édité,ajout et correction
rmq de temps à autre copier/coller n'est pas bon(cellules fusionnées?)
qu'en pense PierreJean
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re

J'ai commenté au mieux mais si quelque chose n'est pas clair n’hésite pas à revenir
La mise a jour de l'affichage des lignes est en principe automatique au remplissage des blocs affichés (à contrôler quand même
Et il y a la macro pour tout afficher
 

Pièces jointes

  • CopyLignesv2.xlsm
    106.3 KB · Affichages: 25

Discussions similaires

Statistiques des forums

Discussions
315 124
Messages
2 116 460
Membres
112 748
dernier inscrit
Pboiusquet