Donner une valeur à une cellule

Bonjour,
je suis débutant en Macro sous excel (language VBA). J'ai une question à poser, simple pour un programmeur VBA je pense. Voyons voir si certains d'entre vous trouvent des réponses.
------
PANORAMA:
Je dispose d'une feuille excel.
Dans la colonne A , des valeurs allant de 0 à 300
Dans la colonne B, je souhaite afficher en face de chaque cellule de A une valeur.
cette valeur est
1 si A est compris entre 0 et 50
2 si A ent compris entre 50 et 300
-------
si quelqu'un à une réponse, je pense bien que j'arriverai à résoudre mon problème qui est un peu plus complexe en fait que le panorama edicté ci-dessus...^^

Merci à tous
Configuration: Windows XP Internet Explorer 6.0

18 réponses

  • Votes
  • Date
  • Date décroissante
  1. A priori il faut que tu fasses une boule qui test chaque ligne de A et tu mets le 1 ou le 0 avec un if
    1. Ca devrait ressembler a ca si j'ai bien compris et si je ne me suis pas trompé.

      For i = 1 To 65536 'nombre de ligne à contrôler
      If Range("a" & i) > 0 And Range("a" & i) <= 50 Then
      'tu écris ce que tu veux donc 1 dans la cellule ("b" & i)
      Else
      'tu écris ton 0 comme avant
      End If
      Next i
      1. Je pensais aussi à une boucle If Then else.
        Ou quelque chose du genre mais je ne sais pas l'écrire...
        Quelqu'un pourrait m'écrire les lignes pour l'exemple. Puis moi je me débrouillerai pour adapter l'exemple à mon problème...
        Merci beaucoup pour vos réponses.
        ^^
        Clément
        1. Ma macro ressemble à ça...

          -------
          Sub boucle()
          For i = 5 To 254
          If Range("a" & i) > 0 And Range("a" & i) <= 50 Then
          ("b" & i) = 0
          Else
          End If
          Next i
          End sub
          --------
          Mais cela ne fonctionne pas.
          Il doit falloir écrire correctement l'écriture dans la colonne b, ou je ne sait pas trop.
          Merci a tous de votre dérangement.
          Clem
          1. essaie ca

            Sub boucle()
            dim i as integer
            For i = 5 To 254
            If Range("a" & i) > 0 And Range("a" & i) <= 50 Then
            Range("b"&i).FormulaR1C1 = "1"
            Else
            Range("b"&i).FormulaR1C1 = "2"
            End If
            Next i
            End sub
            1. une solution parmis tant d'autres
              sub truc()
              dim i as integer
               i=5
              while range("A" & i).value<>""
              if range("A" & i).value<=50 then 
              range("B" & i).value="1"
              else 
              range("B" & i).value="2"
              wend
              end sub


              clem81: dans ton code le else n'as rien a faire là si tu ne met aucune valeur dedans
              de plus tu as dis de marquer 1 si entre 0 et 50 et marquer 2 si supérieur a 50, hors personnes ici (y compris toi) n'avez utilisé cette notation
              la norme de lecture est donc passé de 1=0 et 2=1 ?
              1. Mise en appliscation de la solution de ENARK...

                voilà ma macro
                -------------
                Sub boucle()

                'Ici, le premier intervalle de valeurs
                Dim i As Integer
                For i = 14 To 107
                If Range("m" & i) > 0 And Range("m" & i) <= 0.5 Then
                Range("n" & i).FormulaR1C1 = "1"
                Else
                End If
                Next i

                'ici je vais donner mon second intervalle de valeurs
                Dim j As Integer
                For j = 14 To 107
                If Range("m" & j) > 0.5 And Range("m" & j) <= 1 Then
                Range("n" & j).FormulaR1C1 = "2"
                Else
                Range("n" & j).FormulaR1C1 = "3"
                End If
                Next j
                End Sub

                '[0;0,5] premier intervalle de valeurs à affilier à ma seconde colonne
                '[0,5;1] second
                '[1;3] etc...

                'Résultat de ma macro: j'obtient seulement des 2 (meme pour des valuers inférieures à 0.5) et des 3...!!!

                On doit pas etre bien loin du but...
                Je vais aussi essayer l'autre solution proposée dernièrement....
                Encore une fois, merci beaucoup à vous qui prenez du temps pour m'aider, c'est vraiment sympa.
                Clem
                1. si tu as plus de 2 intervalles, c'est effectivement normale que ca ne marche pas
                  petu etre ca mais j'ai peur de m'etre emmeler les pinceaux
                  Sub boucle()

                  'Ici, le premier intervalle de valeurs
                  Dim i As Integer
                  For i = 14 To 107
                  If Range("m" & i) > 0 And Range("m" & i) <= 0.5 Then
                  Range("n" & i).FormulaR1C1 = "1"
                  Else If Range("m" & j) > 0.5 And Range("m" & j) <= 1 Then
                  Range("n" & j).FormulaR1C1 = "2"
                  Elseif Range("n" & j).FormulaR1C1 = "3"
                  End If
                  Next i
                  End Sub
                  1. j'ai juste oublié un Then a la fin de la ligne du deuxieme ElseIf et pendant que j'ai écrit je me suis rendu que j'ai mal écrit le premier. Else et if doivent etre collé: ElseIf
                    1. ça y est !! youpi ^^

                      Alors voilà le programme VBA qui est une réponse possible à mon problème, si jamais certains ont le même soucis...

                      ----
                      Dim i As Integer
                      For i = 14 To 107
                      If Range("m" & i) > 0 And Range("m" & i) <= 0.5 Then
                      Range("n" & i).FormulaR1C1 = "1"
                      ElseIf Range("m" & i) > 0.5 And Range("m" & i) <= 1 Then
                      Range("n" & i).FormulaR1C1 = "2"
                      ElseIf Range("m" & i) > 1 And Range("m" & i) <= 3 Then
                      Range("n" & i).FormulaR1C1 = "3"
                      ElseIf Range("m" & i) > 3 And Range("m" & i) <= 8 Then
                      Range("n" & i).FormulaR1C1 = "4"
                      ElseIf Range("m" & i) > 8 And Range("m" & i) <= 15 Then
                      Range("n" & i).FormulaR1C1 = "5"
                      End If
                      Next i
                      End Sub

                      ------

                      Merci beaucoup à ceux qui se sont penché sur la question.
                      Merci surtout à enark qui a eu la patience de m'aider. Je te suis redevable si jamais tu venais à avoir une question en chimie ou procédés industriels..je ferai de mon mieux pour taider ! ! !
                      Problème Résolu.

                      Bon Week end à tous.
                      1. Merci, an chimie je pourrai eventuellement me débrouiller par contre en procédés industriels, j'y penserai. A priori ca n'arrivera aps mais bon, on sait jamais. Dans ton code, tu peux aussi remplacer formulaR1C1 par value, qui est mieux et plus clair.
                        1. généralement a la place du multiple else if on utilise un select case
                          et a partir du else if ce n'est pas utile de dire que la valeur doit etre supérieur a 0.5 puisque si elle n'est pas passé dans le premier test ca veu dire qu'elle est obligatoirement supérieur
                          1. pour le select case ca c'est vrai que c'est mieux mais pour la deuxieme partie de ton message, je ne vois pas trop ce qeu tu veux dire.

                            [edit] Si en fait j'ai compris.
                            1. pour une variable a:
                              si a est strictement inférieur (<) a une valeur alors elle ne peu pas etre égal ou supérieur a cette même valeur
                              du coup dans le test, si on ne passe pas dans le test disant que a<3 alors on passera dans le test a>=3
                              1. Je viens d'éditer ce que j'avais dit, je pensais que c'était le mot ElseIf qui n'était pas obligatoire ...
                                1. de toute facon je l'ai pendant que tu ecrivais ta reponse, donc tu n'aurais pas pu la voir