Recherche 3 critères ligne par ligne / couper et coller ...
Résolu/Fermé
mat297
Messages postés
19
Date d'inscription
dimanche 25 décembre 2016
Statut
Membre
Dernière intervention
27 décembre 2016
-
25 déc. 2016 à 12:22
mat297 Messages postés 19 Date d'inscription dimanche 25 décembre 2016 Statut Membre Dernière intervention 27 décembre 2016 - 27 déc. 2016 à 09:26
mat297 Messages postés 19 Date d'inscription dimanche 25 décembre 2016 Statut Membre Dernière intervention 27 décembre 2016 - 27 déc. 2016 à 09:26
A voir également:
- Recherche 3 critères ligne par ligne / couper et coller ...
- Recherche par image - Guide
- Apparaitre hors ligne whatsapp - Guide
- Aller à la ligne excel - Guide
- Copiez la ligne indiquant aux moteurs de recherche de ne pas référencer la page. ✓ - Forum Référencement
- Recherche musique - Guide
2 réponses
yg_be
Messages postés
21304
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 mars 2023
1 325
25 déc. 2016 à 12:53
25 déc. 2016 à 12:53
Cela ne me semble pas particulièrement compliqué à faire en VBA.
Le plus dur sera que tu expliques ce que tu attends. Tu écris "faire une recherche, trouver", et "faire une recherche en prenant les critères de la deuxième ligne" : cela signifie quoi?
Par "inverser l'ordre des lignes", veux-tu dire "intervertir les lignes, remplacer l'une par l'autre"?
Tu parles de "blocs de lignes" : veux-tu dire qu'il ne faut pas travailler sur les 6000 lignes en une fois, mais sur des blocs? Comment séparer ces blocs?
Le plus simple serait sans doute que tu partages ton fichier, et que tu y ajoutes des exemples du résultat final que tu attends.
Le plus dur sera que tu expliques ce que tu attends. Tu écris "faire une recherche, trouver", et "faire une recherche en prenant les critères de la deuxième ligne" : cela signifie quoi?
Par "inverser l'ordre des lignes", veux-tu dire "intervertir les lignes, remplacer l'une par l'autre"?
Tu parles de "blocs de lignes" : veux-tu dire qu'il ne faut pas travailler sur les 6000 lignes en une fois, mais sur des blocs? Comment séparer ces blocs?
Le plus simple serait sans doute que tu partages ton fichier, et que tu y ajoutes des exemples du résultat final que tu attends.
yg_be
Messages postés
21304
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 mars 2023
1 325
25 déc. 2016 à 19:22
25 déc. 2016 à 19:22
Je propose ceci:
Option Explicit
Const stock As String = "STOCK"
Const cref As Long = 1
Const cmag As Long = 2
Const cdat As Long = 3
Sub mat297()
Dim ws As Worksheet
Dim anc_ref, anc_date
Dim nv_ref, nv_date
Dim lig As Long
Dim dansbloc As Boolean
Dim ligstock As Long ' ligne avant laquelle il faut deplacer les lignes avec "stock"
Set ws = ActiveSheet
dansbloc = False
lig = 3
anc_ref = ws.Cells(lig - 1, cref)
anc_date = ws.Cells(lig - 1, cdat)
nv_ref = ws.Cells(lig, cref)
nv_date = ws.Cells(lig, cdat)
Do While nv_ref <> ""
If (anc_ref = nv_ref) And (anc_date = nv_date) Then
If Not dansbloc Then
' deuxieme ligne d'un bloc
dansbloc = True
If ws.Cells(lig - 1, cmag) = stock Then
ligstock = lig
Else
ligstock = lig - 1
End If
End If
If ws.Cells(lig, cmag) = stock Then
If ligstock <> lig Then
' déplacer lig avant ligstock
'Debug.Print "deplacer " & lig & " avant " & ligstock
ws.Rows(ligstock).Insert xlShiftDown
ws.Rows(lig + 1).Copy ws.Rows(ligstock)
ws.Rows(lig + 1).Delete xlShiftUp
End If
ligstock = ligstock + 1
End If
Else
dansbloc = False
anc_ref = nv_ref
anc_date = nv_date
End If
lig = lig + 1
nv_ref = ws.Cells(lig, cref)
nv_date = ws.Cells(lig, cdat)
Loop 'Do While wb.Cells(lig, 1) <> ""
End Sub
mat297
Messages postés
19
Date d'inscription
dimanche 25 décembre 2016
Statut
Membre
Dernière intervention
27 décembre 2016
25 déc. 2016 à 19:34
25 déc. 2016 à 19:34
merci infiniment, c'est vraiment sympa, je vais tester et partir de là.
mat297
Messages postés
19
Date d'inscription
dimanche 25 décembre 2016
Statut
Membre
Dernière intervention
27 décembre 2016
25 déc. 2016 à 20:34
25 déc. 2016 à 20:34
Je te sollicite encore une fois.
En fait il y'a un blocage à l'execution, il n'y a pas de résultat car je crois qu'une fois à cette étape (je l'ai executé en mode pas a pas) , il n'execute pas ce qui suit mais dès qu'il arrive à cette condition
=> If (anc_ref = nv_ref) And (anc_date = nv_date) Then
En fait il y'a un blocage à l'execution, il n'y a pas de résultat car je crois qu'une fois à cette étape (je l'ai executé en mode pas a pas) , il n'execute pas ce qui suit mais dès qu'il arrive à cette condition
=> If (anc_ref = nv_ref) And (anc_date = nv_date) Then
yg_be
Messages postés
21304
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 mars 2023
1 325
25 déc. 2016 à 20:55
25 déc. 2016 à 20:55
J'ai supposé que tes données commençaient en ligne 2. C'est exact? Sinon, change la ligne 17: remplace 3 par la deuxième ligne de données.
J'ai supposé que tes données étaient dans la feuille active au moment de l'appel du code. Tu peux changer la ligne 15 si nécessaire.
J'ai supposé que tes données étaient dans la feuille active au moment de l'appel du code. Tu peux changer la ligne 15 si nécessaire.
mat297
Messages postés
19
Date d'inscription
dimanche 25 décembre 2016
Statut
Membre
Dernière intervention
27 décembre 2016
25 déc. 2016 à 21:29
25 déc. 2016 à 21:29
oui c est bien ca, les données commencent en ligne 2.
yg_be
Messages postés
21304
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 mars 2023
1 325
25 déc. 2016 à 21:35
25 déc. 2016 à 21:35
Quel est le blocage?
25 déc. 2016 à 15:15
Modifié par yg_be le 25/12/2016 à 17:06
Je suppose qu'il n'y a pas de ligne blanche dans ton fichier. C'est exact?
Si je résume, tu veux que, quand plusieurs lignes successives ont les mêmes valeurs en colonnes 1 et 3, celles qui contiennent "STOCK" en colonne 2 soient présentes avant les autres.
Bête question : pourquoi ne fais-tu pas simplement un tri de tout, c'est parce que tu veux préserver l'ordre des blocs, et ne changer l'ordre qu'à l'intérieur des blocs?
25 déc. 2016 à 17:21
En effet, c est avant traitement. Je me suis trompé désolé, le bloc 3 est ok c est plutot le bloc 4. Il n'y a en effet pas ligne blanche, j'ai espacé pour rendre clair ma demande..et effectivement je ne peux pas faire de tri sur le fichier car ca casserait la structure du fichier, dommage que je n'arrive pas a joindre le fichier. sinon oui c est bien ca, si memes valeurs en colonne 1 et 3 celles qui contiennent "stock" en colonne 2 doivent etre présentes devant les autres. merci beaucoup