Aide-Mise en forme ajout-suppression ligne

Bonjour,

Tout nouveau par ici, je rencontre une difficulté sur mon fichier.

Comment ajouter/supprimer automatiquement une ligne à mon tableau ?

Il s'agit d'un fichier excel de devis/facturation.

J'ai essayé par un ajout de bouton et macro, mais pas top.

Je cherche une personne capable de me fournir un fichier complet moyennent finance.

J’espère être au bon endroit et ne pas violer les régles du forum.

Par avance, merci.

Julien

8base.xlsx (35.87 Ko)

Je cherche une personne capable de me fournir un fichier complet moyennent finance.

Bonjour,

Je crois que ce ne sera pas nécessaire ! Ou alors pour 2 BN et un mars !

Bonjour Pedro22,

Je crois que ce ne sera pas nécessaire ! Ou alors pour 2 BN et un mars !

Ca devrait pouvoir se faire

Question : ton ajout / suppression de ligne concerne un onglet en particulier ou les 3 ? Pour l'ajout, pas de soucis, mais pour la suppression, ce serait sur quel(s) critère(s) ? Un index de ligne ? Une ligne sélectionnée ? Un code spécifique ?

Pedro,

Toujours à la dernière ligne du tableau, avec la formule de la ligne précédente.

La feuille 1 se répercute sur la 2 et 3. Je sais pas si je suis clair

Tes cellules fusionnées me donnent du fil à retordre... Y'a-t-il moyen de revoir ta présentation pour éviter d'avoir ce type de cellules ?

Oui, que faut-il que je fasse ?

J'ai le logo de la société à mettre dans la partie haute et les CGV sur la partie basse.

C'est pas une mince affaire.... Tu vois pourquoi la contrepartie financière...

J'ai réussi à me dépatouiller ! A tester :

10base2.xlsm (48.97 Ko)

C'est top

comment puis-je ajouter la mise en forme de la cellule ?

bordure extérieure noir ?

Pour aller voir le code : ALT + F11

10base2.xlsm (50.66 Ko)

Merci infiniment

C'est top, tout fonctionne, juste parfait.

C'est très agréable de voir des personnes qui donnent de leurs temps.

Que puis-je faire pour compenser ? 2 BN et un mars....

MERCI

Ma récompense c'est que j'apprends aussi en faisant ! Et le mieux que tu puisses faire maintenant c'est :

Voilà une autre version avec une méthode différente (copier/coller de la ligne précédente au lieu d'étendre les formules + ajouter des bordures).

10base2.xlsm (51.56 Ko)

C'est du super boulot,

Juste une question...j'ai regardé le code, mais ouvrir un livre en mandarin serait pour moi la même chose...

Après l'ajout d'une nouvelle ligne, le calcul =SOMME(F**H*) ne se fait pas.

Ju

Dans la macro, je ne réécrit que la somme HT en intégrant la nouvelle ligne, puisque les calculs en dessous (TVA et montant TTC) dépendent de ce calcul uniquement et pas d'une plage variable. Par contre si tu te bases sur le fichier que je t'ai renvoyé, j'ai peut-être supprimé par erreur les fonctions présentes à la base. Il suffit juste de les réécrire une fois et normalement ça ne bougera plus.

Si tu veux je te remets le code davantage commenté pour comprendre le pourquoi du comment ?

Voilà le code commenté :

Sub AjoutLigne()

Dim Infos(3) As Long, i As Byte 'On déclare le type de variable qui seront utilisés dans le code

Application.ScreenUpdating = False 'Désactive l'affichage (exécution + rapide)
Application.Calculation = xlCalculationManual 'Désactive le recalcul des fonctions à chaque modification (exécution + rapide)

For i = 1 To 3 'Pour chacune des 3 feuilles
    With Sheets(i)
        Select Case .Name 'On récupère le nom de la ième feuille
            Case "Devis"
                Infos(1) = .Range("F" & Rows.Count).End(xlUp).Row - 5 'On stocke la position de la dernière ligne de la feuille "Devis" (- 5 lignes avec les calculs des totaux...)
            Case "BL"
                Infos(2) = .Range("B" & Rows.Count).End(xlUp).Row 'Idem (pour info, Range() est un objet représentant une cellule ou une plage)
            Case "Facture"
                Infos(3) = .Range("F" & Rows.Count).End(xlUp).Row - 3 'Idem
        End Select
    End With
Next i

'Inserer une ligne
Sheets("Devis").Rows(Infos(1) + 1).Insert Shift:=xlDown 'On insère une ligne après la dernière
Sheets("BL").Rows(Infos(2) + 1).Insert Shift:=xlDown
Sheets("Facture").Rows(Infos(3) + 1).Insert Shift:=xlDown

'Fusionner les cellules
Sheets("Devis").Range("C" & Infos(1) + 1 & ":E" & Infos(1) + 1).Merge 'Fusion des cellules C, D et E de la dernière ligne
Sheets("Devis").Range("F" & Infos(1) + 1 & ":G" & Infos(1) + 1).Merge
Sheets("BL").Range("C" & Infos(2) + 1 & ":H" & Infos(2) + 1).Merge
Sheets("Facture").Range("C" & Infos(3) + 1 & ":E" & Infos(3) + 1).Merge
Sheets("Facture").Range("F" & Infos(3) + 1 & ":G" & Infos(3) + 1).Merge

'Copier les formules et la mise en forme (attention, les valeurs écrites manuellement seron aussi reportées)
Sheets("Devis").Rows(Infos(1)).Copy Sheets("Devis").Rows(Infos(1) + 1) 'On copie l'avant dernière ligne (instruction avant l'espace) que l'on colle sur la dernière (après l'espace)
Sheets("BL").Rows(Infos(2)).Copy Sheets("BL").Rows(Infos(2) + 1)
Sheets("Facture").Rows(Infos(3)).Copy Sheets("Facture").Rows(Infos(3) + 1)

'Actualiser les sommes
Sheets("Devis").Range("I" & Infos(1) + 2).FormulaR1C1 = "=SUM(R15C:R[-1]C)" 'On réécrit une formule Excel pour tenir compte de la nouvelle ligne dans le total
Sheets("BL").Range("I" & Infos(2) + 2).FormulaR1C1 = "=SUM(R19C:R[-1]C)" 'Explication : ici R (pour "Row") --> ligne et C (pour "Column") --> colonne (R1C1 équivalent à $A$1 dans Excel)
Sheets("Facture").Range("I" & Infos(3) + 2).FormulaR1C1 = "=SUM(R19C:R[-1]C)" 'Suite explication : [-1] est une position relative par rapport à la cellule dans laquelle on se trouve, exemple si je suis en A2, alors R[-1]C équivaut à A1

Application.ScreenUpdating = True 'réactive l'affichage
Application.Calculation = xlCalculationAutomatic 'réactive le calcul auto

End Sub

Bon, je me pose, je prends un verre avec un doliprane et je détail tout ça... lol

Merci encore

Bonjour Pedro,

Bon, j'ai détaillé ton code, mais j'ai beaucoup de mal à me repérer.

Comme je disais hier, lors de l'ajout d'une nouvelle ligne, je perd la formule

=SOMME(FX*HX)

Dans ton code, j'ai vu :

'Etendre les formules
Sheets("BL").Range("B19").AutoFill Destination:=Sheets("BL").Range("B19:B" & Infos(2) + 1)
Sheets("BL").Range("C19:H19").AutoFill Destination:=Sheets("BL").Range("C19:H" & Infos(2) + 1)
Sheets("BL").Range("I19").AutoFill Destination:=Sheets("BL").Range("I19:I" & Infos(2) + 1)
Sheets("Facture").Range("B19").AutoFill Destination:=Sheets("Facture").Range("B19:B" & Infos(3) + 1)
Sheets("Facture").Range("C19:E19").AutoFill Destination:=Sheets("Facture").Range("C19:E" & Infos(3) + 1)
Sheets("Facture").Range("F19:G19").AutoFill Destination:=Sheets("Facture").Range("F19:G" & Infos(3) + 1)
Sheets("Facture").Range("H19").AutoFill Destination:=Sheets("Facture").Range("H19:H" & Infos(3) + 1)
Sheets("Facture").Range("I19").AutoFill Destination:=Sheets("Facture").Range("I19:I" & Infos(3) + 1)

Mais pas de Sheet : "Devis". Donc, déjà, à ce niveau je ne comprends pas.

Qu'est ce que Infos(2) +1); (3) +1) etc ?

Ju

Bonjour Ju,

Réutilise plutôt le dernier code envoyé.

Les instructions AutoFill servent à étendre une formule d'une plage vers une autre, tel que tu le ferais en sélectionnant le carré dans l'angle inférieur droit d'une cellule. La feuille "Devis" n’apparaît pas car il n'y a aucune formule dans le corps du tableau, donc rien à étendre.

Mais pour actualiser tes SOMME(), c'est plus loin dans le code.

Dans cette macro, j'ai créer un petit tableau pour mettre la position de la dernière ligne de chacune des 3 feuilles, et ce tableau s'appelle Infos(). Pour ça je repère le nom de chacune des 3 feuilles d'intérêt et j'affecte en Infos(1) la ligne max de la feuille "Devis", en 2 de la feuille "BL" et en 3 de la feuille "Facture".

Sauf qu'après insertion d'une nouvelle ligne, la dernière ligne se trouve en Infos(i)+1. Exemple, la dernière ligne de la feuille "Facture" est la n°25. Dans ce cas, Range("C19:E" & Infos(3) + 1) équivaut à la plage "C19:E26"

C'est très bien expliqué

Je te remercie mille fois, de plus tout fonctionne.

Plus qu'à mettre tout en forme.

Rechercher des sujets similaires à "aide mise forme ajout suppression ligne"