Boucle non fonctionnellle
Résolu
GermPeru
Messages postés
175
Statut
Membre
-
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.
Merci d'avance de voter aide, pcq la j'en ai besoin !
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 !
A voir également:
- Boucle non fonctionnellle
- Boucle excel sans macro - Forum Excel
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Vlc lire en boucle ✓ - Forum Lecteurs et supports vidéo
- Pc qui s'allume et s'éteint en boucle - Forum Virus
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
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) = UsuarioEnsuite 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).RowDu 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 :)
k dans boucle pour cells(2,k) c'est la colonne pas la ligne
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 IfJ´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
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 WithEDIT : 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 iciou 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 IfDans 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!