IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

la copie d'un onglet ne respecte pas la hauteur de ligne [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Par défaut la copie d'un onglet ne respecte pas la hauteur de ligne
    Bonjour Forum,
    Voici le sujet qui m'occupe de puis ce matin.
    J'ai 2 fichiers : Offre et Source.
    Dans Offre, j'ai une macro qui copie des onglets de Source vers Offre.
    Ci dessous la partie de code qui gère la copie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    'si l'onglet existe, on le copie
                Sheets(cdmach).Activate             'copier onglet dans tarif et le coller dans matrice/offre
                Cells.Select
                Selection.Copy
                Workbooks(fichoffre).Activate
                ThisWorkbook.Sheets.Add After:=Sheets(Sheets.Count)
                ActiveSheet.Paste
                ActiveSheet.Name = cdonglet           'nommer le nvl onglet
                ActiveSheet.Tab.Color = RGB(235, 110, 25)
    Les onglets dans Source ont tous la même mise en page. Il comporte une liste de matériel avec leur prix, quelques formules, un peu de couleur et autres mises en forme.
    La hauteur des lignes dépend de ce qu'il y a dedans : le texte peut être sur 1 ou plusieurs lignes. Mais cette hauteur est ajustée au contenu.
    A aucun endroit de ma macro je ne touche à la hauteur de ligne.

    La macro fait son boulot correctement, mais... pour un onglet (FM de son nom), une fois copié dans Offre, la hauteur de certaines lignes augmente sans que je comprenne pourquoi. Quand dans Source une ligne fait 15 de haut, à l'arrivée dans Offre, elle fait 30 ou 50. Ce qui allonge ma liste et rend la lecture difficile.
    Je n'ai le pb que sur cet onglet !
    Cela concerne aussi bien des lignes qui n'ont qu'une ligne de texte, comme des lignes qui contiennent plusieurs lignes de texte.
    Si je fait la manip à la main (clic droit / copier ou déplacer.../...) je n'ai pas le pb.

    J'ai modifié le contenu de cet onglet récemment, l'origine du pb est sans doute là, mais je n'arrive pas à en trouver la cause.
    Je n'ai pas trouvé de différence de format de cellule entre les onglets.
    J'ai essayé de recopier le contenu de cet onglet récalcitrant dans un autre, sans succès.
    Et je sèche...

    Quelqu'un aurait-il une piste?
    Merci d'avance
    Benoit

  2. #2
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Bonjour,

    Au risque de sonner comme un disque rayé, n'utilisez les opérations de sélection et d'activation que lorsque cela est strictement nécessaire (soit, en première approximation, rigoureusement jamais !).

    Quant à votre question, elle ne correspond pas au titre de la discussion : vous ne copiez pas un onglet, mais son contenu.
    Si vous souhaitez à tout prix procéder ainsi, il va vous falloir effectuer 2 opérations complémentaires : la copie de la hauteur de ligne et celle de la largeur de colonne.
    Pour copier la hauteur de ligne, vous pouvez copier la première colonne de votre onglet source et effectuer un collage spécial (de la hauteur de ligne) vers la cellule A1 de l'onglet de destination. Pour savoir comment coder cela en VBA, faîtes l'opération à la main après avoir activé l'enregistreur de macros.
    Pour la largeur de colonne, même procédé mais en copiant la première ligne de votre onglet source.

    Bien plus simple : copiez directement l'onglet ! Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Sheets(cdmach).Copy After:=Workbooks(fichoffre).Sheets(Workbooks(fichoffre).Sheets.Count)
    Là encore, l'enregistreur de macros aurait pu vous dire comment faire.

    Cdt

  3. #3
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Quant à l'origine du comportement d'Excel dans votre cas, j'imagine que cela provient de la présence de caractères de passage à la ligne dans certaines de vos cellules (des cellules fusionnées pour être précis).
    Je vous laisse vérifier que c'est bien le cas.

    Si oui, la méthode consistant à effectuer des collages spéciaux des largeurs de colonnes et hauteurs de lignes pourrait ne pas fonctionner à la perfection : il risque de rester des problèmes de mise en page, puisque Excel ne passera toujours pas à la ligne lorsqu'il le devrait.

    Au passage, je ne connais pas la raison fondamentale pour laquelle Excel est récalcitrant à mettre correctement en forme les sauts de ligne lors d'une copie de cellule fusionnée. Si une âme charitable à des infos sur le sujet, je suis preneur !

    Bonne fin de journée à toutes et à tous.

    EDIT pour précisions complémentaires

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Par défaut
    Merci Ben pour ce retour
    J'avais commencé par une simple copie de l'onglet, avec le code fourni par l'enregistreur. Il me semble que j'avais changé de méthode car ça me générait des pb. Je ne sais plus lesquels,mais je vais fouillé.
    J'ai testé votre code qui marche bien, au détail que les onglets s'insèrent en 1ère position et non pas à la fin. Pourtant, si je comprend bien le code, l'onglet doit être inséré après (AFTER) le dernier onglet?
    Le passage à la ligne dans une cellule ne semble pas être le déclencheur, car j'ai des lignes qui finissent très haute alors qu'il n'y a qu'une ligne de texte, sans retour à la ligne.
    Et je ne vois pas d'influence non plus de cellules fusionné.

    Je reprends ça demain.
    Merci
    Benoit

  5. #5
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Citation Envoyé par BenoitL77 Voir le message
    si je comprend bien le code, l'onglet doit être inséré après (AFTER) le dernier onglet?
    C'est tout à fait cela.
    J'ai re-testé le code chez moi et il fonctionne comme attendu. Je vous laisse réessayer demain.

    Bonne fin de journée

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Par défaut
    Bonjour Ben,
    J'ai compris !
    Dans ma macro, je masque tous les onglets sauf un avant de copier de nouveaux onglets depuis le fichier source.
    Ma méthode avec le Add After le supportait bien, mais pas ta méthode avec Copy after non.
    J'ai donc changé le moment où je masque/affiche mes onglets et cette fois, ton code insère bien en dernière position.

    Problème résolu
    Merci
    Bonne journée à toi
    Benoit

  7. #7
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Par défaut
    C'est encore moi...
    Et j'ai retrouvé pourquoi j'avais préféré copier le contenu de l'onglet plutôt que l'onglet lui même.

    Dans mes onglets sources, j'ai certaines cellules qui contiennent :
    une formule "=pays_select"
    et une liste déroulante ayant pour source "L_pays"

    pays_select et L_pays sont des noms qui ne sont pas définis dans le fichier source mais uniquement dans mon fichier Offre.
    Dans le fichier source ces cellules me renvoient "NOM?", mais une fois copiées dans le fichier offre tout va bien.

    Si je copie le contenu d'un onglet source vers Offre : pas de pb, ces cellules renvoient la valeur des noms.
    Mais si je copie l'onglet, ces cellules ne reconnaissent pas les noms. Si je passe manuellement dans ces cellules et revalide la formule et la liste, alors ça marche.

    Mon problème initial était de pouvoir copier l'onglet source en respectant sa mise en forme (notamment hauteur de ligne)
    Y'aurait il une solution pour respecter la mise en forme et assurer la reconnaissance des noms?

    Merci d'avance
    Benoit

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo