Ajout/Suppression de tableaux selon une entrée

  • Initiateur de la discussion Initiateur de la discussion apt
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

apt

XLDnaute Impliqué
Bonsoir,

J'aimerais lors de la saisie d'un "e" dans la colonne "E", un tableau vient s'ajouter à une ligne calculée en bas, avec les données correspondantes à la ligne cible,

Si ce "e" est éffacé de la colonne "E", le tableau correspondant s'éfface aussi,

Plus d'explications en fichier joint.

Merci.
 

Pièces jointes

Re : Ajout/Suppression de tableaux selon une entrée

Bonjour Apt, Skoobi

Quand tu fais du multi post sur plusieurs forums il est préférable de prévenir les uns et les autres...

www.veriti.net :: Voir le sujet - Ajout/Suppression de tableaux selon une entrée

@+
 
Re : Ajout/Suppression de tableaux selon une entrée

Re bonjour apt,

on insere une ligne supplementaire pour le prochain echeancier qui sera payé

voici le code modifié (il faut supprimer tout le code d'origine):
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim li As Long
    Application.EnableEvents = False
    li = Range("A1").CurrentRegion.Rows.Count + 1
    lig = li + 2
'    MsgBox "li : " & li & ", lig = " & lig    '=11
    If Target.Count = 1 Then
'Si "e" renseigné
        If Target.Column = 5 And Target.Row <= Range("A1").End(xlDown).Row And Target.Value = "e" Then
            With Range("A" & lig & ":B" & lig + 1).Borders
                .LineStyle = xlContinuous
                .Weight = xlThin
            End With
            Range("A" & lig).Value = "Crédit"
            Range("B" & lig).Value = "Intitulé"
            Range("A" & lig + 1).Value = Range("A" & Target.Row).Value    '10000
            Range("B" & lig + 1).Value = Range("B" & Target.Row).Value    'T
    
            With Range("A" & lig + 2 & ":C" & lig + 3).Borders
                .LineStyle = xlContinuous
                .Weight = xlThin
            End With
    
            Range("A" & lig + 2).Value = "Verser"    ' 20000
            Range("B" & lig + 2).Value = "Date"    ' 28-12-2007
            Range("C" & lig + 2).Value = "Reste"    ' 20000
            Range("B" & lig + 3).Value = Date
            Range("B" & lig + 3).Columns.EntireColumn.AutoFit
            Range("C" & lig + 3).Value = Range("A" & lig + 1).Value - Range("A" & lig + 3).Value
    
            Range("A" & lig & ":B" & lig).Font.Italic = True
    
            With Range("A" & lig + 1)
                .NumberFormat = "_(* #,##0.00_);_(* (#,##0.00);_(* ""-""??_);_(@_)"
                With .Font
                    .Name = "Arial"
                    .FontStyle = "Gras"
                    .Size = 8
                    .ColorIndex = 11
                End With
            End With
    
            With Range("B" & lig + 1)
                With .Font
                    '.Bold = True
                    '.Italic = True
                    .Name = "Arial"
                    .FontStyle = "Gras italique"
                    .Size = 8
                    .ColorIndex = 2
                End With
                With .Interior
                    .ColorIndex = 41
                    .Pattern = xlSolid
                    .PatternColorIndex = xlAutomatic
                End With
            End With
    
            Range("A" & lig + 2 & ":C" & lig + 2).Font.Italic = True
    
            With Range("A" & lig + 4)
                .NumberFormat = "_(* #,##0.00_);_(* (#,##0.00);_(* ""-""??_);_(@_)"
                With .Font
                    .Name = "Arial"
                    .FontStyle = "Gras"
                    .Size = 8
                    .ColorIndex = 10    '11
                End With
            End With
    
            With Range("C" & lig + 3)
                .NumberFormat = "_(* #,##0.00_);_(* (#,##0.00);_(* ""-""??_);_(@_)"
                With .Font
                    .Name = "Arial"
                    .FontStyle = "Gras"
                    .Size = 8
                    '.Strikethrough = False
                    '.Superscript = False
                    '.Subscript = False
                    '.OutlineFont = False
                    '.Shadow = False
                    '.Underline = xlUnderlineStyleNone
                    .ColorIndex = 3
                End With
            End With
'quand le crédit est renseigné
        ElseIf Target.Font.ColorIndex = 10 And IsNumeric(Target.Value) And Target.Offset(0, 2).Value > 0 Then
            Range(Target, Target.Offset(0, 2)).Copy
            Target.Offset(1, 0).Insert Shift:=xlDown
            Application.CutCopyMode = False
            Target.Offset(1, 0).Value = 0
            Target.Offset(1, 1).ClearContents
        End If
    End If
    Application.EnableEvents = True

End Sub

1-Est-ce absolument nécessaire que les tableaux soient sur 2 colonnes?
2-Plutôt que d'effacer le tableau lorsque le crédit a été remboursé, je te propose de supprimer les cellules correspondantes et de ce fait décaler les tableaux du dessous vers le haut.
Le code sera moins compliqué a faire.
A te relire.
 
Re : Ajout/Suppression de tableaux selon une entrée

Bonjour skoobi,

Je vois que tu n'as pas beaucoup utilisé :

Code:
CurrentRegion

pour connaître le nombre de lignes d'un tableau, et tu as utilsé avec, le
Code:
Range("A1").End(xlDown).Row

Pour le code d'insertion d'une nouvelle ligne, si le reste du crédit n'a pas atteint le zéro :

Code:
'quand le crédit est renseigné
        ElseIf Target.Font.ColorIndex = 10 And IsNumeric(Target.Value) And Target.Offset(0, 2).Value > 0 Then
            Range(Target, Target.Offset(0, 2)).Copy
            Target.Offset(1, 0).Insert Shift:=xlDown
            Application.CutCopyMode = False
            Target.Offset(1, 0).Value = 0
            Target.Offset(1, 1).ClearContents

        End If

Il n'a pas fonctionné.

1-Est-ce absolument nécessaire que les tableaux soient sur 2 colonnes?

Ce n'est pas obligatoire, mais seulement une façon de laisser sous les yeux tout les tableaux.

2-Plutôt que d'effacer le tableau lorsque le crédit a été remboursé, je te propose de supprimer les cellules correspondantes et de ce fait décaler les tableaux du dessous vers le haut.
Le code sera moins compliqué a faire.
A te relire.

C'est une trés bonne idée.

Merci.
 
Dernière édition:
Re : Ajout/Suppression de tableaux selon une entrée

Re bonjour,

Pour le code d'insertion d'une nouvelle ligne, si le reste du crédit n'a pas atteint le zéro :

Code:
'quand le crédit est renseigné
        ElseIf Target.Font.ColorIndex = 10 And IsNumeric(Target.Value) And Target.Offset(0, 2).Value > 0 Then
            Range(Target, Target.Offset(0, 2)).Copy
            Target.Offset(1, 0).Insert Shift:=xlDown
            Application.CutCopyMode = False
            Target.Offset(1, 0).Value = 0
            Target.Offset(1, 1).ClearContents

        End If

Il n'a pas fonctionné.

Attention: pour que ça marche, il faut que la couleur du montant saisie soit vert: "ElseIf Target.Font.ColorIndex = 10 ", qu'il s'agit bien d'un nombre:"IsNumeric(Target.Value)" et que le reste ne face pas 0 (logique):"Target.Offset(0, 2).Value > 0".
 
Re : Ajout/Suppression de tableaux selon une entrée

Bonsoir skoobi,

Re bonjour,



Attention: pour que ça marche, il faut que la couleur du montant saisie soit vert: "ElseIf Target.Font.ColorIndex = 10 ", qu'il s'agit bien d'un nombre:"IsNumeric(Target.Value)" et que le reste ne face pas 0 (logique):"Target.Offset(0, 2).Value > 0".

C'est que j'ai testé mais il n'y a pas d'insertion d'une nouvelle ligne !!!
 
Re : Ajout/Suppression de tableaux selon une entrée

Re,
pour que les macros évenementielles fonctionnent, il faut que "Application.EnableEvents" soit à "True".
Pour ce faire, dans VBE, affiche la fenêtre d'execution via le menu affichage ou Ctrl+G puis tu écris ceci:
Application.EnableEvents = True
Une fois écrit, appuie sur entrée et le tour est joué.
Celà peut ce produire si dans une macro il y eu un plantage et que cette instruction a été "executé" avant le plantage: " Application.EnableEvents = False
".
Voilà.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
558
  • Question Question
Microsoft 365 alerte
Réponses
5
Affichages
488
Réponses
3
Affichages
402
Retour