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 :

Zone d'impression jusqu'à plusieurs cellules de couleur RGB [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Apprenti ingénieur Production/Maintenance
    Inscrit en
    Mars 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Apprenti ingénieur Production/Maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2020
    Messages : 13
    Par défaut Zone d'impression jusqu'à plusieurs cellules de couleur RGB
    Bonjour à tous,

    Pour me présenter rapidement (car c'est mon premier post ), je suis apprenti ingénieur production-maintenance dans une entreprise spécialisé dans l'emballage. J'ai fais très peu de VBA, je commence tout juste à me remettre dedans.
    Dans le cadre de mon alternance on m'a demandé de travailler sur l'amélioration un plan de charge de production qui sera par la suite imprimé pour être à disposition des opérateurs, chefs d'équipes, chef d'atelier.

    Après avoir mis en forme automatiquement mes données provenant d'une extraction SAP (ici Feuil1), je voudrais que ma zone d'impression s'adapte automatiquement à mon plan de production.

    C'est à dire que j'ai des formules dans ma feuille 'Plan de charge commun' qui vont me récupérer mes valeurs sur ma 'Feuil1' et la dernière ligne qui m'est utile est celle avec les cellules au fond vert (ici à la ligne 688).

    J'ai récupérer un code permettant de redéfinir automatiquement la zone d'impression qui fonctionne bien pour les colonnes mais je n'arrive pas à sélectionner ma ligne verte. Ici le code est sensé partir de la dernière ligne et remonter pour s'arrêter à ma ligne verte (code RGB 146, 208, 80). Hors le code me sélectionne juste la dernière ligne non-vide.

    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    Sub Zone_Impression_Automatique()
     
        Dim Variable_der_colonne As Long
        Dim Variable_der_ligne As Long
     
     
            Variable_der_ligne = Range("G" & Rows.Count).End(xlUp).Row
     
           Do Until Cells(Variable_der_ligne, 1).Interior.Color = Color RGB (146, 208, 80)
           Variable_der_ligne = Variable_der_ligne - 1
           Loop
     
     
     
        Variable_der_colonne = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
     
     
     
            Do
                If Len(Cells(1, Variable_der_colonne).Value) <> 0 Then Exit Do
                Variable_der_colonne = Variable_der_colonne - 3
            Loop
     
        ActiveSheet.PageSetup.PrintArea = Range(Cells(2, 1), Cells(Variable_der_ligne, Variable_der_colonne)).Address
     
    End Sub

    Merci de votre aide et de vos réponses !

    EDIT : Je n'avais pas lu qu'il fallait éviter les pièces jointes lors du début d'une discussion, je l'ai supprimé et étoffé un peu plus ma demande, désolé.

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Utiliser des couleurs comme données d'entrée dans Excel est généralement une mauvaise idée.

    Si tes données sont extraites d'un SAP, je suppose que, de base, tu ne récoltes que des valeurs et que cette "ligne verte" est placée par la suite soit "à la main", soit par une MFC (si c'est une autre méthode, merci de le préciser).

    Ne serait pas possible de mettre, à la place, une chaine de caractères du type "XXXXX" ou "Fin de zone" ou autre ?
    Ce serait bien plus simple à gérer pour définir cette zone.

  3. #3
    Membre averti
    Homme Profil pro
    Apprenti ingénieur Production/Maintenance
    Inscrit en
    Mars 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Apprenti ingénieur Production/Maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2020
    Messages : 13
    Par défaut
    Bonjour Menhir,

    Merci pour ta réponse,

    Effectivement ma ligne verte est obtenue grâce à une mise en forme conditionnelle, qui me permet de mettre en lumière cette dernière ligne effectivement et qui est également une somme.

    Je peux affecter les mots "Total à produire" à une cellule de cette ligne, ce sera peut-être plus simple de chercher ces mots et de définir ma zone d'impression à partir de ça !

    Je fais la modif !

    Merci !

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par TristanLcr Voir le message
    Effectivement ma ligne verte est obtenue grâce à une mise en forme conditionnelle
    Il fallait le préciser car d'un point de vue VBA, c'est complètement différent d'une mise en forme classique.
    Pour voir le résultat d'un remplissage par MFC, il faut passer par DisplayFormat.Interior et non par le Interior classique.
    Lire ça : https://docs.microsoft.com/fr-fr/off...ormat.interior

    Mais il serait bien plus simple de travailler directement sur la condition que tu places dans ta MFC pour obtenir cette couleur.

    Je peux affecter les mots "Total à produire" à une cellule de cette ligne, ce sera peut-être plus simple de chercher ces mots et de définir ma zone d'impression à partir de ça !
    Il suffira de rechercher cette chaine de caractères avec un Find.
    Lire ça : https://msdn.microsoft.com/fr-fr/lib...6(v=office.15)

    Une fois que tu as la cellule concernée, tu peux obtenir sa ligne avec la propriété Row et ainsi définir ta zone d'impression en modifiant le PrintArea du PageSetup de la feuille.
    Lire ça :
    https://msdn.microsoft.com/fr-fr/lib...3(v=office.15)
    https://docs.microsoft.com/fr-fr/off...etup.printarea

  5. #5
    Membre averti
    Homme Profil pro
    Apprenti ingénieur Production/Maintenance
    Inscrit en
    Mars 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Apprenti ingénieur Production/Maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2020
    Messages : 13
    Par défaut
    Bonjour
    Merci pour ta réponse Menhir,

    J'ai réussi à faire que je souhaitais pour adapter ma zone d'impression à la bonne dimension, pour ça j'ai cherché un mot avec Find comme tu me l'as conseillé.
    Grace à une formule (la même que pour ma MFC) ma dernière ligne va afficher la valeur "XXX" dans la colonne Q.

    Ensuite mon code cherche la ligne de cette cellule "XXX" et j'adapte ma zone impression à la bonne dimension.

    Tout fonctionne bien quand je fais des tests et que je rentre "XXX" dans ma cellule mais cela ne fonctionne pas quand c'est ma formule Excel qui renvoie la valeur "XXX".
    Il me renvoie une erreur d'exécution '13' : incompatibilité de type

    Que dois-je modifier dans mon code ?

    Merci !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    Option Explicit
    Sub ZoneImpression_Auto()
     
    'déclaration des variables :
    Dim Trouve As Range
    Dim PlageDeRecherche As Range
    Dim Valeur_Cherchee As String
    Dim AdresseTrouvee As String
    Dim derLig As Integer
     
     
     
    'affectation de valeurs aux variables :
        'on cherche le mot "XXX"
        Valeur_Cherchee = "XXX"
     
        'dans la première colonne de la feuille active
        Worksheets("Plan de charge commun").Activate
     
        Set PlageDeRecherche = Sheets("Plan de charge commun").Range("A1:S2000")
     
        'méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole)
        Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
     
            derLig = Trouve.Row
     
        ActiveSheet.PageSetup.PrintArea = "A1:P" & derLig
     
    End Sub

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Juste une petite modification de puriste pour ton code (ce n'est pas ça qui le corrigera mais ça fait mieux):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        'méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole)
        Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
     
        If Trouve Is Nothing Then
            Debug.Print MsgBox("Limite non trouvée")
            Exit Sub
        End If
     
        derLig = Trouve.Row
     
        ActiveSheet.PageSetup.PrintArea = "A1:P" & derLig
    Tu devrais aussi déclarer derLig de type Long et non Integer.

    Citation Envoyé par TristanLcr Voir le message
    Tout fonctionne bien quand je fais des tests et que je rentre "XXX" dans ma cellule mais cela ne fonctionne pas quand c'est ma formule Excel qui renvoie la valeur "XXX".
    Il me renvoie une erreur d'exécution '13' : incompatibilité de type
    D'après ce que tu décris, le problème ne viendrait pas de ton code mais de la formule.
    A moins que la ligne trouvée soit au delà de 32000.

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

Discussions similaires

  1. [VBA] verifier le contenu de plusieurs cellules avant impression
    Par franckla dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 21/10/2017, 13h24
  2. [XL-2007] Affecter la valeur d’une zone de texte dans plusieurs cellules à la fois
    Par iliesss dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/07/2011, 23h51
  3. Concatener le contenu de plusieurs cellules selon couleurs
    Par ludion62 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/05/2010, 20h05
  4. Réponses: 1
    Dernier message: 28/07/2009, 16h22
  5. imprimer plusieures zones d'impression sur la même feuille
    Par gratesnif dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/10/2007, 14h05

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