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 :

decrementer selection chaque fois que macro est appelée


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 40
    Points : 26
    Points
    26
    Par défaut decrementer selection chaque fois que macro est appelée
    bonjour,

    j'ai un macro disons sub fonc1() qui selectionne une range par exemple de B2:B6
    for each cel in selection
    A1 prends la valeur de cel.

    j'ai un macro sub fonc2() qui appelle fonc1 onTime. et qui place disons B2 dans A1.

    ce que je veux faire en gros, appeler fonc2, avoir la valeur de B2 dans A1... puis appeler fonc2 encore une fois et avoir B3 dans A1 cette fois ci.. et ainsi de suite jusque la fin de la selection de fonc1... ceci est-il possible??

    Merci

  2. #2
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonsoir

    est ce que ce qui suit te convient?

    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
     
    Sub aa()
    For Each c In Range("B2:b6")
    [a1] = c.Value
    Attendre 5
    Next
     
    End Sub
    Function Attendre(Secondes As Integer)
    ' Cette procédure temporise pendant le nombre de secondes
    'qu'on lui transmet en argument
    'auteur inconnu
    Dim Début As Long, fin As Long, Chrono As Long
    Début = Timer
    fin = Début + Secondes
    Do Until Timer >= fin
        DoEvents
    Loop
    End Function
    salutations

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    salut,
    merci pour ta rapide reponse...
    le probleme c'est que je veux rappeler la donction aa manuellement
    pour la simple raison que une fois que ma case A1 est pleine il y a des cases qui se remplissent dynamiquement... du coup je ne sais pas combien de temps attendre... donc en gros... je mets kkchose dans A1... j'attends...que tout se fasse et je reviens plus tard pour changer la valeur de A1...
    entre tmps j'aimerais qu'il y ai decrementation au niveau de la range!!!
    pfff c affreu!!! j'y ai passe tout la journee... mais en vain!

  4. #4
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    Je ne comprend pas bien ce que tu veux faire
    Qu'entends tu par "j'aimerais qu'il y ai decrementation au niveau de la range!!!"

    par exemple pour "B2:B6"
    Quand la valeur de B2 est en A1 que tu n'est plus que les valeurs de B3:B6 qui se "déplacent" en B2:B5? Si oui dans quel but?

    As tu un classeur exemple ou des copies d'écran de ce que tu veux

    Qu'advient il des cellules qui changent dynamiquement en fonction de A1.
    Conserves tu leur valeur quelque part
    fred65200

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    salut,
    voila l'explication totale:

    j'ai un excel dynamique... (enfin on m'en a donne un quoi) qui se connecte a je ne sais pas quoi... bref...

    lorsque je mets une KEY precise dans la case A1 disont, le fichier genere pleins d'infos dans le sheet1, et creer plein de requetes SQL dans le sheet3...
    dans le sheet 2 il y a une liste de KEY
    donc au depart j'ai fait une liste deroulante dans le sheet 1, l'utilisateur choisis la KEY qu'il veut et le reste se fait tout seul...
    j'ai du ensuite creer un bouton qui execute toutes les requetes SQL... ca c bon...

    mnt on me dit...
    j'ai la fonc2 qui execute les requetes... je mets un OnTime dedans pour appeler la fonc1... cette fonc1 remplace dans sheet1!A1 la case disons sheet2!B2 apres par exemple 10secondes.
    je r'appelle fonc2, elle execute les requetes et 10 secondes apres appelle fonc1 qui elle mettra sheet2!B3 dans sheet1!A1... donc du coup la selection a decrementer!!!
    c un truc de fou je sais...
    on m;a dit que offset pourrait m'aider mais je n'ai aucune idee de comment c;est possible!!

    merci de ton aide fred, et tous les autres qui lisent c truc maxi complique...

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Que veux-tu décrémenter ? As-tu un compteur ?
    Dans quelles condition ? (Appel fonc2 ou fonc1 ?)
    Comment est lancé Fonc2 ?
    l'utilisateur choisis la KEY qu'il veut
    De quoi parles-tu ?
    Fonc1 est-elle appelée toutes les 10 secondes un fois lancée ou seulement une fois ?
    Si Fonct1 se poursuit, qu'est-ce qui arrête le timer ?
    As-tu un compteur qui te permet de décrémenter... et quoi ?
    Tes explications ne nous permettent pas de t'aider. Reprends la démarche en énumérant ce que fait ta procédure et ce qui la conditionne. Ou donne nous un code qui nous permette de comprendre.
    Si c'est un simple compteur qu'il te faut, place-le dans une feuille de calculs ou dans un contrôle (un textbox par exemple) avec Visible = false, et agit dessus chaque fois que la condition pour le modifier est remplie.
    Tu dis
    A+

  7. #7
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    Essaie ça

    [B2].Delete Shift:=xlUp

    Sinon je n'ai rien compris

  8. #8
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    bon en gros voila un bout de code que j'ai fais.... par contre l'appel de la fonction proc n'est pas prise en compte... je ne sais pas poukoi!
    j'espere queca vous aidera a me comprendre!!
    merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim proc As String
    Dim i As Long
    Sub fonc1(ByVal inc As Long)
        [sheet1!A1].Value = [sheet2!B2].Offset(inc, 0).Value
    End Sub
    Sub fonc2()
        For i = 0 To 4
            proc = "fonc1 (" & i & ")"
            fonc1 (i)
            RunWhen = TimeValue(Now + TimeSerial(0, 0, 5))
            Application.OnTime RunWhen, proc
        Next i
    End Sub

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    As-tu testé ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            Application.OnTime Now + TimeValue("00:00:05"), "fonc1 " & i

  10. #10
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    je viens juste de le faire...
    ca me dit:

    "the macro "book1!fonc1 4" cannot be found
    "the macro "book1!fonc1 3" cannot be found
    ...en etc en msg box

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Ok. Le i est pris dans le nom de la macro, non comme un paramètre
    Tu peux tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.OnTime Now + TimeValue("00:00:05"), "fonc1(" & i & ")"
    mais j'ai bien peur qu'on obtienne la même chose. Ontime ne "semble" pas accepter de paramètre pour la macro à exécuter si l'on s'en réfère aux exemples de l'aide en ligne.
    Siça ne fonctionne toujours pas, ce que tu peux faire est déclarer i en Public et d'utiliser i dans Fonc1.
    Mais utilise une autre variable que i pour qu'elle ne s'embrouille pas avec les autres procédures (i est souvent utilisé et ça pourrait troubler ces petites bêtes)
    A+

  12. #12
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    Oais ca ne marche tjs pas

    j'ai pas tres bien compris ce que tu m'as dit d'essayer...

  13. #13
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    en fait je regarde encore mon code et me dit que ce n'est peut etre pa exactement ca:
    en gros regarde cette chaine:

    je mets une valeur dans A1---> SQL s'execute automatiquement
    macro contenant le code executant SQL va appeler FONC genre 5 seconde apres avoir executer les requetes

    FONC a une selection de valeur---> elle mets une valeur ds A1
    et ainsi de suite

    je rappelle que mon excel est dynamique donc une fois A1 entree ya plein de choses qui se passe tout seul...(entre autre cree des requetes SQL)
    la valeur de A1 est une cle qui dependamment de sa valeur fait des choses differentes (dou le besoin de TOUt tester)

    en resume:

    KEY--> requetes--5secondes-> changement de cle etc..

    mon besoin la c'est de creer cette fonction qui selection une plage de valeur(no pb pour ca) et parcours cette selection... mais chaque fois qu'on l'appelle chnage de valeur (pas qu;elle parcoure tout en meme temps= une decrementation par appel)

    voila.. c plus clair?

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/09/2014, 16h57
  2. [Toutes versions] Nouveau formulaire chaque fois que procédure est modifiée?
    Par Souriane dans le forum Access
    Réponses: 8
    Dernier message: 03/07/2011, 16h24
  3. Réponses: 6
    Dernier message: 28/02/2009, 15h57
  4. Réponses: 3
    Dernier message: 23/06/2006, 10h03
  5. Réponses: 10
    Dernier message: 17/05/2006, 19h55

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