Pb boucle For - Excel VBA

Résolu
Ian Curtis -  
Polux31 Messages postés 7219 Statut Membre -
Bonjour à tous,

J'ai un petit problème dans mon programme en VBA, lorsque je l'execute, le programme ne bug pas mais il ne fonctionne pas pour autant.
En faite, j'ai un tableau Excel dans lequel je voudrais balayer toutes les lignes de la colonne "C", dès qu'une ligne comporte une valeur différente d'un entier compris entre 1 à 99, la valeur de cette cellule doit être remplacer par la cellule voisine de la colonne "D".
Je pense que le problème vient de cette boucle "For y = 1 To y = 99
Next y"

Voici ci dessous le programme complet

Dim Cell As Range
Dim x As Integer
Dim y As Integer
x = 7
y = 1

For Each Cell In Range("c7:c1000")
x = x + 1

For y = 1 To y = 99
If Cell.Value = y Then Cell.Value = Cells(x, 4)
Next y

Next Cell
End Sub


Merci d'avance
Cordialement Ian Curtis
Configuration: Windows XP
Internet Explorer 6.0

10 réponses

  1. Frappe Misere Messages postés 2702 Statut Membre 568
     
    essaie avec :
    if Cell.Value >0 and Cell.Value <100
    à la place de ton for.
    0
    1. Ian Curtis
       
      Bonjour FrappeMisère,

      Je tenais à te remercier pour ta réponse, en effet ça fonctionne nettement mieux, par contre, je n'ai pas pris la bonne direction dans mon raisonnement. En faite, pour être vraiment précis, c'est que dès qu'une cellule dans ma colonne "C" comporte un chiffre à Virgule (et non plus un entier) celui-ci doit être remplacé par la valeur de la cellule voisine en colonne "D"


      Il me faudrait donc un truc dans ce genre :

      if Cell.Value Not integer Then Cell.Value = Cells(x, 4)


      Merci d'avance
      Cordialement Ian Curtis
      0
  2. Frappe Misere Messages postés 2702 Statut Membre 568
     
    if Cell.Value like *.* then...
    là j'ai mis le point, mais si tu utilises la virgule, tu as juste à remplacer.
    0
    1. Ian Curtis
       
      Encore merci pour ton aide,

      Alors, j'ai testé avec ta ligne "if Cell.Value like *.*" mais le compilateur me renvoi une erreur de Syntaxe avec l'étoile (*).

      Bizarre....

      Sinon J'utilise bien le point à la place de la virgule.
      0
      1. Frappe Misere Messages postés 2702 Statut Membre 568 > Ian Curtis
         
        j'ai peut etre oublié les "
        essaie avec "*.*"
        0
  3. Ian Curtis
     
    Au faite, je n'ai pas touché à mon "for", j'ai directement remplacé mon "If" par la ligne que tu m'a conseillé, voici le prog actuel :

    Dim Cell As Range
    Dim x As Integer
    Dim y As Integer
    x = 7

    For Each Cell In Range("c7:c1000")
    x = x + 1

    If Cell.Value > 0 And Cell.Value < 100 Then Cell.Value = Cells(x, 4)

    Next Cell
    End Sub
    0
  4. Polux31 Messages postés 7219 Statut Membre 1 204
     
    bonjour,

    pour info : la syntaxe d'une boucle For ... Next est :
    For i = 0 to 99
          a = a + i
    Next i

    Ici a = 100 à la fin de la boucle.

    ;o)

    polux
    0
    1. Ian Curtis
       
      Merci Polux pour ta réponse, j'ai de nouveau tentais d'ajouter une boucle For avec incrémentation et mon programme fonctionne.

      par contre, c'est l'inverse qui doit se produire c'est à dire que si ma cellule comporte un chiffre différent d'un entier compris entre 1 et 99 dans ce cas la valeur de cette cellule doit être remplacée par la valeur de la cellule en colonne D

      Dim Cell As Range
      Dim x As Integer
      Dim y As Integer
      x = 7
      y = 0

      For Each Cell In Range("c7:c1000")
      x = x + 1
      For y = 0 To 99
      a = a + y


      If Cell.Value = y Then Cell.Value = y
      else Cells(x, 4)

      Next y

      Next Cell
      End Sub




      J'ai modifié la partie souligné mais je ne connais pas la structure exacte

      Grand grand Merci à vous
      0
    2. Ian Curtis
       
      Oupssss petite erreur dans mon if (par contre ça ne marche pas pour autant):

      If Cell.Value = y Then Cell.Value = y
      Else: Cell.Value = Cells(x, 4)


      (J'ai tellement pas l'habitude de programmer que j'ai tendance à m'embrouiller l'esprit)
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Frappe Misere Messages postés 2702 Statut Membre 568
     
    laisse la boucle for de coté, tu n'en as pas besoin pour ce que tu veux faire.
    0
    1. Ian Curtis
       
      Ok, Je suis retourner sur ma 1ère version mais comme je te disais tout à l'heure, le compilateur me renvoi une erreur sur cette ligne "If Cell.Value like *.* Then Cell.Value = Cells(x, 4)".

      (Encore merci pour ton aide)
      0
  7. Frappe Misere Messages postés 2702 Statut Membre 568
     
    meme avec des " ?
    If Cell.Value like "*.*" then...
    0
  8. Frappe Misere Messages postés 2702 Statut Membre 568
     
    Sub nom_que_tu_veux()
    Dim Cell As Range
    Dim x As Integer
    x = 7

    For Each Cell In Range("c7:c1000")

    If Cell.Value Like "*.*" Then Cell.Value = Cells(x, 4)
    x = x + 1

    Next Cell
    End Sub

    et elle fonctionne.
    0
    1. Ian Curtis
       
      Désolé FrappeMisère de ne pas avoir pus te répondre plus tôt. Alors j'ai essayé avec les guillemets et ça fonctionne.

      C'est nickel

      Je tiens donc à te remercier pour ton aide bien précieuse.

      Cordialement
      Ian Curtis
      0
    2. Ian Curtis
       
      Excuse moi FrappeMisère de te déranger avec ça mais j'ai une dernière question (c'est bien la dernière question, promis)

      En faite j'aimerai modifier les cellules d'une autre colonne

      Voici le programme actuel :

      Dim Cell As Range
      Dim x As Integer
      Dim y As Integer
      x = 1


      For Each Cell In Range("c1:c1000")


      If Cell.Value Like "*.*" Then Cell.Value = Cells(x, 5)
      x = x + 1



      Next Cell
      End Sub



      J'aimerai modifier les cellules de la colonne B mais je ne sais pas si c'est possible voici en gras l'élément que j'ai modifié mais vu que je ne connais pas la syntaxe ça ne peut pas marcher :

      If Cell.Value Like "*.*" Then Cell.Value.cells(x, 2) = Cells(x, 5)
      x = x + 1

      Encore Merci
      Cordialement Ian Curtis
      0
  9. Frappe Misere Messages postés 2702 Statut Membre 568
     
    If Cell.Value Like "*.*" Then Cells(x, 5) = Cells(x, 4)
    0
    1. Ian Curtis
       
      C'est good, ça fonctionne parfaitement

      Encore merci

      Bonne fin d'après-midi

      Cordialement
      Ian Curtis
      0
  10. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    Il faut écrire la boucle de recherche dans une fonction qui renvoie True si elle trouve les 2 mots ou False si elle ne trouve pas :
    Private Sub CommandButton1_Click() 
    Dim Cible As String 
    
    Cible1 = TextBox1.Text 
    Cible2 = TextBox2.Text 
    
    If SearchMot(Cible1, Cible2) = True Then
        MsgBox "Oui"
    Else
        MsgBox "non"
    End If
    End Sub
    
    Private Function SearchMot(ByVal c1 As String, ByVal c2 As String) As Boolean
    Dim i As Long
    
    For i = 1 To Rows.Count 
        If (InStr(Cible1, Cells(i, 1)) = 1) And (InStr(Cible2, Cells(i, 2)) = 1) Then 
             SearchMot = True
             Exit Function
        Else
             SearchMot = False
        End If 
    Next i
    End Function


    ;o)

    Polux
    0
  11. Polux31 Messages postés 7219 Statut Membre 1 204
     
    oups erreur de post ... :-s ..
    0