Boucle non fonctionnellle

Résolu
GermPeru Messages postés 172 Date d'inscription   Statut Membre Dernière intervention   -  
GermPeru Messages postés 172 Date d'inscription   Statut Membre Dernière intervention   -
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

f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
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
GermPeru Messages postés 172 Date d'inscription   Statut Membre Dernière intervention  
 
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
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713 > GermPeru Messages postés 172 Date d'inscription   Statut Membre Dernière intervention  
 
Re,
k dans boucle pour cells(2,k) c'est la colonne pas la ligne
0
GermPeru Messages postés 172 Date d'inscription   Statut Membre Dernière intervention   > f894009 Messages postés 17277 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
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761 > GermPeru Messages postés 172 Date d'inscription   Statut Membre Dernière intervention  
 
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
GermPeru Messages postés 172 Date d'inscription   Statut Membre Dernière intervention   > pijaku Messages postés 12263 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