Formule conditionnelle et textbox

Résolu
johnshark Messages postés 10 Statut Membre -  
johnshark Messages postés 10 Statut Membre -
Bonjour,
je suis débutant en VBA et je souhaiterais créer une macro permettant :
- de rechercher sur quelle ligne la valeure de la cellule de la feuille active servant de référence (située en "B2") est située sur la feuille "obs1" (colonne 1),
- insérer la valeur de la textbox1 sur la ligne (forcément supérieure à 6) en question dans la feuille "obs1" (colonne 3).

Mon code actuel qui à priori n'a pas de problème mais qui n'effectue pas l'insertion de la valeur de la textbox est le suivant :

Dim i As Long
   
    For i = 7 To n
    If Sheets("obs1").Cells(i, 1).Text = ActiveSheet.Range("B2").Text Then
    Sheets("obs1").Cells(i, 3).Value = ActiveSheet.Range("C3").Value
    End If
    Next i

End Sub


Un grand merci pour votre aide
Configuration: Windows Vista Internet Explorer 7.0

8 réponses

  1. thev Messages postés 2010 Date d'inscription   Statut Membre Dernière intervention   723
     
    en supposant que textbox1 est le nom de ta Textbox

    For Each cellule In Sheets("obs1").Range("A:A")
        If cellule.Columns(1).Text = ActiveSheet.Range("B2").Text Then
           cellule.Columns(3).Value = ActiveSheet.TextBox1.Text
        End If
    Next cellule
    
    0
  2. johnshark Messages postés 10 Statut Membre
     
    Re,
    ça ne fonctionne pas, le problème vient de cette ligne

    cellule.Columns(3).Value = ActiveSheet.TextBox1.Text


    erreur 438 : propriété ou méthode non gérée par cet objet.

    Quand j'essaie de modifier la ligne et que je mets par exemple :
    cellule.Columns(3).Value = Me.TextBox1.Text


    ça plante (ne répond pas)... mais ça marche au bout d'un certain temps.

    Est-ce une des limites d'excel dans le cadre de la programmation ou ça n'a rien à voir?

    Puis-je te demander pourquoi mon code n'allait pas ?

    Merci en tout cas
    0
  3. thev Messages postés 2010 Date d'inscription   Statut Membre Dernière intervention   723
     
    sur quelle feuille est ta textbox ?
    0
  4. johnshark Messages postés 10 Statut Membre
     
    Si je ne me trompe pas elle n'est pas liée à proprement parlé à une feuille, elle découle d'un "menu" qui fait s'ouvrir la feuille où il faut vérifier la valeur.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. thev Messages postés 2010 Date d'inscription   Statut Membre Dernière intervention   723
     
    Si le menu correspond à une fenêtre différente de celle de la feuille, c'est qu'il s'agit d'un Userform auquel la textbox appartient.
    Ton code doit donc être placé dans un événement de ce Userform et il faut alors utiliser TextBox1.Text et non
    ActiveSheet.TextBox1.Text
    0
  7. johnshark Messages postés 10 Statut Membre
     
    J'ai utilisé :

    cellule.Columns(3).Value = Me.TextBox1.Text


    ça plante (ne répond pas)... mais ça marche au bout d'un certain temps.

    Est-ce une des limites d'excel dans le cadre de la programmation ou ça n'a rien à voir?

    Merci pour ton aide
    0
  8. thev Messages postés 2010 Date d'inscription   Statut Membre Dernière intervention   723
     
    la boucle for explore toutes les lignes de la feuille, cela peut prendre un certain temps.
    Sous Excel 2003, environ 65000 lignes,
    Sous Excel 2007, plus d'1 million de lignes

    cela est beaucoup plus rapide si l'on réduit l'exploration à des cellules ne contenant par exemple que des constantes, ou si on limite la plage à la dernière cellule renseignée

    Set cellule_début = Sheets(obs1).Range("A1")
    Set cellule_fin = Sheets(obs1).Range("A:A").End(xlDown) 'dernière cellule renseignée de la colonne A

    For Each cellule In Range(cellule_début, cellule_fin)

    next cellule
    0
  9. johnshark Messages postés 10 Statut Membre
     
    D'accord, je vois un peu le problème...
    Je vais donc diminuer la recherche.
    Encore merci.

    Voici mon code final :

    For Each cellule In Sheets("obs1").Range("A7:A50")
        If cellule.Columns(1).Text = ActiveSheet.Range("B2").Text Then
           cellule.Columns(3).Value = Me.TextBox1.Text
        End If
    Next cellule
    
    End Sub
    0