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 :

Incrémentation selon paramètres [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de batmat86
    Homme Profil pro
    Charge de clientele
    Inscrit en
    Octobre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Charge de clientele

    Informations forums :
    Inscription : Octobre 2003
    Messages : 239
    Par défaut Incrémentation selon paramètres
    Bonjour à vous,
    Je suis entrain de concevoir une matrice afin de passer via un traitement numérique, ce qui m'évitera plusieurs feuilles papier A4 par jour. Meilleur pour l'environnement et le stockage

    En pièce jointe, je vous mets une partie de mon tableau.

    J'ai donc une liste déroulante pour le champs Heure, avec une plage par 30 min pour les 24heures d'une journée, j'ai également une liste déroulante pour la file d'appel (12 files au total) et une liste déroulante Appelant (7 typologies).

    Je souhaite donc que la personne sélectionne, la demie heure voulue, la file d'appel et appelant concerné et clic sur Ajouter.

    En cliquant sur ajouter, je souhaite que cela incrémente en +1 la colonne de la file d'appel concernée, ainsi en +1 de la typologie noté en totaux.

    Cela n'est peut être pas très clair, me met le fichier capture1, qui correspond à ce qui devrait s'afficher dans le cas de l'exemple capture après appui sur Ajouter.

    Ainsi si l'on refait le même type, cela passera à 2 et 2 si même file d'appel et appel sur même heure d'appel.

    Selon moi je pense que cela doit passer via VBA car je ne pense pas que les formules excel soit suffisantes.

    Merci par avance de votre aide, cordialement.
    Images attachées Images attachées   

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Ce sera plus clair si tu mets un classeur exemple en pièce jointe ? Quel est ton niveau de connaissance de VBA ?

  3. #3
    Membre confirmé Avatar de batmat86
    Homme Profil pro
    Charge de clientele
    Inscrit en
    Octobre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Charge de clientele

    Informations forums :
    Inscription : Octobre 2003
    Messages : 239
    Par défaut
    Bonsoir, je pense que mon niveau peut être classé de débutant en VBA, voir mes anciens messages depuis des années. Par contre je sais m'adapter ayant fais 2 ans de programmation en BTS de 2003 à 2005 mais en langage C++.

    Depuis je fais que de la programmation ponctuelle selon mes besoins en C++, VBA, HTML mais rien de très compliqué.

    J'ai mis en pièce jointe le fichier complet d'où est tiré les captures de mon 1er post. Pour l'instant l'ergonomie et mise en page n'est pas faite, car c'est ce que je ferais en dernier. Puisque je me dis que mes listes déroulantes risque de passer via VBA aussi car pas sûr que ce que je souhaite faire soit possible via la validation de données comme je l'ai fait actuellement.

    Merci par avance, cordialement.
    Fichiers attachés Fichiers attachés

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bon. On va dire que tu n'es pas débutant en programmation. Tu devrais me préciser à quoi correspondent F, C, M, T, P et E. J'ai une vague idée pour certaines lettres mais pas pour toutes de toutes façons. Est-ce que "Autres en L6 correspond à "Autres de la liste "Appelant" ?

  5. #5
    Membre confirmé Avatar de batmat86
    Homme Profil pro
    Charge de clientele
    Inscrit en
    Octobre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Charge de clientele

    Informations forums :
    Inscription : Octobre 2003
    Messages : 239
    Par défaut
    Bonsoir, oui tout ce qui est dans totaux correspond à la liste déroulante Appelant. Je viens de voir que j'ai en effet inversé Autres avec Total. Autres devrait être situé avant.

    Et les différentes lettres correspondent à l'ordre de la liste déroulante Appelant.

    Famille -> F
    Personne concernée -> C
    Personnel soignant -> M (Médical)
    Prescripteur -> T (Tuteur)
    Polluant -> P
    Autres -> Autres
    E-Mut -> E

    Certaines lettres sont différentes pour distinguer la typologie, car sinon on aurait eu P pour Polluant, Prescripteur, Personne ....

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Nommes E3 par HEURE, K3 par FILE, O3 par APPELANT, D7: D56 par PLAGE, E6:L6 par LSTAPPELANT et M6:X6 par LSTFILE

    Affecte au boutons les sub Ajouter et Supprimer

    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
    Option Explicit
     
    Private Function Adresse(ByVal Hr As String, ByVal Info As String, Optional App As Boolean) As String
    Dim c As Range
    Dim Lig As Integer, Col As Integer
     
    If Hr <> "" Then
        Set c = [PLAGE].Find(Hr, LookIn:=xlValues, lookat:=xlWhole)
        If Not c Is Nothing Then
            Lig = c.Row
            Set c = Nothing
            If Info <> "" Then
                Set c = IIf(App, [LSTAPPELANT], [LSTFILE]).Find(Dimin(Info), LookIn:=xlValues, lookat:=xlWhole)
                If Not c Is Nothing Then
                    Col = c.Column
                    Set c = Nothing
                    Adresse = Cells(Lig, Col).Address
                End If
            End If
        End If
    End If
    End Function
     
    Private Function Dimin(ByVal Str As String) As String
     
    Dimin = Str
    On Error Resume Next
    Dimin = Switch(Str = "Famille", "F", Str = "Personne concernée", "C", Str = "Personnel soignant", "M", Str = "Prescripteur", "T", Str = "Polluant", "P", Str = "E-Mut", "E")
    On Error GoTo 0
    End Function
     
    Private Sub Modifier(Optional Ajout As Boolean)
    Dim OuAjouterFile As String, OuAjouterAppelant As String
     
    OuAjouterFile = Adresse([HEURE], [FILE])
    OuAjouterAppelant = Adresse([HEURE], [APPELANT], True)
     
    With Worksheets("Feuil1")
        If OuAjouterFile <> "" Then .Range(OuAjouterFile) = Val(.Range(OuAjouterFile)) + IIf(Ajout, 1, -1)
        If OuAjouterAppelant <> "" Then .Range(OuAjouterAppelant) = Val(.Range(OuAjouterAppelant)) + IIf(Ajout, 1, -1)
        [HEURE] = ""
        [FILE] = ""
        [APPELANT] = ""
    End With
    End Sub
     
     
    Sub Ajouter()
     
    Modifier True
    End Sub
     
    Sub Supprimer()
     
    Modifier
    End Sub
    PS: Au lieu de la fonction Dimin, prévoit C25:C31 les abréviations et on pourrait changer légèrement le code (les abréviations en dur dans le code n'est pas une bonne méthode)

  7. #7
    Membre confirmé Avatar de batmat86
    Homme Profil pro
    Charge de clientele
    Inscrit en
    Octobre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Charge de clientele

    Informations forums :
    Inscription : Octobre 2003
    Messages : 239
    Par défaut
    Citation Envoyé par mercatog Voir le message
    Nommes E3 par HEURE, K3 par FILE, O3 par APPELANT, D7: D56 par PLAGE, E6:L6 par LSTAPPELANT et M6:X6 par LSTFILE
    Bonsoir, merci pour la partie de code.

    Par contre pour cette partie, les nommer c'est via le code ?

    Car sinon via excel directement, je ne vois pas comment nommer une plage par un nom :s

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Car sinon via excel directement, je ne vois pas comment nommer une plage par un nom :s
    Onglet "Formules", zone "Noms définis", "Définir un nom".

  9. #9
    Membre confirmé Avatar de batmat86
    Homme Profil pro
    Charge de clientele
    Inscrit en
    Octobre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Charge de clientele

    Informations forums :
    Inscription : Octobre 2003
    Messages : 239
    Par défaut
    Bonjour, votre code fonctionne à merveille

    Merci beucoup pour l'astuce du nommage, car maintenant je pourrais faire des matrices plus "propre", car il est plus simple de voir par exemple somme de Poire et Pomme, plutôt que somme de D4 et B6 ^^

    Citation Envoyé par mercatog Voir le message
    PS: Au lieu de la fonction Dimin, prévoit C25:C31 les abréviations et on pourrait changer légèrement le code (les abréviations en dur dans le code n'est pas une bonne méthode)
    j'en déduis que cela serait la ligne 13 de ton code à changer.
    Par contre il est nécessaire de créér la liste des abréviations par exemple en C25:C31, ne serait pas possible de reprendre celle du LSTAPPELANT ?

  10. #10
    Membre confirmé Avatar de batmat86
    Homme Profil pro
    Charge de clientele
    Inscrit en
    Octobre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Charge de clientele

    Informations forums :
    Inscription : Octobre 2003
    Messages : 239
    Par défaut
    Bonjour, je me permets de faire une réponse à ce sujet.

    Car ma question de base fonctionne parfaitement, via le code donné plus haut, que j'ai pu adapté pour faire également des +1 dans d'autres tableaux de mon même fichier.

    J'aurais donc une autre question relative à ce code. Je pense qu'au final, il serait peut être plus judicieux, de faire une feuille de calcul par conseiller et non un classeur par personnes, car pour faire des sommes sur l'ensemble des personnes si tout est dans un seul classeur, cela évite les souci de liaisons de classeurs multiples que je rencontre actuellement voir :
    http://www.developpez.net/forums/d12...ntre-fichiers/

    Par contre qui dit un onglet par personne, dit un bouton Ajouter et Supprimer par onglet. Cela voudrait donc dire que je devrais faire un copier coller du code pour chacun des boutons pas onglet en attribuant des nouveaux de variable ? Sachant de j'ai pas loin de 15 onglets à prévoir, n'est il pas possible d'éviter une telle lourdeur de code ?

    Certes 56 lignes minumum de code, se n'est pas énorme, mais je pense que l'on doit pouvoir éviter de faire 56 * nb onglets via peut être une variable sur la ligne 38 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Worksheets("Feuil1")
    Qui irait cherchais le nom de la feuille active ? Enfin je ne sais pas si cela est possible.

    Merci par avance du conseil, ce qui devrait me permettre de m'orienter, car j'avoue que là je cale un peu pour éviter d'avoir un fichier qui ressemble à une usine à gaz. Cordialement.

  11. #11
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Exact
    Ecris tes codes dans un module standard en faisant une petite adaptation

  12. #12
    Membre confirmé Avatar de batmat86
    Homme Profil pro
    Charge de clientele
    Inscrit en
    Octobre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Charge de clientele

    Informations forums :
    Inscription : Octobre 2003
    Messages : 239
    Par défaut
    Bonjour,

    Je n'ai jamais utilisé de module jusqu'à présent, et après des recherches sur la FAQ, je trouve pas mal de choses sur des modules de classes mais pas grand chose sur des modules classiques

    Si vous avez une piste, je suis preneur afin de me débloquer, car je tourne un peu pour le moment.

    Cordialement.

  13. #13
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 174
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par batmat86 Voir le message
    Par contre je n'ai jamais utilisé de module jusqu'à présent, et après des recherches sur la FAQ, je trouve pas mal de choses sur des modules de classes mais pas grand chose sur des modules classiques
    Un peit coup d'oeil ici et donc après lecture, pour insérer un module dans le VBE (Visual Basic Editor) Insérer/Module
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  14. #14
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Dans le menu de ton éditeur vba, Insertion > Module.
    Tu auras ton module standard (par défaut nommés Module1, Module2....)

  15. #15
    Membre confirmé Avatar de batmat86
    Homme Profil pro
    Charge de clientele
    Inscrit en
    Octobre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Charge de clientele

    Informations forums :
    Inscription : Octobre 2003
    Messages : 239
    Par défaut
    Bonjour,
    Et bien merci en fait, il m'a suffit de mettre le code que tu m'avais indiqué mercatog au début de sujet, plus celui que j'avais ajouté pour incrémenter d'autres tableaux dans un module 1.

    Puis simplement de changer la ligne 38 de ton code par :

    Et le tour, est joué, je pensais que j'allais devoir me prendre la tête pour faire fonctionner le module ou ajouter des tonnes de boutons ou code mais, non juste à faire dupliquer chaque feuille ce qui copier également mes boutons, et juste faire ce module et petite modification à la ligne 38

    Comme quoi, on peut éviter des heures de code et des centaines de lignes quand on demande de l'aide.

    Merci bien à vous, me reste plus qu'à prévoir une feuille de somme de l'ensemble des tableaux de chaque feuille, mais là cela ne doit pas être le plus compliqué Encore merci, bonne journée, cordialement.

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

Discussions similaires

  1. [CR 2008] Critère de sélection selon paramètre
    Par Cryos dans le forum Débuter
    Réponses: 1
    Dernier message: 17/02/2011, 11h11
  2. Réponses: 6
    Dernier message: 25/10/2010, 14h27
  3. Interface graphique selon paramètres
    Par bromlecornu dans le forum Langage
    Réponses: 2
    Dernier message: 26/07/2010, 17h51
  4. Enchaînement de liens selon paramètre
    Par patricko dans le forum Langage
    Réponses: 1
    Dernier message: 09/05/2008, 09h12
  5. Réponses: 8
    Dernier message: 24/11/2006, 15h06

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