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 :

ScrollArea et Selection de Cellules


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2013
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 73
    Par défaut ScrollArea et Selection de Cellules
    je me présente, j'ai 28 ans, je suis fortement intéressé pour en savoir plus sur la "conception" de macro qui me facilite la saisies d'informations : )

    Je rencontre un problème.

    Le voici :

    J'ai crée un tableau avec 10 colonnes et 6000 lignes. Chaque colonnes a son entêtes (colonne A : Date, colonne B : Heure, colonne C : Nom ...)

    Il s'agit d'un tableau que j'ai partagé sur un serveur. 10 utilisateurs ouvrent ce fichier le matin.

    J'ai crée un petit UserForm qui s'ouvre au lancement du fichier. Chaque utilisateurs (utilisateur 1, utilisateur 2...) s'identifie sur l'UserForm en sélectionnant sur son numéro attitré et valide.

    Cette action de "valider" déclenche une macro que j'ai crée (avec scrollarea) Ainsi en fonction de la sélection dans l'UserForm (utilisateur 1, utilisateur 2...), une plage de cellules (définie, exemple A3:J100, exemple, A101:J300) est attitré à l'utilisateur qui viens de valider. Chaque utilisateurs a sa plage.

    Une fois sur le tableau, chaque utilisateurs qui reçoit un appel clique sur un petit bouton que j'ai crée, une macro se lance et note la date dans la cellule active , puis se décale de +1 à droite ( par offset) et note l'heure.

    Les utilisateurs sont donc obligé de se placer manuellement sur une cellule (autorisé par le scrollarea) de la colonne A (appelée "dates" avant de cliquer sur le bouton).

    Ce que je n'arrive pas à faire c'est automatiser le fais que lorsque un utilisateur clique sur le bouton, la date et l'heure s'affichent en se plaçant tout seul sur la première cellule vide de sa plage de cellule "autorisé" par scrollarea et ceux pour chaque utilisateurs.

    En espérant vraiment avoir été clair.

    Je vous remercie d'avance pour votre soutien ! : )

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Demo()
        Set Col = Range(ActiveSheet.ScrollArea).Columns(1).Cells
        Set Cel = Col(Col.Count)(2).End(xlUp):  If Cel.Row < Col(1).Row Then Set Cel = Col(1)
        If Cel.Value > "" Then If Cel.Row < Col(Col.Count).Row Then Set Cel = Cel(2) Else Beep: Exit Sub
        Cel.Value = Date:  Cel.Offset(, 1).Value = Time:  Cel.Offset(, 2).Select
    End Sub

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2013
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 73
    Par défaut
    Bravo Marc-L. Cela fonctionne exactement comme je le souhaitais. Merci, merci et merci.

    D'autre part je rencontre un autre problème que je n'arrive pas à résoudre ( je ne sais pas si je doit créer une nouvelle discussion ).

    Sur ce même tableau en A1 j'ai une cellule qui fais office de compteur ( j'ai une colonne caché qui dans chaque cellules affiche 1 si la cellules de droite de la colonne "Dates" est rempli.

    Puis par une formule basique je compte combien j'ai de cellules qui comporte la "1".

    Mais ... ce compteur comptabilise sur toutes les ScrollArea. En effet, si l'utilisateur 1 prend un appel, la colonne caché s’incrémente, si l'utilisateur 2 prend un appel, la colonne caché s’incrémente (puisque nous sommes sur le même classeur, partagé)...Le résultat est donc 2 alors que chaqun n'a pris que 1 appel ( et c'est cette information que je souhaite afficher à l'utilisateur)

    Hum, alors comment faire un compteur individuel ?? Je présumé que je doit aussi utiliser :

    Set Col = Range(ActiveSheet.ScrollArea).Columns(1).Cells

    Mais alors la je bloque complètement.

    Et d'avance merci, une fois de plus.

    A bientôt.

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Pas besoin d'une colonne cachée pour calculer le nombre de saisie numérique !

    Exemple de formule d'une cellule calculant le nombre de cellules saisies dans une plage : =NB(B3:B100)


    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …


    __________________________________________________________________________________________
    Quelle époque terrible que celle où des idiots dirigent des aveugles. (Shakespeare)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2013
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 73
    Par défaut
    Oui effectivement, j'ai testé et çà marche aussi très bien.

    Mais du coup commet faire une compteur personnalisé ??
    C'est là que je bloque. NB(A1:A6000), c'est nikel mais il me donne le résultat "globale". Et je cherche que le résultat soit le nombre de cellules "Dates" remplies de la Scrollaera de l'utilisateur qui est sur le tableau.

    Hum je ne suis peut être pas assez clair.

    Merci merci et merci beaucoup !!

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Ne peux-tu pas directement affecter une cellule par plage au lieu de forcément le faire en VBA ?


    __________________________________________________________________________________________
    On ne dit pas une biroute mais une route à deux voies …

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2013
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 73
    Par défaut
    Absolument Marc-L c'est possible mais j'ai 20 utilisateurs ... Ce qui fais 20 cellules à prévoir, puis les "autres" utilisateurs vont voir dans la cellule attitré à chaque scrollaera le résultat de chacun (si je dit A1 = résultat pour l'utilisateur 1 et A2 = résultat pour l'utilisateur 2 alors l'utilisateur 1 va voir la cellule A2)

    En faite je voulais une seule cellule commune mais qui donne le résultat individuellement.

    J'ai trouvé un début de réponse, en combinant ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Demo()
        Set Col = Range(ActiveSheet.ScrollArea).Columns(1).Cells
        Set cel = Col(Col.Count)(2).End(xlUp):  If cel.Row < Col(1).Row Then Set cel = Col(1)
        If cel.Value > "" Then If cel.Row < Col(Col.Count).Row Then Set cel = cel(2) Else Beep: Exit Sub
        cel.Value = Date:  cel.Offset(, 1).Value = Time:  cel.Offset(, 2).Select
     
    n = 0
    For Each cell In Range(ActiveSheet.ScrollArea).Columns(1).Cells
    If cell.Value <> "" Then n = n + 1
    Next cell
    Range("o1") = n
     
    End Sub
    çà marche .... sauf dès que l'un des "utilisateurs" va enregistrer, car il s'agit d'un classeur partagé, çà va "foirer" ... (comment contourner ? tel est la question)

    Hum dur dur lol : )

  8. #8
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Sinon ce n'est pas difficile en VBA : Application.Count(Range(ActiveSheet.ScrollArea).Columns(1).Cells)


    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …


    __________________________________________________________________________________________
    Les bourses ne témoignent pas l'état des économies, mais de la psychologie des investisseurs ! (Françoise Giroud)

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2013
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 73
    Par défaut
    Hum ... çà ne donne rien.

    Ou alors je ne l'utilise pas comme il se doit.

    En tout cas merci pour ton aide, génial.

    "En faite je voulais une seule cellule commune mais qui donne le résultat individuellement."

    Je me dit en faite que ce-ci est surement impossible (du moins si çà marche avec mon code, mais dès le premier enregistrement des utilisateurs, il demande "d'accepter les modifications ou celles des autres" et donc le résultat ne veux plus rien dire.

    Voilà j'ai trouver une solution, si çà peut servir sait-on jamais :

    J'ai incoporer une textbox sur mon tableau puis :

    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
    sub demo()
     
        Set Col = Range(ActiveSheet.ScrollArea).Columns(3).Cells
        Set cel = Col(Col.Count)(2).End(xlUp):  If cel.Row < Col(3).Row Then Set cel = Col(3)
        If cel.Value > "" Then If cel.Row < Col(Col.Count).Row Then Set cel = cel(2) Else Beep: Exit Sub
        cel.Value = Date:  cel.Offset(, 1).Value = Time:  cel.Offset(, 2).Select
     
    n = 0
    For Each cell In Range(ActiveSheet.ScrollArea).Columns(3).Cells
    If cell.Value <> "" Then n = n + 1
    Next cell
     
    Worksheets("Feuil1").TextBox2.Value = n
     
     
    End Sub
    Ainsi la textbox affiche pour chaque utilisateur le comptage individuel et l'enregistrement ne pose pas de problème.

    Merci Marc-L.

  10. #10
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Sinon [O1].Formula = "=COUNT(" & Range(ActiveSheet.ScrollArea).Columns(1).Address(False, False) & ")"


    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …


  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2013
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 73
    Par défaut
    Je ré-ouvre le sujet car j'ai une autre une autre question sur les scrollarea :

    Existe-t-il un moyen que chaque utilisateurs qui arrivent sur sa scrollarea ne voient pas les autres lignes qui ne font pas partie de son aire autorisée ?

    Sachant que tout les utilisateurs doivent voir en plus de leurs scrollarea, les lignes 1,2 et 3 de mon tableau.

    Autre question, j'ai un compteur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    n = 0
    For Each cell In Range(ActiveSheet.ScrollArea).Columns(1).Cells
    If cell.Value = date Then n = n + 1
    Next cell
    Mais en faite je voudrais que : si en colonne 1, j'ai la date dans une cellule et que dans la cellule de la même ligne mais en colonne 6 je n'ai rien (cellule vide) je compte +1.

    En espérant avoir toujours été clair !!

    Merci à vous : )

  12. #12
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            If cell.Value = Date Then n = n + 1 - (cell.Offset(, 5).Value = "")
    Si cela ne convient pas, un exemple clair serait nécessaire …

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2013
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 73
    Par défaut
    Bonjour Marc-L,

    En tout cas merci, grâce à toi mon projet avance pas mal lol : )

    Imaginons en A5 j'ai la date du jour, en A6 j'ai aussi la date du jour, et en A7 j'ai aussi la date du jour.

    En F5 j'ai une cellule rempli (c'est écrit "ok"), en F6 la cellule est vide et en F7 la cellule est vide aussi.

    Mon résultat doit être 2 ( car 2 cellules vide en F, avec la date du jour en "face").

    Hum pas évident d'être clai. Voilà.


    Et pour les scrollarea, tu a une idée ?

    Merci bcp.

  14. #14
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    A part cacher les lignes …


    If
    cell.Value = Date And cell.Offset(, 5).Value = "" Then n = n + 1




    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …


    __________________________________________________________________________________________
    Il n'y a pas que les aigles qui atteignent les sommets, les escargots aussi mais ils en bavent !

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2013
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 73
    Par défaut
    Bingo !

    Raaaa il me manqué encore l'idée de l'offset !!

    Bon par contre pour les scroll rien ne marche : (

    OK et tu voit un moyen de cacher les lignes autre que celle du scroll area et les lignes 1,2,3 ?

    Hidden ?

  16. #16
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Oui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                   Rows("4:" & Rows.Count).Hidden = True
        Range(ActiveSheet.ScrollArea).Rows.Hidden = False

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2013
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 73
    Par défaut
    merci, mon "produit" est fini : )

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2013
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 73
    Par défaut
    Re finalement il y a un probleme

    Lorsque le fichier excel est partarge et que chacun se logue, je n'arrive pas a cacher toutes les lignes, exceptés les lignes 1 2 3 et 4 et le scrollarea de l'utilisateur qui vient de se loguer. J'ai essayé pas mal de trucs mais rien ne marche

    Merciii !

  19. #19
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Désolé, je ne suis pas en mesure de reproduire ton souci …

    Comme ce sujet est marqué résolu, peu de personnes vont s'y intéresser,
    le mieux est donc d'en ouvrir un nouveau en y étant clair et précis.

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

Discussions similaires

  1. interdir un selection des cellules StringGrid
    Par fomazou dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/12/2006, 14h19
  2. Pb de selection de cellule pour mettre en couleur
    Par Dexor dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 24/08/2006, 17h47
  3. Lancer une procedure par selection de cellule
    Par Kaory dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 19/06/2006, 18h04
  4. [VBA-E]deplacer une selection de cellules
    Par richou dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/03/2006, 13h50
  5. [VBA-E]Interdire la selection de cellule dans une feuille
    Par Tartenpion dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/03/2006, 00h24

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