Boucle non fonctionnellle

Résolu
GermPeru Messages postés 175 Statut Membre -  
GermPeru Messages postés 175 Statut Membre -
Bonjour a tous, bjr Forum,

Je voudrais asigné une valeur a une variable en fonction d'une valeur dúne cellule dans une autre feuille. Dans une feuille "HISTORIQUE_ACCES", dans ma colone B j'ai plusieurs valeur possible, et lorsque la derniere valeur est "CONEXIÓN" je voudrais asigné a ma variable Usuario la valeur de la colone E de la meme ligne.

Mon probleme est que cela ne fonctionne pas, ma boucle ne prends pas en compte la derniere valeur "CONEXIÓN" de la colone B et m assigne seulement a usuario la valeur de la derniere ligne de la colone E.

Je vous indique mon code.

Dim k As Integer
        DerniereLigneHistorique = Sheets("HISTORIQUE_ACCES").Range("B4").End(xlDown).Row
        Acceso = Sheets("HISTORIQUE_ACCES").Range("B4").End(xlDown).Value
            If Acceso <> "CONEXIÓN" Then
                 For k = DerniereLigneHistorique To 4 Step -1
                     If Sheets("HISTORIQUE_ACCES").Cells(2, k) = "CONEXIÓN" Then
                     Usuario = Sheets("HISTORIQUE_ACCES").Cells(2, k).Offset(0, 3).Value
                     End If
                 Next k
             Else
             Usuario = Sheets("HISTORIQUE_ACCES").Range("B4").End(xlDown).Offset(0, 3).Value
             End If


Merci d'avance de voter aide, pcq la j'en ai besoin !

1 réponse

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    La deja, y a qu'une feuille !

    ma boucle ne prends pas en compte
    Vous bouclez sur des colonne, pas sur des lignes

    usuario la valeur de la derniere ligne de la colone E.
    Par quelle miracle, car du point de vu du code vois pas comment ou vous ne nous dites pas tout?
    1
    1. GermPeru Messages postés 175 Statut Membre
       
      Je reprends la valeur de usuario pour le remettre dans une autre feuille, de la maniere suivante:

      Dim i As Integer
              i = Sheets("Historico").Cells(Rows.Count, 1).End(xlUp).Row + 1
                  ' autres valeur non utiles a la question...
                  ThisWorkbook.Sheets("Historico").Cells(i, 16) = Usuario


      Ensuite vous me dites que je boucle sur des colones, je ne suis pas sur de moi pourtant je boucle avec DerniereLigneHistorique qui est definit en .row; donc je pensais boucler a partir de ma derniere ligne puis remonter... ou alors je dois mettre un .count; et non .row ou les 2... un peu perdu

      DerniereLigneHistorique = Sheets("HISTORIQUE_ACCES").Range("B4").End(xlDown).Row


      Du coup je voudrais que lorsque ds ma colone B ma derniere valeur est "CONEXIÓN" asigné a usuario la valeur de ma colone E de la meme ligne.

      Jéspere avoir était plus clair dans mon pb.

      Merci du temps consacré f894009 :)
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > GermPeru Messages postés 175 Statut Membre
       
      Re,
      k dans boucle pour cells(2,k) c'est la colonne pas la ligne
      0
    3. GermPeru Messages postés 175 Statut Membre > f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention  
       
      Debutant que je suis....

      Je n'avez pas saisi a ma premiere lecture.

      Mon pb apres etait qu'il mindiquait en usuario la premiere valeur de la colone et non la derniere, jái donc interverti les donnees de ma boucle.

      Dim k As Integer
              DerniereLigneHistorique = Sheets("HISTORIQUE_ACCES").Range("B4").End(xlDown).Row
              Acceso = Sheets("HISTORIQUE_ACCES").Range("B4").End(xlDown).Value
                  If Acceso <> "CONEXIÓN" Then
                       For k = 4 To DerniereLigneHistorique Step 1
                           If Sheets("HISTORIQUE_ACCES").Cells(k, 2).Value = "CONEXIÓN" Then
                           Usuario = Sheets("HISTORIQUE_ACCES").Cells(k, 5).Value
                           End If
                       Next k
                   Else
                   Usuario = Sheets("HISTORIQUE_ACCES").Range("B4").End(xlDown).Offset(0, 3).Value
                   End If


      J´ai donc une question est ce qu'il est possible de bloquer le code lorsqu´il trouve la valeur indiqué et nnon qu´il balaye toute la colone, je pense a ca pour optimiser la lecture du code au cas ou le code fasse 1000 lignes.

      Dans tous les cas merci f894009
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > GermPeru Messages postés 175 Statut Membre
       
      Bonjour,

      Si une seule occurrence de "CONEXION" en colonne 2 de la feuille HISTORIQUE_ACCES, utilise la méthode find plutôt que de boucler sur toutes les lignes.

      Dim Trouve As Range
        With Sheets("HISTORIQUE_ACCES")
              Acceso = .Range("B4").End(xlDown).Value
              If Acceso <> "CONEXIÓN" Then
                  Set Trouve = .Columns(2).Cells.Find("CONEXIÓN")
                  If Trouve Is Nothing Then
                      Usuario = .Range("B4").End(xlDown).Offset(0, 3).Value
                  Else
                      Usuario = Trouve.Offset(0, 3).Value
                  End If
              End If
        End With


      EDIT : sinon, pour ta question, il convient d'utiliser Exit For pour sortir d'une boucle :
      For k = 4 To DerniereLigneHistorique Step 1
        If Sheets("HISTORIQUE_ACCES").Cells(k, 2).Value = "CONEXIÓN" Then
          Usuario = Sheets("HISTORIQUE_ACCES").Cells(k, 5).Value
          Exit For
        End If
      Next
      'le Exit For t'amène ici

      ou Exit Sub pour quitter une procédure :
      If Sheets("HISTORIQUE_ACCES").Cells(k, 2).Value = "CONEXIÓN" Then
          Usuario = Sheets("HISTORIQUE_ACCES").Cells(k, 5).Value
          Exit Sub
      End If
      0
    5. GermPeru Messages postés 175 Statut Membre > pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Super!
      Dans mon cas il y a plusieurs fois le mot "CONEXIÓN", mais je voulais juste le dernier de la colone, donc si je pars de la fin de la colone puis si je remonte en utilisant exit for ca devrait fonctionner. J essaie de suite!!
      Merci pour ces precieuses informations qui aide vachement a la comprehension de la logique pour créer un code!
      0