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 :

Création compteur VBA [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 60
    Par défaut Création compteur VBA
    Bonjour,
    Je voudrais bien créer un compteur qui se deplace vers l'adroite, c'està dire par ex il se pointe sur le C4 et après sur le D4. Comment le faire?

    Merci

  2. #2
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 68
    Par défaut
    je pense qu'il veut parler de la foncion .Offset

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    range(selection).offset(nblignes, nbcolonnes).select
    'cela va deplacer ta selection selon les paramètres que tu rentrera
    'possibilité de mettre une variable (offset(i,0) i = i +1 pour te decaler de lignes en lignes)

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Par défaut
    Si dans ton code tu utilise une variable comme compteur ex: intVar

    tu peux utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cells( 4, intVar).select
    ça répond un peu à ta demande ?

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 60
    Par défaut
    re
    Je vous explique, je travaille sur une boucle do until
    et je veux dire do until "compteur de C4 à z4"
    compteur=compteur+1(ca va pointer sur le d4)

    j'espère que j'étais clair cette fois

    Merci encore une fois

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Par défaut
    Si ton compteur démarre à 0 le numéro de la colonne C est égal à 0+3

    Cells (numéro de ligne, numero de colonne)

    dans ton cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(4, compteur+3).select
    devrais te donner le résulat que veux

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 60
    Par défaut
    re

    merci pour vos reponses, ca commence à s'éclaircir dans mon esprit

    mais je me demande comment puis je initialiser le compteur à C4?

    merci

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Par défaut
    je pense que ce sera plus parlant avec un exemple

    essaye ce bout de code et regarde le résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub testCompteur()
    Dim compteur As Integer
    compteur = 0 'initialisation du compteur
    Do
        Cells(4, compteur + 3) = "compteur = " & compteur
        compteur = compteur + 1
    Loop While compteur < 24
    End Sub
    ensuite en modifiant quelques valeurs tu en comprendra le fonctionnement

    a+

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 60
    Par défaut
    bonjour,
    Merci pour ta reponse
    en revanche, je me demandais si tu pourrais me corriger ce code car ca s'execute mais ca donne rien comme resultat

    code:
    [
    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
    Sub test_si()
     
    Application.ScreenUpdating = False
     
        '
                Sheets("CA(PS)").Select
                Sheets("CA(PS)").Range("AE10") = ActiveCell
                CPT = 0
                Do Until CPT < 48
                    If ("E10") < ("AE9") Then
                    ActiveCell.Value = 0
                    Else
                    ActiveCell.Value = 1
                    End If
                    CPT = CPT + 1
     
                    Loop
     
    Application.ScreenUpdating = True
    End Sub

    Merci

  9. #9
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 60
    Par défaut
    Rebonjour,

    J'ai essayé le code suivant mais ça marche toujours pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      Sheets("CA(PS)").Select
                Sheets("CA(PS)").Range("AE10") = ActiveCell
                CPT = 0
                Do Until CPT = 48
                If ("E10") < ("CPT") Then
                ActiveCell.Value = 0
               Else
               ActiveCell.Value = 1
                 ActiveCell.Offset(0, 1).Select
                CPT = CPT + 1
                End If
                Loop
    S'il vous plaît aidez moi

  10. #10
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    bonjour bird007 zyhack isfet, le forum. je pense que c'est de dire le but de ta macro. la finalite c'est arriver a quel resultat sur ta feuille "CA(PS)" non???

  11. #11
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 60
    Par défaut
    Bonjour tout le monde
    Au fait, je vais vous expliquer:Je dois calculer des previsions.
    Et maintenant dans cette partie de mon code, je veux affecter des 0 au lieu des prévisions que j'ai déjà calculé dans une autre feuille
    Mais pour illustrer je voudrais avoir des 0 quand le contrat est resilié et des 1 quand il n'est pas encore resilié
    Voici ma table:

    Code analityque
    541231
    452131


    date de resiliation
    01/05/20010
    01/03/2010


    Prévisions par mois (Jan10-fev10,Mar10-avr10....)




    Donc je veux pour le premier code qu'en janvier par exemple il m'affecte 1, en fevrier 1, en mars1 en avril 1, et en mai 0


    si je ne suis pas clair dîtes le moi

    Merci pour vos efforts

  12. #12
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut bonjour le forum, bonjour laetitia
    Qu'est-ce qui change ?
    Qu'est-ce qu'il faut changer ?

    Commence par mettre en remarque les "Application.ScreenUpdating", tu verras peut-être quelque chose en intermédiaire !

    Dois faire quoi ? Mettre en AE10 la valeur de la cellule sur "CA(PS)" ?
    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
                Sheets("CA(PS)").Select
                Sheets("CA(PS)").Range("AE10") = ActiveCell          
     
                CPT = 0
                Do Until CPT < 48
     
                    'range("E10") < range("AE9") ????
                    If ("E10") < ("AE9") Then
                    ActiveCell.Value = 0
                    Else
                    ActiveCell.Value = 1
                    End If
                    CPT = CPT + 1
     
                    Loop

    ESVBA

  13. #13
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 60
    Par défaut
    Bnoujour,
    Je ne comprend pas ce que tu veux dire, mais essais d'oublier le code que j'ai redigé et tu te base sur mon dernier message.
    C'est plus clair je crois

  14. #14
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut
    Désolé, je ne comprends pas les relations avec les dates. Je dois comparé quelle colonne de quel ligne avec quelle autre cellule ?


    Une capture d'écran ?

    ESVBA

  15. #15
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 60
    Par défaut
    bonjour,
    chaque
    Code analityque
    541231
    452131
    dans mon message c'esun une colonne. donc par example on doit comparer la date de resiliation qui est 01/05/2010 à chaque fois a janvier, fevrier ; mars..., et après on aura un 0 quend on dépasse la date de résiliation.

    merci

    nb: je suis debutante dans la programmation donc excusez moi

  16. #16
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut on y arrivera pas
    je suis aussi un débutant.


    Quelle relation entre 541231 et 452131 avec la date du 01/05/2010 ?
    Pour te proposer un code, il faut savoir quoi comparer et surtout où les donnes sont dans la feuille.

    Tu as fais une boucle, oui mais à force de comparer la même chose "If ("E10") < ("AE9") Then" ca n'avancera pas ! Fait un test 48 fois !

    Les cellules se remplissent en temps réel ? (j'ai pas compris ça)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CPT = 0              'met CPT à  0
    Do Until CPT < 48          'Fait jusqu'à ce que CPT soit plus petit que 48, ce qu'il y a dans la boucle jusque LOOP  
                                     ' mais comme (CPT=0) < 48, c'est déjà terminé !!!
    CPT=CPT+1                 'Augmente CPT de 1 
    loop
    Plus plausible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Do While CPT <48   'Fait tant que CPT est inférieur à 48
    CPT=CPT+1
    Loop
    Maintenant, if faut dans la boucle faire plusieurs tests pas comparer 48 fois E10 et AE10 !

    Il faut connaitre la colonne "E10" et "AE3" ce que l'on change.

    Quel est ton algorihme ?

    Première proposition :
    si E10 est inférieur à AE9 alors je remplis 48 fois la cellule active
    Rq : Cellule active qu'il faut changer mais comment ? Où ? Dans quel sens ?

    Seconde solution (la tienne) :
    Si je n'ai pas rempli 48 fois alors si E10 plus petit que AE10 alor je mets "0" sinon "1"
    Rq : rempli 48 fois quoi ? Ca correspondant à poser 48 fois la question ! Et en + avec ce type de structure on fait varier soit "A10" soit "AE1à" soit les deux en fonction des emplacements des dates.


    A toi de dire... On ne peut rien faire pour toi.

    ESVBA

  17. #17
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Par défaut on vas essayé une nouvelle fois
    je pense avoir compris ce que tu désire, afin de faire un essai ouvre un nouveau classeur et dans la première feuille entre les valeurs suivante dans les cellules données

    les références
    Cellule A2 -> 541231
    Cellule A3 -> 452131

    les dates de résiliation
    Cellule B2 -> 01/05/2010
    Cellule B3 -> 01/03/2010

    les dates auquelles on liera 1 ou 0
    Cellule C1 -> 01/01/2010
    Cellule D1 -> 01/02/2010
    ...jusqu'en
    Cellule N1 -> 01/12/2010

    ensuite entre le code suivant et lance le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub resilier()
    Dim ligne As Integer, colonne As Integer
    For ligne = 2 To Cells(Rows.Count, 1).End(xlUp).Row
      For colonne = 3 To 14
        If Cells(1, colonne) < Cells(ligne, 2) Then
          Cells(ligne, colonne) = 1
        Else
          Cells(ligne, colonne) = 0
        End If
      Next colonne
    Next ligne
    End Sub
    cequi donne quatre sur la ligne avec la date 01/05/2010 et deux 1 pour la date 01/03/2010

    bien sur il faudra adapter à tes besoins mais est-ce que ça ressemble à ce que tu veux ?

  18. #18
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 60
    Par défaut Merci
    Bonjour;

    Au fait c'est ce que je voulais et ca marche très bien

    Merci beaucoup zyhack et toi aussi ESVBA

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

Discussions similaires

  1. Création Trait VBA
    Par erfindel dans le forum IHM
    Réponses: 4
    Dernier message: 19/02/2007, 14h03
  2. ouvrir requête en mode création via VBA
    Par fpecastaing dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 14/02/2007, 10h29
  3. Réponses: 1
    Dernier message: 17/03/2006, 18h02
  4. Formulaire, création enregistrement VBA
    Par manujuggler dans le forum Access
    Réponses: 4
    Dernier message: 05/01/2006, 13h43

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