Résolu macro rechercher sous conditions et copier dans une feuille

  • Auteur de la discussion niimo-c0re
  • Date de début

niimo-c0re

Nouveau membre
Bonjour,

Cela va faire plusieurs mois que je travail sur un fichier pour une exploitation quotidienne par des collaborateurs cependant n'ayant aucune notion de VBA (enfin infime) je n'arrive pas a finaliser mon fichier.

Voici comment ce constitue mon fichier :
Un onglet par mois (tous identique) comportant les colonnes suivantes :
DATE - N° RETOUR - N° NOTE LIVRAISON - SECTEUR - OR - FOURNISSEUR - PALETTES COLIS - DIVERS - TYPE FLUX - ZONE STOCKAGE - COMMENTAIRES - DATE DEPART -
STATUT
Certaines colonnes comporte des listes, d'autres sont en remplissage automatique grâce à des formules.

J'ai un dernier onglet qui doit reprendre tous les "Retours en attente" sur tous les mois. Je souhaiterais donc avoir une macro qui cherche dans chaque onglet mensuel les n° de retour dit "NON OK" (car non repris par le fournisseur) afin que je puisse récupérer certaines données par ligne sur ces retours. Si possible lorsque le retour passe en statut "OK" (repris par le fournisseur) que la ligne soit automatiquement supprimé...

J'ai tenté de trouver une solution par mois même en vain,je n'ai trouver aucune solution qui répond à ma problématique de recherche dans plusieurs onglets différents... Je dois surement en demandé beaucoup donc je remercie d'avance l’âme charitable qui voudra bien m'aider [s:p/1mar]
 

drul

Obscur pro du hardware
Staff
Salut, as-tu un code de base (même si ça marche pas), qu'on puisse corriger et modifié ?
Ici on ne propose pas de solution "toute cuite", le but étant de te faire progresser dans VBA.
 

niimo-c0re

Nouveau membre
Bonjour,

Merci pour ta réponse rapide voici un code que j'avais tenté d'adapter à ma problématique mais sans grand résultat. J'ai cru comprendre que la fonction FIND pourrait etre un début de solution pour ma problématique...

Code:
Sub RelanceEnAttente()

Sheets(ReceptionRetour).Activate
Sheets(RelanceEnAttente).Activate

Dim X As Range

Dim Y As Range
Dim Find As Long
Dim MySearch As Variant
Dim I As Long

Set X = Range("D:D")
Set Y = Range("P:P")

Find = Worksheets(1).UsedRange.Rows.Count

With Worksheets(1).Range("A:P" & Find)
    If Y = "NON REPRIS" Then
        Set MySearch = .Find(X, LookIn:=xlValues, SearchDirection:=xlPrevious)
        If Not MySearch Is Nothing Then
            firstAddress = MySearch.Address
            Do
                I = I + 1
                Application.Wait (Now + TimeValue("0:00:1"))  
                Set MySearch = .FindPrevious(MySearch)
            Loop While Not MySearch Is Nothing And MySearch.Address <> firstAddress
        End If
    End If
End With


End Sub
 

drul

Obscur pro du hardware
Staff
N.B. toujours utiliser la balise [code="vb"]... ton code ... [/code] afin d'éviter les horribles smileys !
Je corrige ton post ci-dessus.

Find et findnext sont effectivement possible, mais je préfère une recherche plus systématique ici. (nb, le wait est une atrocité qu'il faut absolument éviter !)

Je te propose de commencer avec une seule feuille au départ, puis on étendra ...

 

niimo-c0re

Nouveau membre
Je suis toute oui et prête à mettre en oeuvre vos précieux conseils
 

drul

Obscur pro du hardware
Staff
Essaie déjà de faire une boucle qui t'envoie un message (msgbox ("test")) pour chaque cellule de la colonne "N° RETOUR" si sa valeur est "NON OK"
 

niimo-c0re

Nouveau membre
Bonjour
J'ai mis un peu de temps à trouver la solution mais je pense avoir quelque chose.. Voici mon code

Sub Relance()

Sheets("Reception Retour").Activate
For I = 1 To 2

If Range("Q1") = "PAS OK" Then
MsgBox ("Test")

End If
Next
End Sub

Je n'ai pas réussit a faire une boucle qui pourrait s’exécuter sur l'ensemble des lignes du tableau..
 

drul

Obscur pro du hardware
Staff
Ok la base est là !
(quelques erreurs mais on y reviendra)
Pour une boucle sur toutes les lignes, on pourrait faire:
Code:
for I= 1 to Rows.Count
C'est toutefois totalement inefficace et très lent, le mieux est donc d'utiliser la fonction range.end pour déterminer la dernière cellule utiliser.
Regarde ici et propose moi qqch:
 

niimo-c0re

Nouveau membre
Voici le code mais j'ai un bug au niveau de ma première ligne ... Je n'arrive pas a comprendre pk

Sub Relance()

Sheets("Reception Retour").Activate

If Range("Q6").End(xlUp).Select = "PAS OK" Then
MsgBox ("Test")

End If

End Sub
 

drul

Obscur pro du hardware
Staff
Meilleure réponse
C'est quoi l'erreur ?
ça plante sur sheets("...").activate ?
C'est plutôt ça qui doit planté ...
Range("Q6").End(xlUp).Select = "PAS OK" (selectionne une range, mais n'en retourne pas sa valeur)
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 101
Membres
1 586 287
Dernier membre
lucilleguffey
Partager cette page
Haut