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 :

probleme sur Cells.value


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Par défaut probleme sur Cells.value
    Bonjour et meilleur voeux à tous ,


    Je sollicite votre aide pour une de mes procédures.

    J'ai un projet dans laquelle deux populations occupant des cellules différentes
    s'opposent selon la valeur de la cellule qu'ils occuppent.

    Cette valeur peut etre numérique (population cellule=1,2,3...) ou de en fonction d'un paramètre T (population 2 cellule = 1T,2T...).

    Le but étant que lorsque je fais varier le T si la valeur de la cellules de la population 2 > population 1 alors elle envahit la case de l'autre et devient un des leurs .Idem pour le cas inverse.

    J'ai essayé avec un if mais ca ne marche pa, voila ma procédure:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub iteration()
     
        Dim T As Double
        T = InputBox("Donnez le montant de la prime ")
     
        If Cells(x, y).Value = CStr(NB) & "T" > Cells(x, y).Value = NB Then
           Cells(x, y).Value = CStr(NB) & "T"
     
     
    End Sub
    Merci pour votre aide

    ps: je vous joins mon fichier.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 086
    Par défaut
    SAlut et bienvenu
    Je n'ai pas le temps de faire de teste mais appriori le faite de faire une comparaison logic sur du text ca ne fonctionnra pas "a" > "b".

    Dans ton cas je ferais plutot comme ca

    1) je controle su le 1er caractere est un T
    2)Si oui je memorise le T (TPlayeur1Present = True) -> je suppose qu'il y a 2 camps, donc a faire pour les 2 camps.
    On concerve la partie numerique uniquement -> ValueurP1
    2')Si non TPlayeur1Present = False et partie numeric -> ValeurP1

    3)Ensuite tu peux faire ta comparaison entre ValeurP1 et ValeurP2

    Pour rendre le tout simple a l'utilisation le mieux serait peut etre de faire une function Style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function P1PlusGrdP2(P1 As String, P2 As String) As Boolean
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Par défaut
    Bonjour,

    J'ai pas bien compris le test que tu me proposes de faire Qwazerty ,
    pourrais tu me le réexpliquer d'une manière un peu plus simple parce q'actuellement je rame trop.

    Merci d'avance.

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Par défaut
    Tu devrait séparer tes données dans les cellules par des espaces. De cette façon, tu pourras toujours identifier les différentes parties de la cellule avec la fonction Split.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(x,y).Value = CStr(NB) & " " & CStr(T)
    Pour ce qui est de faire des tests logiques, tu devrais te faire une fonction comme Qwaz te l'a précisé.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Par défaut
    Ca ressemble au demineur le principe

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Par défaut
    Déja cette procédure contient une erreur de compilation, x, y et NB non définis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub iteration()
     
        Dim T As Double
        T = InputBox("Donnez le montant de la prime ")
     
        If Cells(x, y).Value = CStr(NB) & "T" > Cells(x, y).Value = NB Then
           Cells(x, y).Value = CStr(NB) & "T"
     
     
    End Sub
    Ensuite essaye de décrire le test que tu veux faire

  7. #7
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    Bonjour

    Citation Envoyé par nessbeal Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub iteration()
     
        Dim T As Double
        T = InputBox("Donnez le montant de la prime ")
    Commence déjà par proscrire l’emploi de InputBox.

    Il suffit que l’utilisateur clique sur le bouton Annuler ou entre du texte (par exemple parce qu’il a fait une faute de frappe sur 1 caractère), et tu as une erreur macro.

    Contrairement à un préjugé fort répandu, il est bien plus économique en temps de se faire un UserForm avec :

    1. 1 Label,
    2. 1 TextBox,
    3. 1 bouton OK
    4. 1 bouton Annuler,

    le tout associé à un contrôle de saisie. Cet outil, facile à transférer d’un classeur à un autre, par simple glisser déposer, est universel.

    Il suffit d’initialiser le Caption du Label, éventuellement la largeur et/ou la hauteur du TextBox, et le ou les messages d'erreur.

    Un InputBox est bien plus contraignant : comme nous l’avons vu, le simple emploi du bouton Annuler provoque un plantage.

    Cordialement,

  8. #8
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Par défaut
    Bonjour ,

    Mes tentatives n'aboutissent toujours pas , ERIC 93 j'ai pris en compte ta remarque mais c'était un oubli de ma part du à un option explicit un peu plus haut .

    Pour le test que je veux faire c'est un test qui permettra de lancer une procédure dont le but est que si la valeur de la cellule des defectionnaires qui depen de la prime est supérieur à la valeur de la cellule des coopérateurs (en numérique) alors les defectionnaires envahissent les coopérateurs et ces derniers deviennent des defectionnaires et inversement.La valeur de la nouvelle case depend de la prime que je veux faire varier en fonction de T d'ou l'input Box.

    Voila j'espère que je suis claire car je rame.
    Merci beaucoup de votre depuis le début .

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Par défaut
    J'ai regardé ton fichier, c'est quoi l'option explicit ?

    Peut tu remettre le code de la procédure iteration sans erreur de compil pour essayer de comprendre ce que tu veux faire et ton problème sur le test

  10. #10
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    Re,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Cells(x, y).Value = CStr(NB) & "T" > Cells(x, y).Value = NB Then
           Cells(x, y).Value = CStr(NB) & "T"
    Tu essaies de faire quoi ?

    Dans la première instruction,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(x, y).Value = CStr(NB) & "T"
    comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(x, y).Value = NB Then
    peuvent prendre une valeur d’erreur, True ou False. Faire un test avec l’opérateur ">" paraît surprenant.

    Si tu veux comparer CStr(NB) & "T" et NB, tu dois écrire quelque chose comme

    à adapter, car le premier élément va être du texte, à moins d’écrire quelque chose comme CStr(NB & "T"), dont j’ignore à quoi cela correspond, avec cette instruction (le If ... Then), à l’intérieur d’1, voire 2 boucles imbriquées où x et y numéros de lignes et de colonnes ?) varient.

    Explique-toi un peu plus, avec moins de termes liés au contexte (défectionnaires, coopérateurs), et plus d’info sur les variables : que représentent x, y et NB ?

    En outre, la seconde instruction ne fait rien, et il manque le End If.

    Tu es complètement perdu, où ce n’est qu’un extrait du code ?

    Cordialement

  11. #11
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Par défaut
    Bonjour,

    eric93 c'était juste un oubli de ma part.

    Pour répondre à ta question Bigalo ce n'est qu'un début , la fonction nb me sert à compter le nombre de case autour de la cellule est affecté un gain si deux cellules se touchent (1 pour deux coperateurs qui se touchent) et (1t si un coop touche un def).J'ai donc besion des coordonnées des cellules d'ou l'utilisation de x et y.

    Je suis effectivement bloqué dans ma procédure à cause des formats textes et nombres.

    Le but etant de comparer la valeur des cellules des coopérateurs et des dectionnaires pour lancer la procédure itération qui prévoit l'envahissement des cooperateurs chez les defectionnaires.

    Merci , j'espère être clair je vous joins la procédure nb cell qui vient avant

    Mon but étant de faire varier t au moyen d'une input box.


    Merci , j'espère être clair je vous joins la procédure nb cell qui vient avant
    pour être plus clair.

    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
    Sub nbcell_autour(ByVal x As Long, ByVal y As Long, ByVal Size As Long)
        Dim X1 As Long, Y1 As Long, NB As Long
        For X1 = x - 1 To x + 1
            For Y1 = y - 1 To y + 1
                If Y1 > 0 And X1 > 0 And X1 <= Size And Y1 <= Size Then
                    If Cells(X1, Y1).Interior.ColorIndex = xlNone Then
                        'Coopérateur
                        NB = NB + 1
                    End If
                Else
                    'Hors plateau de jeu
                End If
            Next Y1
        Next X1
     
        If Cells(x, y).Interior.ColorIndex <> xlNone Then
            'Case de défectionnaire
            Cells(x, y).Value = CStr(NB) & "T"
        Else
            'case de coopérateur
            Cells(x, y).Value = NB
        End If
    End Sub
     
    Sub iteration()
        Dim x, y As Long
     
        Dim T As Double
        T = InputBox("Donnez le montant de la prime ")
     
        If Cells(x, y).Value = CStr(NB) & "T" > Cells(x, y).Value = NB Then
           Cells(x, y).Value = CStr(NB) & "T"
     
    End Sub

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Par défaut
    J'ai déja regardé les autres procédure, car tu as joint ton fichier au debut du post, ca dis pas ce que tu veux faire dans itération, NB n'est plus définis, tes valeurs sont dans les cellule. Et met tes bouble pour x et y même si le test marche pas

  13. #13
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Par défaut
    Bonjour ,


    Je vais essayer de péciser ma procédure itération:

    1) Créer une input box qui me demende ma prime

    2)comparer les gains des deux populations en fonction de la prime de trahison qui concerne que les defectionnaires

    3) Si gain de def > gain de coo alors cooperateur devient defectionnaire et la nouvelle case vaut le gain de def *t

    4)ou bien si gain de def < gain de coop defectionnaires devient coopérateurs la nouvelle case vaut gain de coop.

    5) Cette priocédure pourra se repeter plusieurs fois ( plusieurs coups posible)


    Voila c'est ce que j'ai écrit au départ à la main avant de commencer à taper.

    Merci j'espère être clair.

  14. #14
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 086
    Par défaut
    SAlut
    Alors j'ai pas tout saisi je bvais relir, mais il y a deja un truc qui choque

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim T As Double
    T = InputBox("Donnez le montant de la prime ")
     
    If Cells(x, y).Value = CStr(NB) & "T" > Cells(x, y).Value = NB Then
    Attention "T" ca ne represente pas ta valeur T !
    Si tu dis T=6 puis que tu met S = "T"
    S ne vaudra pas 6 mais le caractere T

    comprends tu deja cela ?

    [Edit]
    Donne nous un exemple de tableau de jeu meme reduit[/Edit]


    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

Discussions similaires

  1. [LG]Probleme sur l'identification de typage
    Par axelmeunier dans le forum Langage
    Réponses: 10
    Dernier message: 19/01/2004, 13h41
  2. Réponses: 3
    Dernier message: 07/04/2003, 20h06
  3. Probleme sur le Fields des fichiers Xmlgram
    Par Sandrine75 dans le forum XMLRAD
    Réponses: 4
    Dernier message: 20/03/2003, 17h09
  4. Probleme sur un AppendChild
    Par Toxine77 dans le forum XMLRAD
    Réponses: 3
    Dernier message: 14/03/2003, 18h25
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

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