VBA Retour à la ligne, mais dans cellule du dessous.

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 !

Arpette

XLDnaute Impliqué
Bonsoir à toutes et à tous,
j'aimerais savoir si il est possible de faire un retour à la ligne sans passer par "format de cellule renvoyer à la ligne automatiquement" car ce format augmente l'hauteur de ligne et je dois garder le même nombre de ligne en raison de ma ma macro.
Ce que je souhaite, si j'écris dans la cellule B1, quand j'arrive en fin de B1 je continue à écrire mais en B2 etc..
Peut-être avec un codeVB
Merci de votre aide
@+
 
Re : VBA Retour à la ligne, mais dans cellule du dessous.

Bonsoir Francedemo, merci pour ce code fort intéressant, mais j'ai un peux de mal à l'adapter. Je saisis dans la colonne A21 à A50. Ca me renvoi une valeur en B. C'est cette valeur qui peut dépasser 1 ligne, dès que j'ai 2 lignes ma mise en page est décalée. Avec ton code je masque trop de ligne. Je continue à creuser ton code.
Merci de ton aide
@+
 
Re : VBA Retour à la ligne, mais dans cellule du dessous.

en modifiant le code d'après ton fichier :

Code:
Dim Ligne As Long
Dim DerLigne As Long
Dim h As Long
Dim k As Long

'===Valider la zone concernée
h = 0
DerLigne = Range("B21").End(xlUp).Row + 1
For Ligne = 21 To 50
    Rows(Ligne).EntireRow.AutoFit
'===Calcul de la hauteur des lignes (bloqué à 405 (30x13.5) pour l'impression)
    If Ligne >= DerLigne And h > 405 Then 'on empêche le masquage de toutes les lignes remplies
        rep = MsgBox("Masquer après la ligne" & vbCr & Ligne - 1, _
            vbYesNo + vbExclamation, "Masquage")
        If rep = vbYes Then
            For k = 21 To Ligne Step -1
                Rows(k).Hidden = True
            Next
            Exit Sub
        End If
        Exit Sub
    End If
h = h + Cells(Ligne, 1).Height
Next

End Sub

avec ce code, toutes les lignes remplies sont imprimée. il doit être modifiable pour que si tu dépasses h=405, on insère une nouvelle feuille pour poursuivre le devis, il faut dans ce cas ajouter les reports des différents totaux de bas de page
 
Dernière édition:
Re : VBA Retour à la ligne, mais dans cellule du dessous.

Bonjour à tous, pour régler mon problème, j'ai essayer d'adopter un code de BHBH qui répondait à un problème similaire. J'ai essayer de le faire fonctionner de façon événemetielle mais ça ne fonctionne pas. Ci-joint le fichier " module1 son code" feuil1 le mien.
Merci de votre aide
@+
 

Pièces jointes

Re : VBA Retour à la ligne, mais dans cellule du dessous.

Bonjour

Enlèves la ligne suivante
Code:
Dim Range As Range

Bonne journée

EDIT: Comme c'est une procédure événementielle elle n'agira que sur la cellule en cours et de ce fait risque de modifier les lignes en dessous
 
Dernière édition:
Re : VBA Retour à la ligne, mais dans cellule du dessous.

Bonjour Banzai, ça fonctionne sur l'exemple, mais pas facile à adapter à mon projet.
J'ai écrit comme ceci mais je n'arrive pas pas lui affecter B comme cible.
Merci de ton aide.
@+

Code:
place le résultat en B,C,E et convertit le contenu de B en ligne
       Target.Offset(0, 1).Value = r.Offset(0, 1).Value
            Set Liste = CreateObject("Scripting.Dictionary")
            Set Cel = Target(Range("B20:B106").End(xlUp).Row)
            Temp = Split(Cel, Chr(10))
            For I = LBound(Temp) To UBound(Temp)
                If Temp(I) <> "" Then Liste(Temp(I)) = Temp(I)
            Next I
            Target.Offset(0, 1).Resize(Liste.Count, 1).Value = Application.Transpose(Liste.Items)
            Application.EnableEvents = True
 
Re : VBA Retour à la ligne, mais dans cellule du dessous.

j'ai essayé de modifier le code en partant de ton projet (c'est pas épuré et il manque encore l'insertion de ligne sur la deuxième page, là je sèche un peu)

Code:
Dim Ligne As Long
Dim Lig1 As Long
Dim Lig2 As Long
Dim Coup As Long
Dim DerLigne As Long
Dim h As Long
Dim h2 As Long
Dim k As Long

'===Valider la zone concernée
h = 0
DerLigne = Sheets("Devis").Range("B50").End(xlUp).Row
Rows("21:50").EntireRow.AutoFit
For Ligne = 21 To 50
'===Calcul de la hauteur des lignes (bloqué à 405 pour l'impression)
'    If h > 405 And Ligne >= DerLigne Then
'        For k = Ligne + 1 To 50
'            Rows(k).Hidden = True
'        Next k
    If h > 405 Then
        For k = Ligne + 1 To 50 Step 1
            Rows(k).Hidden = True
        Next k
        Lig1 = Ligne
    If Ligne < DerLigne Then
        Sheets("Devis").Copy After:=Sheets(2)
'===Traitement sur la feuille 2
        Sheets("Devis (2)").Activate
        h2 = 0
        For k = 21 To Lig1 Step 1
            Rows(k).Hidden = True
        Next k
        For k = Lig1 + 1 To 50
            Rows(k).Hidden = False
            h2 = h2 + Cells(k, 1).Height
        Next k
        If h2 < 405 Then
'            Rows(49).EntireRow.Insert '=> c'est là que je sèche
'            Rows(50 + 1).EntireRow.FillDown
        End If
    End If
    End If
h = h + Cells(Ligne, 1).Height
Next

End Sub

sinon, ça fonctionne de la façon suivante :
1 - mise en forme (hauteur) de toutes les lignes entre 21 et 50
2 - comptage de la hauteur cumulées des lignes
3 - dès qu'on arrive à 405 (ta hauteur de base pour la mise en forme), on masque les lignes suivantes
4 - si il y a encore des lignes remplies dans le devis, on crée une deuxième feuille
5 - sur la 2ème feuille, on masque toutes les lignes validées dans la 1ère, on affiche toutes les autres
6 - on fini la mise en forme en ajoutant les lignes manquantes pour faire 405 de hauteur totale (c'est là que ça marche pas)

à+
 
Re : VBA Retour à la ligne, mais dans cellule du dessous.

Bonsoir FranceDemo, merci pour ce code, comme tu le dis arrive un moment où il faudrait ajouter des lignes. J'ai passé ma journée à chercher comment spliter une cellule dès qu'il y à un retour à la ligne automatique. J'ai trouvé pas mal de chose, mais c'est encore pas ça.
Merci de aide
@+
 
Re : VBA Retour à la ligne, mais dans cellule du dessous.

bonjour Arpette
je viens de penser à un truc (tout con), puisque ce code joue avec le masquage des lignes en fonction de leur taille, qu'est ce qui empêche d'avoir 50 lignes masquées dans ta feuille "devis" ? => les lignes de 50 à 100 snt masquées d'origine, mais dispo pour la feuille 2 lors de la copie, comme ça, il n'y a rien à créer, il suffit juste de "démasquer" ce dont on a besoin
je jette un œil, voir si ça marche
à+

bon, je reviens vers toi

dans ton fichier de base, tu ajoutes des lignes entre 50 et 100
tu colle ce code dans un module
chez moi, ça fonctionne nickel
j'ai fait un essai avec "IRP" qui contient plusieurs lignes, quand ça dépasse la hauteur de 405 pour l'impression, ça crée une 2ème feuille "Devis (2)" et tu as la suite du devis

Code:
Dim Ligne As Long
Dim Lig1 As Long
Dim Lig2 As Long
Dim Coup As Long
Dim DerLigne As Long
Dim h As Long
Dim h2 As Long
Dim k As Long

'===Valider la zone concernée
h = 0
DerLigne = Sheets("Devis").Range("B100").End(xlUp).Row
Rows("21:50").EntireRow.AutoFit
For Ligne = 21 To 100
'===Calcul de la hauteur des lignes (bloqué à 138 pour l'impression)
    If h > 405 Then
        For k = Ligne + 1 To 100 Step 1
            Rows(k).Hidden = True
        Next k
        Lig1 = Ligne
        If Ligne < DerLigne Then
            Sheets("Devis").Copy After:=Sheets(2)
'===Traitement sur la feuille 2
            Sheets("Devis (2)").Activate
            h2 = 0
            For k = 21 To Lig1 Step 1
                Rows(k).Hidden = True
            Next k
            For k = Lig1 + 1 To 100
                Rows(k).Hidden = False
                If h2 > 405 Then
                    Exit Sub
                End If
                h2 = h2 + Cells(k, 1).Height
            Next k
'            Rows(49).EntireRow.Insert
'            Rows(50 + 1).EntireRow.FillDown
        End If
    End If
h = h + Cells(Ligne, 1).Height
Next

End Sub

après, il reste à affiner si tu veux le total en bas de chaque feuille ou pas
 
Dernière édition:
Re : VBA Retour à la ligne, mais dans cellule du dessous.

Bonjour FranceDemo, un grand merci pour cett excellent travail, mais Banzai a trouvé la solution à mon problème, donc plus de souci de mise en page. Néanmoins je garde ton code dans ma bibloitèque de macro.
Encore un grand merci.
@+
 
Re : VBA Retour à la ligne, mais dans cellule du dessous.

Bonsoir çà toutes et à tous, me revoilà avec mon problème de retour à la ligne. Je souhaites adapter la solution de JNP avec un USF. Le problème est que si je veux faire une modification sur une référence, j'éfface tout. Je souhaiterais quand je clique sur la colonne B le texte apparaisse dans le USF et que le puisse le modifier.
Merci de votre aide
@+
 

Pièces jointes

- 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
2
Affichages
256
Réponses
43
Affichages
813
Retour