XL 2016 VBA - Insertion de lignes automatique sous condition et copier formats et formules dans la nouvelle ligne

clochette

XLDnaute Nouveau
Bonjour,

Après de multiples recherches vaines et fastidieuses, je soullicite votre aide, car j'aggrave la situation à chaque nouvelle tentative

Evidemment, je ne comprends rien au VBA, et je suis incapable de modifier et corriger un code que je copie bêtement depuis les forums

Dans le fichier joint, je souhaite:

- insérer une seule ligne automatiquement si le statut (colonne E) est "en cours" (calculer avec une formule si colonne I = "Non" et "En cours" : actuellement je ne parviens pas à corriger l'insertion des 2 lignes

- la nouvelle ligne créée doit reprendre les formules existantes en s'incrémentant (a4 devient a5) ce qui n'arrive pas actuellement avec les codes enregistrés en private sub et en sub (module 1)


J'en profite pour tout demander en même temps, car je dois rendre ce fichier demain (ca fait des semaines que je temporise et que je me tue le cerveau et les yeux à essayer de m'en sortir seule, et mal):

- supprimer une ligne vide sous un statut "clôturé" si existante (en évitant la perte des formules existantes qui sont dépendantes des lignes du dessus ...) : avec bouton de commande c'est bien, en automatique aussi c'est bien

- éviter la perte des formules en cas de suppression de lignes

- à l'aide d'un bouton de commande, masque / démasquer r les lignes en statut "clôturé"

- insérer une nouvelle bordure au dessous de la ligne entière d'un statit "clôturé")



Voilà, désolée pour le m**dier que je laisse dans le fichier et merci d'avance pour votre aide précieuse !

Bon dimanche

Cloche...tte
 

Pièces jointes

  • Suivi accidents-maladies - Template v6 draft.0.xlsm
    24.5 KB · Affichages: 8

Staple1600

XLDnaute Barbatruc
Bonjour

Ce petit bout de code semble fonctionner
(c'est déjà un début)
VB:
Sub inserer_Ligne()
If Not Intersect([Table1].ListObject.DataBodyRange, ActiveCell) Is Nothing Then
If ActiveCell.Column = 5 Then
If ActiveCell.Value2 = "En cours" Then
[Table1].ListObject.ListRows.Add
End If
End If
End If
End Sub
A lancer quand on est dans une cellule de la colonne 5 et que celle-ci contient "En cours"
 

Staple1600

XLDnaute Barbatruc
Re


Tu peux déjà associer un bouton y affecter cette macro.

NB: Mon avis en passant (qui vaut ce qu'il vaut)
Très mauvaise idée (je parle d'expérience) que de diffuser un fichier avec tout plein de macros.
Si le VBA plante, l'utilisateur ne saura pas quoi faire et tu seras sollicité pour faire du dépannage express
 

Staple1600

XLDnaute Barbatruc
Re

Stéphanie
Voila un code pour insérer tes formules
VB:
Sub Inserer_Formules()
With ActiveSheet.ListObjects(1).DataBodyRange
    .Cells(1, 1).FormulaR1C1 = "=IF(R[-1]C[4]<>""En cours"","" "",IF(R[-1]C[10]<91,""Arrêt reconduit"",IF(R[-1]C[10]>91,""Avis d'invalidité"")))"
    .Cells(1, 5).FormulaR1C1 = "=IF(RC[4]="""","""",IF(RC[-3]=R[1]C[-3],(IF(COUNTIF(RC[4]:R[73]C[4],""Oui""),""Clôturé"",""En cours"")),(IF(RC[4]=""Oui"",""Clôturé"",""En cours""))))"
    .Cells(1, 10).FormulaR1C1 = "=(RC[-3]-RC[-4])+1"
    .Cells(1, 11).FormulaR1C1 = "=IF(AND(RC[-9]=R[-1]C[-9],OR(R[-1]C[-2]=""Non"")),(RC[-1]+R[-1]C),RC[-1])"
    .Cells(1, 12).FormulaR1C1 = "=IF(RC[-1]>91,""À envoyer"",""-"")"
    .Cells(1, 17).FormulaR1C1 = "=(RC[-1]-RC[-2])+1"
End With
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
311 733
Messages
2 082 019
Membres
101 872
dernier inscrit
Colin T