VBA: "Tant que ne trouves pas la valeure souhaitée, tu continues de descendre"

  • Initiateur de la discussion Initiateur de la discussion Hélia
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Hélia

XLDnaute Nouveau
Bonjour à tous,

Je souhaiterais lancer une macro qui débuterai en B6 et continuerai de descendre dans cette collone tant qu'elle n'a pas trouvé une valeure définie préalablement.
Lorsque qu'elle intercepte la valeure souhaitée, il faudrait qu'elle copie la ligne en question de B à G.

Voici un code qui s'y rapproche mais qui ne convient pas actuellement:

'selection de taille variable => crtl *
Range("a1").CurrentRegion.Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range( _
"B2"), Order2:=xlAscending, Header:=xlGuess

While ActiveCell <> ""
'cellule de départ
Range("A2").Select

Dim Code As Byte

'variable qui stocke la valeur du code
Code = ActiveCell
'tant que ma variable est = à la cellule; tu descends
While ActiveCell = Code
ActiveCell.Offset(1, 0).Select
Wend

'sélection de cellules
Range("a2:u" & ActiveCell.Offset(-1, 0).Row).Select
'range(a2:u....> + numéro de la dernière ligne correspondante au code identique
'copie
Selection.Copy

Je débute sur VBA, d'où mon manque de description concrète. Mais je reste à votre disposition pour tous compléments.

Merci en tout cas, pour avoir pris le temps de me lire!
 
Re : VBA: "Tant que ne trouves pas la valeure souhaitée, tu continues de descendre"

Bonjour,

Ta macro doit fonctionner en l'état, mais tous les .select la ralentissent considérablement. Il est préférable de s'en passer. Tu peux le faire de la façon suivante, ce qui devrait déjà gagner considérablement du temps :

VB:
Dim c as Range
Range("a1").CurrentRegion.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("B2"), Order2:=xlAscending, Header:=xlGuess
'cellule de départ
set c = Range("A2")
While c <> ""

    Dim Code As Byte
    'variable qui stocke la valeur du code
    Code = c
    'tant que ma variable est = à la cellule; tu descends
    While c = Code
        set c = c(2, 1)
    Wend
wend
'range(a2:u....> + numéro de la dernière ligne correspondante au code identique
Range("a2:u" & c.Offset(-1, 0).Row).Copy
 
Re : VBA: "Tant que ne trouves pas la valeure souhaitée, tu continues de descendre"

Merci pour cette information qui en effet s'avère judicieuse.
Cependant, il me faudrait un code qui arrive à exprimer ceci: Tant que tu ne rencontres pas la valeure voulue, tu continues de descendre.
Je n'arrive pas à la formuler.

Merci pour vos retours.
 
Re : VBA: "Tant que ne trouves pas la valeure souhaitée, tu continues de descendre"

bonjour
Pas comprendre grand-chose
une macro qui débuterai en B6
Code:
'cellule de départ
Range("A2").Select

il faudrait qu'elle copie la ligne en question de B à G.

Copier B vers G
ou Copier B à G vers ???
Dans le doute j'ai pris la 1ère solution

Je n'ai pas testé
Si pas ça alors suis désolé

Code:
Sub Test2()
Dim c As Range
Dim Code As Byte              ' variable qui stocke la valeur du code

  Code = 12                   ' Ici tu marques ce que tu veux rechercher
  Range("a1").CurrentRegion.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("B2"), Order2:=xlAscending, Header:=xlGuess
  Set c = Range("B6:B" & Range("B6").End(xlDown).Row).Find(what:=Code, lookat:=xlWhole, searchorder:=xlByColumns)
  If Not c Is Nothing Then
   Range("G" & c.Row) = c
  Else
    MsgBox "Donnée non trouvée"
  End If
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
0
Affichages
1 K
Réponses
6
Affichages
2 K
Réponses
22
Affichages
4 K
Retour