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 :

Regrouper des lignes en fonction de la date [XL-2007]


Sujet :

Macros et VBA Excel

  1. #21
    Membre habitué
    Homme Profil pro
    Chargé d'Ingénierie et d'Analyses en Ressources Humaines
    Inscrit en
    Novembre 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'Ingénierie et d'Analyses en Ressources Humaines
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 63
    Points : 169
    Points
    169
    Par défaut
    Erreur de débutant, j'avais mis dans ThisWorkbook au lieu du module.

    Eh bien ça me semble parfait.

    Je te remercie encore pour ton aide (c'est même plus de l'aide, tu me l'a fait tout seul) tu réponds à ma demande, maintenant c'est à moi de me jouer.

    Merci beaucoup,
    Chtik

  2. #22
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Salut Chtik,

    Heureux d'avoir collaboré avec toi.

    Essaie de reprendre le code et pose des questions si nécessaire.

    N'oublie pas de positionner cette discussion en mode "Résolu"

    A plus.

  3. #23
    Membre habitué
    Homme Profil pro
    Chargé d'Ingénierie et d'Analyses en Ressources Humaines
    Inscrit en
    Novembre 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'Ingénierie et d'Analyses en Ressources Humaines
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 63
    Points : 169
    Points
    169
    Par défaut
    Juste une dernière question, je viens d'essayer sur mon fichier d'entreprise.

    J'avais réduis le nombre de lignes pour l'exemple et du coup, j'ai le message suivant qui s'affiche :
    Erreur d'éxecution 6 : Dépassement de capacité

    Sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For k = 0 To dicollab.Count - 1
    Pourrais-tu me dire ce qu'il faut que je modifie ?
    J'ai environ 2000 lignes à traiter et 500 personnes.


    Merci d'avance.

  4. #24
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut capacité
    La variable "k" est déclarée en Byte.
    Ce qui signifie qu'elle peut prendre une valeur comprise entre 0 et 255
    Aide en ligne
    Les variables de type Byte sont stockées sous la forme d'un nombre de 8 bits (1 octet unique), non signé, compris entre 0 et 255.
    Donc pour ton cas,

    Un tutoriel utile sur les variables

    Les variables par Sylkiroad

  5. #25
    Membre habitué
    Homme Profil pro
    Chargé d'Ingénierie et d'Analyses en Ressources Humaines
    Inscrit en
    Novembre 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'Ingénierie et d'Analyses en Ressources Humaines
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 63
    Points : 169
    Points
    169
    Par défaut Capacité
    En ayant lu, rapidement, les différences entre Byte et Integer, je comprends la raison pour laquelle tu me dis de changer la variable K en Integer.

    Néanmoins, quand j'effectue cette modification, le problème se déplace dans le code.

    J'ai maintenant cette erreur :
    Incompatibilité de type

    Sur la ligne 16 de cette sub :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    Public Function sommecollab(matricule As Variant, sem As Variant, choix As Byte) As Variant
     
    Dim dico, ListeCle, ListeElement, Tempo1, Tempo2
    Dim c As Range
    Dim cumul As Double
    Dim datedéb, datefin
    Dim i As Byte, j As Byte
    Application.ScreenUpdating = False
     
    '--------------------------------------------------------------------------------CALCUL DU DEBUT D'ABSENCE ET DU CUMUL DES HEURES----------------------------------------------------------------------------
     
            cumul = 0
            Set dico = CreateObject("Scripting.Dictionary")
            For Each c In plage
                    If c = matricule And c.Offset(0, 6) = sem Then
                            cumul = cumul + c.Offset(0, 5)
                            If Not dico.Exists(c.Offset(0, -5).Value) Then dico.Add c.Offset(0, -5).Value, c.Value
                    End If
            Next c
     
        ListeCle = dico.Keys
        ListeElement = dico.Items
     
        If dico.Count >= 2 Then
                'tri  dico
                For i = 0 To dico.Count - 2
                    For j = i + 1 To dico.Count - 1
                        If ListeCle(i) > ListeCle(j) Then
                            Tempo1 = ListeCle(j)
                            Tempo2 = ListeCle(j)
                            ListeElement(j) = ListeElement(i)
                            ListeElement(j) = ListeElement(i)
                            ListeElement(i) = Tempo1
                            ListeCle(i) = Tempo2
                        End If
                    Next j
                Next i
        End If
     
    datedéb = ListeCle(0)
     
    Set dico = Nothing
     
     '--------------------------------------------------------------------------------CALCUL FIN D'ABSENCE----------------------------------------------------------------------------
     
            Set dico = CreateObject("Scripting.Dictionary")
            For Each c In plage
                    If c = matricule And c.Offset(0, 6) = sem Then _
                            If Not dico.Exists(c.Offset(0, -4).Value) Then dico.Add c.Offset(0, -4).Value, c.Value
            Next c
     
        ListeCle = dico.Keys
        ListeElement = dico.Items
     
        If dico.Count >= 2 Then
                'tri dico
                For i = 0 To dico.Count - 2
                    For j = i + 1 To dico.Count - 1
                        If ListeCle(i) > ListeCle(j) Then
                            Tempo1 = ListeCle(j)
                            Tempo2 = ListeCle(j)
                            ListeElement(j) = ListeElement(i)
                            ListeElement(j) = ListeElement(i)
                            ListeElement(i) = Tempo1
                            ListeCle(i) = Tempo2
                        End If
                    Next j
                Next i
        End If
     
        datefin = ListeCle(dico.Count - 1)
     
        Select Case choix
            Case 1
                sommecollab = datedéb
            Case 2
                sommecollab = datefin
            Case 3
                sommecollab = cumul
        End Select
     
    End Function
    Soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cumul = cumul + c.Offset(0, 5)
    Je suis désolé, j'aurais du te prévenir à l'avance sur la taille de mon fichier.

  6. #26
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Je pense que tes données doivent ne pas être de présentation homogène (caractères?)

    Place ces 3 lignes juste avant la ligne que tu cites et qui tombe en erreur.
    Regarde ce que retourne la fenêtre Exécution du VBE.
    Les dernières adresses doivent pointer vers des valeurs anormales (nombre avec virgule...)

  7. #27
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Bonjour à tous,


    Et en ajoutant .value ?

  8. #28
    Membre habitué
    Homme Profil pro
    Chargé d'Ingénierie et d'Analyses en Ressources Humaines
    Inscrit en
    Novembre 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'Ingénierie et d'Analyses en Ressources Humaines
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 63
    Points : 169
    Points
    169
    Par défaut Résolution
    Bonjour à tous,

    Je m'excuse de répondre seulement maintenant, je n'ai pas pu me connecter plus tôt.

    J'ai finalement modifié la variable k et ses dépendantes en Long ce qui me permet de traiter l'ensemble de mes données.

    Pour le second problème sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cumul = cumul + c.Offset(0, 5)
    La réponse de MarcelG m'a mis la puce à l'oreille.
    Je pense que tes données doivent ne pas être de présentation homogène (caractères?)
    En effet, le logiciel sur lequel j'effectue la requête pour obtenir les données insère des lignes vides au milieu des données.
    Donc après avoir teste avec une macro qui supprime ses lignes, le problème est résolu.

    Je vous remercie donc pour votre aide.

    A bientôt,
    Chtik

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. cmt lister des lignes en fonction du mois de la date
    Par Mihalis dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/04/2007, 12h29
  2. incrémenter des lignes en fonction d'un champ "nombre"
    Par bookaro92 dans le forum Access
    Réponses: 2
    Dernier message: 01/12/2006, 15h05
  3. Recherche une ligne en fonction d'une date
    Par c+cool dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 20/09/2006, 15h30
  4. [VBA-E] Créer des lignes en fonction d'un champ
    Par antakini dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/04/2006, 20h23
  5. [vbexcel]tri ou regroupement de ligne en fonction de valeur.
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/12/2005, 18h22

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