Empêcher bordures de remonter avec la ligne

Bonsoir a tous et toutes

dans l'exemple que je vais vous présenter, j'ai un userform qui me sert a déplacer une ligne dans le devis

en choisissant dans la combobox dans quelle partie je veux la déplacée

une fois la partie choisie il le n° de la 1 ere ligne de cette partie qui s'affiche dans le textbox de droite ou je peux changer le n°

si je veux pas que ma ligne se déplace dans celle afficher au départ

cet userform fonctionne très bien tant que la ligne a déplacer ne se trouve pas en bas du tableau, car dans ce cas le déplacement de la ligne amène aussi les bordures

et c'est la que je fait appel a vos lumières, car il ne faut pas que les bordures basses se déplace avec la ligne ou les lignes

comme ce que j'ai dit doit etre un peu flou, je vais joindre un classeur exemple

voici le code qui est en cause a mon avis

Private Sub UserForm_Initialize()
Call mise_a_jour_cb
End Sub
Sub mise_a_jour_cb()
ComboBox1.Clear

With Worksheets("Feuil1")
                'Trouve la dernière ligne occupée dans les colonnes c:h
                derlig = .Range("D:P").Find(What:="*", _
                                            LookIn:=xlFormulas, _
                                            SearchOrder:=xlByRows, _
                                            SearchDirection:=xlPrevious).Row
                'Si ton tableau était vide, la dernière ligne serait
                'la première ligne de ton tableau.
                If derlig < 19 Then derlig = 19

For Each C In .Range("C19:C" & derlig)

If C.Font.Bold = True And C.Font.Underline <> xlUnderlineStyleSingle Then
If C.Text <> "" Then ComboBox1.AddItem C: montab(ComboBox1.ListCount) = C.Row
End If
Next
End With

End Sub

ah oui il y a des formules dans les colonnes ou sont chiffres négatifs qui doivent remontée aussi sans déranger le reste

Bonjour,

Eh! Eh! Du code ... il n'y a rien à faire, ton code fonctionne bien.

Reste la fameuse dernière ligne.

Fléréchissons comme disait Délicat : https://www.youtube.com/watch?v=7z0mWMuvM1s

Les cellules de l'item 21 (ligne 39) ont des bordures sur le bas des cellules. Ces bordures sont donc copiées.

Mais si ces cellules n'avaient pas de bordure sur le bas

Et que ce serait la ligne plus bas (ligne 40) qui avaient des bordures sur le haut des cellules.

Les bordures ne seraient pas copiées, pas plus quelles de ne seraient supprimées

Gelinotte

bonjour Gélinotte

merci de ta réponse mais la bordure se déplace a chaque insertion d'articles

mais je viens d'avoir une idée, grâce a ce que tu m'as dit , je viendrais te la soumette

voila je reviens donc j'ai appliqué avec succès mon idée et ai juste rajouter une procédure pour effacer la bordure

a l'initialisation de l'userform

Dim D As Range
For Each D In .Range("C19:P" & derlig)
D.Borders(xlEdgeBottom).LineStyle = xlNone
Next

cela clos le sujet

Bonjour,

Mon idée n'était pas bonne, j'en suis désolé

J'ai donc tricoté quelque chose dans ton code du formulaire.

Ne sachant pas pour le nombre de colonnes, je n'en ai pas tenu compte, je présume que c'est toujours B à P.

Si c'est dynamique, ça peut être détecté.

Voir si ça convient...

bonsoir Gélinotte

merci beaucoup pour la modification qui fonctionne nickel sur le fichier exemple mais a moitié sur le réel

sur le réel il n'emporte plus la bordure avec le déplacement c'est déjà ça de bon mais elle est quand même disparue

bon est ce du aux cellules nommées qui sont au dessous et dont je n'en ai rien dit

je retourne ton exemple fonctionnel avec une copie de ma feuille et tout ce qui vas avec comme noms de cellules etc

j'y ai mis un bouton

j'ai laissé les modules qui ont du te servir d'essai comme je l'ai également fait

Bonjour,

Un des problèmes provient de la façon que la dernière ligne est détectée. Le texte sous l'encadré du devis interfère.

Comme l'encadré peut varier en longueur et que je présume que les infos au bas aussi; il faut trouver une référence fiable.

Je vais cogiter sur une autre façon de détecter la dernière ligne de l'encadré.

Je reviens dès que j'ai trouvé quelque chose de versatile.

Gelinotte

bonsoir Gélinotte

tu dits

Comme l'encadré peut varier en longueur et que je présume que les infos au bas aussi;

c'est tout a fait vrai car un devis tel que je le fait fait s'allonger le tableau au fur et mesure d'ajout de lignes d'article

l'insertion de ligne commence comme ceci

ligne après ligne autant que besoin, le code d'impression s'occupe de séparer le tout pour imprimé 2,3 où plus de pages

'insertion d'une ligne

    .Range("C" & lig - 1 & ":P" & lig - 1).Copy
    .Range("C" & lig).Insert xlShiftDown
    .Range("C" & lig & ":P" & lig).ClearContents
    .Range("C" & lig & ":H" & lig).HorizontalAlignment = xlLeft

bon c'est beaucoup plus mais imbriqué dans des modules de classes

c'est un classeur que je refait pour sortir des défauts d'ocx a répétition, et cela me donne divers petit soucis comme celui la mais que j'avais avant

bonsoir Gélinotte

j'ai changer le fichier dans le post du 30 Nov 2016, 18:41

qui est plus réaliste a la situation, car je lui ai mis un 2ème userform de façon a ce que chaque feuille ait son sien

plus simple que de changer chaque fois de noms de feuille dans le code

Bonjour,

Les trois seules choses que j'ai trouvées pour fidéliser la dernière ligne de chaque feuille sont :

  • se fier aux bordures
  • ajouter un champ nommé à la ligne sous l'encadré.
  • chercher la dernière ligne en descendant à partir de la ligne 19, ce qui est efficace seulement si on est certain qu'il n'y aura jamais de lignes vides dans l'encadré.
  • - à moins que tu aurais d'autres idées ??

Je regarde la nouvelle version de ton fichier.

Gelinotte

bonsoir Gélinotte

merci de ta réponse, le nouveau fichier mis est plus réaliste car avec le même userform pour les 2 feuilles c'est galère

maintenat ca montre que le code n'est pas si mal, et il est prêt d'etre bon

concernant le point de repaire, comme tu dits

- chercher la dernière ligne en descendant à partir de la ligne 19, ce qui est efficace seulement si on est certain qu'il n'y aura jamais de lignes vides dans l'encadré.

il n'y aura jamais de vide, normalement non, la tranche et le commentaire se mettent avec l'userform a la suite mais en colonne C

il y a ausi une option de sous-total qui prend appui sur une ligne en gras soit une tranche pour le total de l'espace entre 2 tranche

pas lignes vides non plus a ce moment

- ajouter un champ nommé à la ligne sous l'encadré.

autrement il y a la cellule nommée "arret" 2 lignes dessous le tableau qui est invariable toujours 2 lignes dessous sauf 1 cas

mais la c'est trop tard pour la remonter on est déjà dans le paiement

pour ajouter un acompte j'ai fait un code qui me permet de prendre appui sur une cellule nommée pour écrire plus bas

With .Range("suivant")
        .offset(5) = "Arrêtée la présente facture à la somme de : "
        With .offset(5)

on pourrai imaginer un peu comme cela mais2 ligne au dessus de "arret"

bonjour Gelinotte

ceci un petit up car je vois que tu es de retour

bonsoir a tous et toutes

comme notre ami Gélinotte a du prendre du repos forcé

https://forum.excel-pratique.com/excel/je-dois-m-absenter-pour-une-periode-indeterminee-t86766.html

est ce que quelqu'un pourrai prendre la suite de mon souci

merci par avance

bonjour Gélinotte pour quand tu nous reviendra

Si... m'as donné une solution par double clic et qui fonctionne très bien

merci toi pour ce que tu as fait tout en étant pas très bien

J’espère comme d'autres que tu nous reviendra bientôt en pleine forme

Rechercher des sujets similaires à "empecher bordures remonter ligne"