Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 Macro de recherche ligne par ligne

  • Initiateur de la discussion Initiateur de la discussion Lucko
  • 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 !

L

Lucko

Guest
Bonjour,

Je recherche une macro capable de lire ligne par ligne à l'infini X nombre de numéros, de les transposer sur une autre ligne pour vérification jusqu'à l'obtention de la réponse.

Merci
 

Pièces jointes

Re : Macro de recherche ligne par ligne

Salut,

Je te propose ceci :

Code:
Sub Macro1()
Application.ScreenUpdating = False
i = 0
 Do
    Range("C9:H9").Offset(i, 0).Copy
    Range("C5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
    i = i + 1
Loop Until ([j5]) = ([j3])
    Range("J5").Select
End Sub

++
Hieu
 
Re : Macro de recherche ligne par ligne

Par un ajout à la macro, peut-on reprendre là ou la recherche s'est arrêtée plutôt que de recommencer au début de la liste?

Merci
 
Re : Macro de recherche ligne par ligne

Oui, il faut insérer un case dans lequel on injectera la valeur i. Puis, changer la ligne i=0, par i = Range("a1") par exemple. Reviens vers moi, si ce n'est pas clair
 
Re : Macro de recherche ligne par ligne

Je ne suis pas sûr de comprendre. De plus, j'essaie de fermer la macro lorsqu'elle rencontre une rangée vide et cela ne fonctionne pas.

Sub Macro1()
[u12] = 17

i = range ("????")
Do

Range("e17:n17").Offset(i, 0).Copy
Range("j10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

i = i + 1
[u12] = [u12] + 1
Loop Until ([c16]) = ([u10])
If ActiveSheet.Isempty Then Exit Sub
Range("u10").Select

End Sub
 
Re : Macro de recherche ligne par ligne

Re,

Voilà ce que je te propose, en pièce jointe (j'ai complètement la manière de la faire ^^).

La ligne suivante :
Code:
If ActiveSheet.Isempty Then Exit Sub

ne peut pas fonctionner ==> tu cherches à vérifier si la feuille active est vide. Il faut, à limite vérifier une cellule.

++
 

Pièces jointes

Dernière modification par un modérateur:
Re : Macro de recherche ligne par ligne

Hieu,

Merci. J'ai finalement trouvé le code pour la ligne vide:

If ActiveCell.value = "" Then Exit Sub

que j'ai placé avant le lancement de la macro. Ton idée est ingénieuse pour trouver la ligne. C'est une bonne idée.
 
Re : Macro de recherche ligne par ligne

Bonjour mapomme,

J'avais hâte d'essayer le nouveau code. C'est impressionnant. Je ne comprends pas tout mais cela fonctionne très bien. J'aurais aimé que la macro s'arrête sur un certain chiffre plutôt que sur la somme d'une combinaison. Par exemple, quand la cellule c16 = 10, 11 ou 25, peu importe, alors la recherche s'arrête ( parce que les 10, 11 ou 25 conditions ont été remplies) et, si l'on appuie sur la recherche de nouveau, elle reprends là où elle avait arrêté pour compléter la recherche dans le tableau.

Actuellement, j'utilise le code suivant:

Application.ScreenUpdating = False
i = 0

Do
If ActiveCell.value = "" Then Exit Sub
i = i + 1
[u12] = [u12] + 1

Range("e17:n17").Offset(i, 0).Copy
Range("j11").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

Loop Until ([x8]) >= ([v8])

Range("u10").Select

End Sub

Ce code est très lent puisqu'il passe en revue chaque ligne,l'une après l'autre, contenant 10 numéros avant de s'arrêter s'il atteint le numéro ciblé.

Merci
 
Re : Macro de recherche ligne par ligne

Bonjour Hieu,

C'est une option intéressante. Je vais l'explorer pour voir si je peux l'adapter à mes besoins.

Merci
 
Re : Macro de recherche ligne par ligne

Hieu et mapomme,

J'aurais besoin de vos connaissances pour deux autres macros. En passant Hieu, j'ai fini par comprendre l'utilisation de case avec ton exemple.

Maintenant, j'aimerais savoir si on peut augmenter la vitesse d'un code sans l'utilisation de l'Application.ScreenUpdating = false. J'ai trouvé ce code ici-même et j'aimerais améliorer sa vitesse d'exécution.

Private Sub Tirage()
Dim i&, j&, n&, t, p(), v(), Cel As Range
Randomize

p = Array(Array("j2:s8", "j10:s10"))
For j = 0 To UBound(p)
For Each Cel In Range(p(j)(0))
If Not IsEmpty(Cel) Then n = n + 1: ReDim Preserve v(1 To n): v(n) = Cel.Value
Next
For i = n To 2 Step -1
t = v(1): v(1) = v(1 + Int(n * Rnd)): v(1 + Int(n * Rnd(0))) = t
Next
ReDim Preserve v(1 To 10)
Range(p(j)(1)).Offset = v
Erase v
n = 0


Next

End Sub

Finalement, je me suis rabattu sur ce macro pour archiver et déplacer les lignes du haut vers le bas et ligne par ligne. Lorsque j'ai archivé une ligne, j'aimerais que l'on ne puisse plus l'archiver de nouveau que ce soit par inadvertance ou oublie. Autrement dit, si j'ai déjà archivé une série de numéros ( 20 au total sur une seule ligne) je ne peux plus le refaire avant la nouvelle série de numéros identifiée par une date.

Sub Archiver()
Application.ScreenUpdating = False
Range("e17:x1000").Copy
Range("e18:x1000").PasteSpecial xlValues
[E17:X17].ClearContents

Range("E14:X14").Copy
Range("e17").PasteSpecial xlValues

Range("p12").Copy
Range("z17").PasteSpecial xlValues



Range("U10").Select
End Sub


Une grand merci pour vos efforts de recherche. Cela m'est très instructif.
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
15
Affichages
251
Réponses
19
Affichages
621
Réponses
10
Affichages
372
  • Question Question
Microsoft 365 Tableau
Réponses
5
Affichages
149
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…