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 :

plusieurs erreurs de code pour faire 2 totaux après une selection


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut plusieurs erreurs de code pour faire 2 totaux après une selection
    Bonjour,
    Dans un fichier Excel, j'ai une feuille "heures imputees" dans laquelle j'ai un tableau croisé dynamique avec 6 colonnes :

    mois/technicien client/affaire/chapitre/heures.

    Je voudrais faire le total des heures par affaire en fonction des techniciens et des chapitres (catégorie de prestation).

    1er groupe de techniciens : total pour XXXX et YYYY => BE ( partie électrique).
    2eme groupe de techniciens : total pour le reste des techniciens => SOFT (programmation d'automates).

    Exemple final :
    heures
    affaire Chapitre BE SOFT

    XX.XX.XXXX A02 54 123

    voici mon nouveau code actuel :

    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
    31
    32
    33
    Option Explicit
     
    Dim N°AFFAIRE As String
     
    Dim chapitre As String
    Dim nom_technicien As String
    Dim HEURES As Integer
     
     
     
    Sub Remplir_Bilan()
     
    ' Définition des variables générales
        Dim A As Integer
     
    HEURES = 0
     chapitre = Worksheets("Heures Imputees").Range("B" & A).Value
     nom_technicien = Worksheets("Heures Imputees").Range("E" & A).Value
    'Rechercher les heures Imputées sur N°AFFAIRE & CHAPITRE
    Worksheets("Heures Imputees").Activate
        For A = 2 To 2600
     
            Worksheets("Heures Imputees").Activate
            If (Worksheets("Heures Imputees").Range("d" & A).Value = N°AFFAIRE) And chapitre = "A02" And nom_technicien = "CHESI Christophe" Or "VINCENT Jean-Claude" Then
                HEURES = Worksheets("Heures Imputees").Cells(A, 8).Value + HEURES
                Else
                HEURES = Worksheets("Heures Imputees").Cells(A, 7).Value + HEURES
            End If
        Next A
     
     
     
    End Sub
    Merci de bien vouloir m'aider, je débute en VBA et j'ai beau chercher partout sur le Net, je n'y arrive pas.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut aprentizorrrr et le forum
    et c'est urgent
    Non ! Si ça l'était, tu ferais ton poste de sorte qu'on ait envie de te répondre, et qu'on n'ait pas à demander des précisions !
    je voudrais 2 totales des heures par affaire
    un total pour XXXX et YYYY => BE ( partie électrique)
    un total pour le reste des techniciens => SOFT ( programmation d'automate)
    Là, tu parles chinois... sauf si on travaille avec le fichier, mais ce n'est pas le cas.

    Je ne comprends pas ce que tu veux, ou, si je le comprends, un simple sommeprod() suffirait, ou ton TCD.

    Tout ce qui est évident ne l'est que pour toi (ou pour ceux qui travaillent sur le fichier), et pas pour nous. Explique-le !

    Ta macro, sans savoir ce qu'elle est supposée faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Remplir_Bilan()
    ' Définition des variables générales
    Dim A As Integer
     
    HEURES = 0
    'Rechercher les heures Imputées sur N°AFFAIRE & CHAPITRE
    Worksheets("Heures Imputees").Activate
        For A = 2 To 2600
            If (Range("D" & A) = N°AFFAIRE) And Range("E" & A) = "A02" Then
                HEURES = Cells(A, "G") + HEURES
            End If
        Next A
    End Sub
    J'ai un peu modifié ton code, en gardant la forme de ce que tu as mis.
    Si tu active une feuille, elle le reste jusqu'à ce que tu en actives une autre => ne jamais activer une feuille dans une boucle, ce n'est pas utile et ça ralentit le processus.

    Tu déclares A en Integer. Même si ta ligne reste inférieure à 32000, une fois l'habitude prise, tu risques de chercher longtemps une panne le jour où tu aura besoin d'une ligne supérieur à 32767 => prend l'habitude de déclarer tes variables dans le type qui supportera la valeur maximale qu'elle puisse avoir.

    Déclares toutes tes variables, passeulement une de temps en temps

    Heures : c'est quoi comme type de variable ? Tes heures sont-elles des nombres entiers, ou des valeurs "heures" reconnues comme telles par Excel ?
    A+

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut re
    Bonjour a toi Gorfael et merci de ta reponse tout d'abord:
    j'ai modifie le suejt , dit moi si tu comprends mieu sinon j'essaye de refaire,
    sinon pour la declaration de "heures" c'etait declaré dans option explicit plus haut je sais pas si sa marche de le laisser dans option explicite ou si je me met dans ma fonction remplir bilan

    j'ai mis le code que j'ai modifie cet aprem midi voila si tu peux partir de celui la
    merci de ta reponse

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut aprentizorrrr et le forum
    J'avais pas vu que tu avais mis option explicit et que tu avais déclaré Heures en variable globale de type Integer => donc ce ne sont pas des heures reconnues par Excel.

    J'au regardé ta nouvelle macro, et suis pas sûr de la comprendre :
    - si quelqu'un répond à ton poste, évite de le modifier. on finit par ne plus savoir sur quelle macro on doit travailler.

    Ta macro est du genre :
    Sheets("A").activate
    for x=2 to 2600
    Sheets("A").activate
    ........
    next x

    T'es vache avec Excel : tu lui fais activer 2599 fois la feuille alors qu'une seule suffit.

    Une proposition :
    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
     Sub Remplir_Bilan()
    ' Définition des variables
    Dim A As Long
    HEURES = 0
    HEURES_1 = 0
    'Rechercher les heures Imputées sur N°AFFAIRE & CHAPITRE
    With Worksheets("Heures Imputees")
        For A = 2 To 2600
            Chapitre = .Range("B" & A)
            Nom_Technicien = .Range("E" & A)
            If (.Range("D" & A) = N°AFFAIRE) And _
              Chapitre = "A02" And _
              (Nom_Technicien = "CHESI Christophe" Or _
              Nom_Technicien = "VINCENT Jean-Claude") Then
                HEURES = .Cells(A, 8) + HEURES
            Else
                HEURES1 = .Cells(A, 7) + HEURES
            End If
        Next A
    End With
    End Sub
    J'ai été obligé de créer une deuxième variables concernant les heures. Et de rectifier ton test :
    En français, tu peux dire : si A=(B ou C)
    En programme ça s'écrit : si A=B ou A=C

    Dans ta macro, tu définis Chapitre et Nom_technicien avant la boucle : c'est à dire au moment ou A vient d'être déclaré en entier est comme il n'a pas encore été défini, il est égal à 0.

    Ton test initial (hormis les fautes déjà signalées) :
    Si A=vrai alors Heures = Heures + X sinon Heures = Heures + X
    ???? autant ne pas faire de test.

    Ton test, pour la partie vrai, je suppose qu'il est correct. Mais pour la partie Faux, il fait le total de toutes les autres heures, y compris celles des deux techniciens quand le chapitre ou l'affaire ne sont pas les mêmes (Bx<>"AO2")

    Dans le code fournit, il n'y a pas d'initialisation de la variable du N°AFFAIRE. Mais comme c'est une variable globale, tu la définis sans doute dans une autre macro du même module ?
    A+

Discussions similaires

  1. [MySQL] Erreur dans le code pour faire un Upload dans mysql
    Par ali9090 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 28/04/2014, 13h56
  2. [Cookies] Erreur de code pour un site multilangue
    Par MaTTuX_ dans le forum Langage
    Réponses: 2
    Dernier message: 25/08/2007, 22h23
  3. [Tableaux] probleme avec mon code pour faire un parseur !
    Par Joe-La-Boule dans le forum Langage
    Réponses: 10
    Dernier message: 11/10/2006, 15h35
  4. code pour faire une migration
    Par rollins_ng dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 11/08/2006, 21h18

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