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 :

CODE VBA pour mise en forme et calculs


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
    Ingénieur commercial
    Inscrit en
    Mars 2019
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2019
    Messages : 31
    Par défaut CODE VBA pour mise en forme et calculs
    Bonjour à tous,

    Voila je vous expose mon nouveau problème pour lequel mes capacités de codage sont limitées.
    Je cherche à faire une mise en page automatique à partir d'un appui bouton. Lorsque je clique sur le bouton, toute la mise en forme se réalise automatiquement.
    Le contexte :
    Le but, c'est de pouvoir faire un état de stock à la demande, sans faire de calcul d'apothicaire.
    Je me suis crée un fichier qui me fait une compilation de l'ensemble des dépôts en appelant les données de plusieurs fichier.
    Dans mon fichier de travail, j'ai crée une page DATA où toutes mes données se compilent dans l'ordre d'ouverture des fichiers sources.
    Dans ma page DATA, j'ai une liste avec des désignations. Certaines désignations apparaissent plusieurs fois dans la page, en face j'ai un état de stock quoi qu'il arrive.

    1) Opération N°1, faire un tri par ordre alphabétique.
    Pour cette partie c'est bon.

    2) Opération N°2, surligner les lignes par groupe, alternativement en bleu, puis en jaune.
    Par exemple, si sur ma 1ere ligne, j'ai une désignation, la ligne complète est surlignée en bleu. Puis sur les lignes 2 à 5 une autre désignation, ces 4 lignes sont surlignées en jaune.
    Et ainsi de suite jusqu'à la dernière ligne où il y a quelque chose d'écrit.
    La subtilité, c'est qu'il peut y avoir plusieurs fois la même référence, même en premier poste.
    Il y a une sous opération qui consiste à surligner toute la colonne H en noir. (cette partie facile, il n'y a pas de variable).

    3) Opération N°3, la partie calcul. La mon but c'est d'avoir un total par sous-groupes surlignés.
    En gros si j'ai une référence sur la 1ere ligne, il faut faire la somme de la ligne de la colonne C à G. Dans ce cas de figure de C1 à G1.
    Si j'ai une référence sur les 3eres lignes, le calcul devra se faire de C1 à G3.
    Et ainsi de suite jusqu'au traitement de tout les sous-groupes.

    Si ma requête n'est pas claire, n’hésitez pas à me faire vos remarques.

    Merci d'avance pour votre aide.

  2. #2
    Membre expérimenté
    Homme Profil pro
    chef de projet transverse MOE
    Inscrit en
    Janvier 2015
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : chef de projet transverse MOE
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 121
    Par défaut
    Pour l'opération n°2, il faut faire les choses suivantes:

    Pour chaque ligne:
    Si la ligne précédente à la même désignation que celle traitée: colorier avec la couleur courante.
    Sinon, changer la couleur courante, et colorier la ligne avec la couleur courante.

    Ce qui se traduit comme suit (Non optimisé pour Excel et non testé):

    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
     
    Dim CouleurCourante as integer
    Dim cptLignes as integer
    Dim DesignationPrecedente as string
     
     
    'les valeurs de couleurs sont fixées arbitrairement, a toi de trouver ce qui correspond au jaune ou au bleu
    CouleurCourante = RGB(255, 0, 0)
    'J''ai considéré que la désignation se trouvait dans la colonne A
    DesignationPrecedente = Range("A1").value
     
    i = 1
    While range("A" & i).value <> "" do 
       if DesignationPrecedente <> Range("A" & i).value then
          DesignationPrecedente = Range("A" & i).value
          if CouleurCourante = RGB(255, 0, 0) then
             CouleurCourante = RGB(0, 0, 255)
          else
             CouleurCourante = RGB(255, 0, 0)
          end if
       end if
       row(i).Interior.Color = CouleurCourante
       i = i + 1
    Wend
    Pour la partie 3, tu peux le faire dans la même boucle en retenant le numéro de la ligne ou tu as la 1ere fois une nouvelle valeur et en sommant la valeur de la colonne concernée à une variable de somme tant qu'on ne change pas de désignation. Si il y a un changement de désignation, tu ecris le résultat la ou tu en as besoin et tu reinitialise ta variable de somme avec la valeur de la colonne concernée.

    Easy

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Mars 2019
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2019
    Messages : 31
    Par défaut
    Salut Tylert,

    Merci pour ton retour. J'ai intégré ton code dans mon fichier et j'ai une erreur de compilation qui ressort.
    J'ai bien observé ton code, mais je n'y comprends malheureusement pas grand chose.
    J'ai compris le principe de ce que tu voulais faire. Mais je ne sais pas l’interpréter en code.

  4. #4
    Membre expérimenté
    Homme Profil pro
    chef de projet transverse MOE
    Inscrit en
    Janvier 2015
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : chef de projet transverse MOE
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 121
    Par défaut
    le code compilé sans erreur:

    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
     
    Dim CouleurCourante As Integer
    Dim cptLignes As Integer
    Dim DesignationPrecedente As String
    Dim i As Integer
     
    'les valeurs de couleurs sont fixées arbitrairement, a toi de trouver ce qui correspond au jaune ou au bleu
    CouleurCourante = RGB(255, 0, 0)
    'J'ai considéré que la désignation se trouvait dans la colonne A
    DesignationPrecedente = Range("A1").Value
     
    i = 1
    While Range("A" & i).Value <> ""
    'Si la valeur de la designation n'est pas la même que celle de la ligne précédente, alors on la change et on retient la nouvelle designation pour la prochaine ittération   
    If DesignationPrecedente <> Range("A" & i).Value Then
          'on retient la valeur de la nouvelle désignation
          DesignationPrecedente = Range("A" & i).Value
    'Si on était jaune, on passe bleu pour la couleur a utiliser pour colorier
          If CouleurCourante = RGB(255, 0, 0) Then
             CouleurCourante = RGB(0, 0, 255)
          Else
    'sinon, on passe jaune
             CouleurCourante = RGB(255, 0, 0)
          End If
       End If
    'On colorie la ligne
       Rows(i).Interior.Color = CouleurCourante
    ' on passe à la ligne suivante
       i = i + 1
    Wend
    Ca m'apprendra de coder en direct dans ce forum sans passer par VBA

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Mars 2019
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2019
    Messages : 31
    Par défaut
    Salut Tylert,

    Bon le code bloque encore.
    Je me suis crée un fichier vierge avec une liste aléatoire afin de travailler que sur cette partie de code.
    Là ça bloque sur la ligne 20 de ton code.
    J'ai une ''Erreur d’exécution 6 : Dépassement de capacité''.
    J'ai la prmière ligne qui se colore, mais pas la suite.
    Par ailleurs, j'apprécie tes explications pas à pas, cela me permet de comprendre comment avance le code.

    De plus il y a un truc que je ne comprends pas dans les déclarations :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim cptLignes As Integer
    Je ne le vois pas apparaître plus loin dans le code.
    J'ai joins mon fichier exemple.

    Merci d'avance pour ton retour.
    Alex
    Fichiers attachés Fichiers attachés

  6. #6
    Membre expérimenté
    Homme Profil pro
    chef de projet transverse MOE
    Inscrit en
    Janvier 2015
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : chef de projet transverse MOE
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 121
    Par défaut
    Sans avoir vraiment regardé:

    Je pense que la valeur retournée par RGB(0,0,255) est trop grande pour un integer, donc passe en long pour le type de couleurCourante.

    Pour l'indice non utilisé, ca devrait remplacer l'indice i. En codant j'ai cru que j'avais oublié de définir mon indice et j'ai créé la variable i alors que j'avais déjà cptLignes.

Discussions similaires

  1. [WD-2010] Code VBA - WORD - Outlook pour mise en forme d'un message
    Par xav31so dans le forum VBA Word
    Réponses: 19
    Dernier message: 27/11/2013, 09h50
  2. Code vba pour ouverture en mode calcul sur ordre
    Par ciambe dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/05/2013, 13h01
  3. [XL-2007] code vba pour calcul taille mémoire virtuelle et profil windows
    Par marcelisa2 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/03/2013, 15h02
  4. Améliorer code VBA pour mise en forme
    Par majothi dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 28/12/2012, 08h20
  5. Code VBA pour calcul compte client > ou < à 100- Urgent
    Par mabeatrice@yahoo.fr dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 13/03/2007, 16h39

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