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 Lucko
  • Date de début
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

  • Fichier Test.xlsm
    16.7 KB · Affichages: 37
  • Fichier Test.xlsm
    16.7 KB · Affichages: 31

Hieu

XLDnaute Impliqué
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
 
L

Lucko

Guest
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
 

Hieu

XLDnaute Impliqué
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
 
L

Lucko

Guest
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
 

Hieu

XLDnaute Impliqué
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

  • Fichier Test_v1.xlsm
    16.1 KB · Affichages: 27
Dernière modification par un modérateur:
L

Lucko

Guest
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.
 
L

Lucko

Guest
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
 
L

Lucko

Guest
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
 
L

Lucko

Guest
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.
 

Discussions similaires

Réponses
9
Affichages
301
Réponses
6
Affichages
535
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…