Demande aide urgente

ducobave Messages postés 7 Date d'inscription samedi 28 octobre 2006 Statut Membre Dernière intervention 10 janvier 2007 - 11 déc. 2006 à 19:45
ducobave Messages postés 7 Date d'inscription samedi 28 octobre 2006 Statut Membre Dernière intervention 10 janvier 2007 - 12 déc. 2006 à 20:05
Bonjour,
Je suis tout nouveau et completement débutant et je fais un bts informatique réseaux, le pbl c'est
qu'on doit écrire un ptit programme sur excel et je n'y connai rien. Le pgm doit demander a l'utilisateur de rentrer une valeur qui sera le pas, puis une autre valeur qui sera la valeur maxi. Le programme devra afficher toute les valeurs entre 0 et la valeur maxi avec la valeur du pas pour intervalle. Les resultats doivent etre affichés dans la colone "A" d'excel et commencer a 0 a partir de la ligne 5.Ensuite le programme demande a l'utilisateur d'entrer une valeur au hasard, si la valeur n'existe pas un msgbox s'affiche et dit : "La valeur n'existe pas" et si elle existe le pgm devra réécrire cette valeur dans la colone "B" sur la meme ligne mais d'une couleur differente. Avec de l'aide j'ai pu avoir ca mais ca ne marche pas, quelqu'un peut-il m'aider???
Mon PGM :

Sub Bouton1_QuandClic()
Dim pas, max, ligne, colone, valeur, valeurb As Integer
Dim ref, refdest As String

    pas = InputBox("Entrez le pas")
    max = InputBox("Entrez la valeur maxi")
   
    ligne = 5
    valeur = 0
    colone = "A"
        While valeur <= maxi
            ref = "A" & CStr(ligne)
            valeur = cells(ref).Value
            ligne = ligne + 1
            valeur = valeur + pas
        Wend
   
    valeurb = InputBox("Entrez une valeur a charcher")
   
    ligne = 5
    colone = "A"
    valeur = 0
       
        While valeur <= max And valeur <> valeurb
            ref = "A" & CStr(ligne)
            valeur = cells(ref).Value
            ligne = ligne + 1
        Wend
       
       
            If valeur = valeurb Then
                ligne = ligne - 1
                refdest = "B" & CStr(ligne)
                cells(refdest).Value = cells(ref).Value
                cells(refdest).Color = red
            Else
                MsgBox ("La valeur n'existe pas !")
            End If
           
End Sub

Merci de me venir en aide, avant jeudi si possible, merci

5 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
11 déc. 2006 à 20:53
Ton problème vient du mot clé Cells.

Il y a 2 manières d'adresser une cellule
- soit par son "nom"  par exemple "A1"
- soit par sa ligne et colonne

Cells utilise le format ligne colonne. Pour l'adressage par nom il faut passer par Range.

Je te corrige la première boucle, tu fera les autres si tu as compris :

Donc 2 possibilités :
   ligne = 5
    valeur = 0
    colone = "A"
        While valeur <= maxi
            ref = "A" & CStr(ligne)
            <strike>valeur = cells(ref).Value</strike>
            valeur = Range(ref).Value
            ligne = ligne + 1
            valeur = valeur + pas
        Wend

Ou alors :
    ligne = 5
    valeur = 0
    <strike>colone = "A"</strike>
    colone = 1
        While valeur <= maxi
            <strike>ref = "A" & CStr(ligne)</strike>
            <strike>valeur = cells(ref).Value
</strike>            valeur = cells(ligne,colone).Value<strike>
</strike>            ligne = ligne + 1
            valeur = valeur + pas
        Wend

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
11 déc. 2006 à 21:27
Bon en fait je me suis un peu emballer tout à l'heure. Tu as d'autres erreurs.

Du coup, j'ai corrigé tout le code. Même si ce n'est peut-etre pas le meilleurs code qu'on puisse faire, j'ai gardé ton code pour que tu puisse voir les différences.

Dim pas As Integer, max As Integer, ligne As Integer
Dim valeur As Integer, valeurb As Integer
Dim ref As String, refdest As String, colone As String

pas = InputBox("Entrez le pas")
max = InputBox("Entrez la valeur maxi")

ligne = 5
valeur = 0
colone = "A"
While valeur <= max
    ref = "A" & CStr(ligne)
    Range(ref).Value = valeur
    ligne = ligne + 1
    valeur = valeur + pas
Wend

valeurb = InputBox("Entrez une valeur a charcher")

ligne = 5
colone = "A"
valeur = 0

While valeur < max And valeur <> valeurb
    ref = "A" & CStr(ligne)
    valeur = Range(ref).Value
    ligne = ligne + 1
Wend

If valeur = valeurb Then
    ligne = ligne - 1
    refdest = "B" & CStr(ligne)
    Range(refdest).Value = Range(ref).Value
    Range(refdest).Interior.Color = vbRed
Else
    MsgBox ("La valeur n'existe pas !")
End If

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
ducobave Messages postés 7 Date d'inscription samedi 28 octobre 2006 Statut Membre Dernière intervention 10 janvier 2007
12 déc. 2006 à 09:32
Franchement merci beaucoup, je ne savais pas comment m'en sortir!
Tu a dis que ce n'est pas le meilleur des codes que l'on puisse faire, y a t il un code
plus court ou plus simple?
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
12 déc. 2006 à 12:03
Plus court, il y a ... dans le sens où on peut se passer des variables de référence pour les passer directement en argument des Range, et parce que l'on peut supprimer un certain nombre de compteurs du code de Casy.
Après plus simple, pas forcément ^^. Ca dépend si tu veux dire plus simple à lire ou à comprendre. Mais on peut toujorus faire différent. Voilà comment j'ai fait personnellement :

'Définition des variables
Dim Pas As Integer, Max As Integer, Colonne As Integer, Valeur As Integer, ValeurB As Integer
Dim LigneDépart As Integer, DernièreLigne As Integer, Ligne As Integer



'Initialisation des variables
LigneDépart = 5
Colonne = 1



'Remplissage de la colonne A
Pas = InputBox("Entrez le pas")
Max = InputBox("Entrez la valeur maxi")


Ligne = LigneDépart
For Valeur = 0 To Max Step Pas
    Cells(Ligne, Colonne).Value = Valeur
    Ligne = Ligne + 1
Next Valeur


DernièreLigne = Cells(LigneDépart, Colonne).End(xlDown).Rows + LigneDépart



'Recherche d'une valeur B
ValeurB = InputBox("Entrez une valeur à chercher")


If ValeurB < 0 Or ValeurB > Max Then
    MsgBox "La valeur n'existe pas."
    Else
    For Ligne = LigneDépart To DernièreLigne Step 1
    Valeur = Cells(Ligne, Colonne).Value
    If Valeur = ValeurB Then
        Cells(Ligne, Colonne + 1).Value = Cells(Ligne, Colonne).Value
        Cells(Ligne, Colonne + 1).Interior.Color = vbRed
        Exit Sub
    End If
    Next Ligne
    MsgBox "La valeur n'existe pas."
End If

Ca ne fonctionne pas mieux ou moins bien, c'est juste une autre façon de faire.

Molenn
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ducobave Messages postés 7 Date d'inscription samedi 28 octobre 2006 Statut Membre Dernière intervention 10 janvier 2007
12 déc. 2006 à 20:05
Encore merci pour ton aide qui m'est precieuse (pour mes cours) et même pour moi,
je reviendrai surement poser quelques questions parce que cette partie la de l'informatique c'est pas trop mon truc, merci et bonne soirée!
0
Rejoignez-nous