Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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"
 

clochette

XLDnaute Nouveau
Merci Staple Du coup, en automatique ca fonctionne comment ? (ce fichier sera utilisé par d'autres personnes et j'aimerais qu'ils aient le moins de manip manuelles possibles à effectuer ...)
 

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
 

clochette

XLDnaute Nouveau
Oui, merci pour ton conseil
c'était surtout cette inserton de ligne qui était importante
bon, j'aimerais aussi trouver le moyen de ne pas avoir de problème de référence quand on supprime une ligne
mais merci beaucoup Staple
 

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…