Fonction recherche avancee possible en vba ?

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
M
MILOUD57000
Membre fidèle
Membre fidèle
Messages : 214
Inscrit le : 13 février 2014
Version d'Excel : 2007

Message par MILOUD57000 » 21 avril 2018, 21:32

FONCTION RECHERCHE AVANCEE :

Objectif de la recherche, visualiser chaque ligne et lorsqu'il y a un montant dans la colonne PAYEMENT (225,00 €), mettre en mémoire le N° PIECE (ACE03/015), le nom de l'ORGANISME (EARL de ROUVAU) puis le PAYEMENT (225,00 €)

puis chercher dans l'onglet "BASE COMPTA FOURNISSEURS" le N° PIECE (ACE03/015), le nom de l'ORGANISME (EARL de ROUVAU) puis le montant au CREDIT (225,00 €), après cette étape, REGARDER dans la colonne Lettrage s'il existe 1 lettre (D),

s'il n'y a pas de lettre, donc il n'y a pas de réglement, s'il existe une lettre, alors chercher la même lettre dans la colonne LETTRAGE mais au DEBIT.

puis COPIER la date qui figure dans la colonne DATE PIECE et la COLLER dans l'onglet TABLEAU BORD COLONIES, dans la colonne DATE REGLMT, et enfin copier le numéro qui correspond au numéro du virement qui se situe dans l'onglet BASE COMPTA FOURNISSEURS, dans la colonne Réf.Justificative et coller ce numéro dans l'ONGLET TABLEAU DE BORD COLONIES, colonne REF. VIRT.

Ainsi de suite en balyant chaque ligne de l'ONGLET TABLEAU DE BORD COLONIES.

Je ne sais pas si vba peut faire ça, mais ça serait magnifique de finir ce dossier.

Je vous remercie infiniment pour votre aide.
FONCTION RECHERCHE AVANCEE.xlsb
(472.12 Kio) Téléchargé 14 fois
Avatar du membre
paritec
Passionné d'Excel
Passionné d'Excel
Messages : 4'334
Appréciations reçues : 510
Inscrit le : 7 juin 2011
Version d'Excel : W10 - 2003 FR - 2010 FR

Message par paritec » 22 avril 2018, 07:45

Bonjour Miloud 57000 le forum
Je pensais que de dire bonjour était un bon début pour un post.
Comme quoi on peut se tromper !!!!!
Bonne journée et bon Weekend
Papou :)
Modifié en dernier par paritec le 22 avril 2018, 07:52, modifié 1 fois.
Des bonnes explications et des petits fichiers représentatifs vont nous aider à vous aider !!!!
Avatar du membre
paritec
Passionné d'Excel
Passionné d'Excel
Messages : 4'334
Appréciations reçues : 510
Inscrit le : 7 juin 2011
Version d'Excel : W10 - 2003 FR - 2010 FR

Message par paritec » 22 avril 2018, 07:49

Re bonjour Miloud 57000 le forum
Je ne sais pas si vba peut faire ça, mais ça serait magnifique de finir ce dossier.
Si c'est possible sans problème, mais c'est pas vba qui va savoir faire, mais le gars qui va faire le programme en vba.
a+
Papou :)
Des bonnes explications et des petits fichiers représentatifs vont nous aider à vous aider !!!!
M
MILOUD57000
Membre fidèle
Membre fidèle
Messages : 214
Inscrit le : 13 février 2014
Version d'Excel : 2007

Message par MILOUD57000 » 22 avril 2018, 16:19

Désolé Papou et Paritec, oui c'est vrai une grave une trés grave erreur de ma part de ne pas avoir dit bonjour ou bonsoir :oops: :oops: :oops:
M
MILOUD57000
Membre fidèle
Membre fidèle
Messages : 214
Inscrit le : 13 février 2014
Version d'Excel : 2007

Message par MILOUD57000 » 23 avril 2018, 00:14

Vous êtes rancunier au point de ne pouvoir m'aider ? Simplement parce que
je n'ai pas dit bonjour ou bonsoir ?

C'est pas sympa je trouve surtout lorsqu'on a besoin d'aide pour avancer...
Avatar du membre
dhany
Passionné d'Excel
Passionné d'Excel
Messages : 6'898
Appréciations reçues : 694
Inscrit le : 3 octobre 2017
Version d'Excel : 2007 FR

Message par dhany » 23 avril 2018, 00:38

Bonjour Miloud,

Juste un mot pour te dire que je viens tout juste de commencer ton dossier.  :wink:  j'te garantis rien, mais j'vais essayer.  :roll:
dans ton énoncé initial, « mettre en mémoire » n'est pas clair !  ::(  à quel emplacement : quelle feuille ? quelle cellule ?

dhany
M
MILOUD57000
Membre fidèle
Membre fidèle
Messages : 214
Inscrit le : 13 février 2014
Version d'Excel : 2007

Message par MILOUD57000 » 23 avril 2018, 00:41

Tout d'abord merci pour ton aide, et je sais que c'est pas trop facile ce que je demande.

Lorsque je dis, mettre en mémoire, ça veut dire le copier dans un endroit provisoire pour ensuite le comparer avec ce que je cherche pour enfin copier la date et le numéro du virement.

Je ne sais pas si c'est très clair ce que je viens d'écrire. N'hésites pas à me le dire pour que je reformule plus simplement...
Avatar du membre
dhany
Passionné d'Excel
Passionné d'Excel
Messages : 6'898
Appréciations reçues : 694
Inscrit le : 3 octobre 2017
Version d'Excel : 2007 FR

Message par dhany » 23 avril 2018, 04:20

Je te retourne ton fichier modifié :
FONCTION RECHERCHE AVANCEE.xlsb
(479.16 Kio) Téléchargé 19 fois
À l'ouverture du fichier, tu es sur la 1ère feuille "TABLEAU DE BORD COLONIES"
note bien que W6 et X6 sont vides ; Ctrl e ➯ travail effectué  :wink:

⚠  La macro ne se lance que depuis la 1ère feuille : inopérante depuis la 2ème feuille

Alt F11 pour voir la macro, puis revenir sur Excel

Si besoin, tu peux demander une adaptation.
Merci de me dire si ça te convient.

dhany  Image
M
MILOUD57000
Membre fidèle
Membre fidèle
Messages : 214
Inscrit le : 13 février 2014
Version d'Excel : 2007

Message par MILOUD57000 » 23 avril 2018, 11:55

Bonjour Dhany et sincerement je te remercie infiniment pour ton aide précieuse.

Insomniaque ;;)

Malheureusement ça ne fonctionne pas comme je le souhaite, je vais donc te donner une explication plus simple avec moins de détail, je pense que d'avoir détaillé mon besoin n'était pas une bonne chose.

Reprenons en résumant :

ETAPE 1 :

Nous sommes dans l'onglet "TABLEAU DE BORD COLONIES"
Le programme doit chercher le numéro de la pièce qui commence par "ACE" qui figure dans la colonne "F" et il doit aller chercher ce même numéro de pièce dans l'onglet "BASE COMPTA FOURNISSEURS" avec un montant au CREDIT (colonne R).

ETAPE 2 :

Nous sommes dans l'onglet "BASE COMPTA FOURNISSEURS"
S'il trouve ce même n° pièce qui commence par "ACE", il va regarder dans la colonne "P" s'il trouve une lettre (pour information, lettre = de "A" à "Z"...) qui doit être au DEBIT (colonne Q),
Après avoir trouvé cette même lettre d'abord au CREDIT (colonne R) puis au DEBIT (Colonne Q), il doit copier la date qui est dans la colonne "G", date qui est situé avec la ligne du DEBIT (Colonne Q) et la coller dans l'onglet "TABLEAU DE BORD COLONIES" correspondant au n° de la pièce trouvée Colonne W.

et idem pour le N° VIRT, il doit extraire le numéro qui est dans la colonne H et l'inscrire dans l'onglet "TABLEAU DE BORD COLONIES" colonne X.

Pour résumer, il cherche, il trouve, il copie la date et le n° du virt.

J'espère que c'est plus facile à comprendre :) ::) ::)
M
MILOUD57000
Membre fidèle
Membre fidèle
Messages : 214
Inscrit le : 13 février 2014
Version d'Excel : 2007

Message par MILOUD57000 » 23 avril 2018, 12:31

Je crois qu'il y a un problème dans le module, il me semble que le programme cherche dans un premier temps le n° de la pièce qui est dans l'onglet "TABLEAU DE BORD COLONIES" dans l'onglet "BASE COMPTA FOURNISSEURS" et ensuite il cherche ce même n° Pièce en fesant une boucle uniquement avec l'onglet "BASE COMPTA FOURNISSEURS", voilà pourquoi, le résultat attendu n'est pas celui que je cherche.

La réponse par exemple pour la pièce ACE03/015, il aurait dû trouver la lettre D qui est au DEBIT et ensuite il fesait une copie de la date, le "27/03/2018" et du n° du virement "12" dans l'onglet TABLEAU DE BORD COLONIES.

Je joins ci-dessous ton module :
Option Explicit

Sub Essai()
  If ActiveSheet.Name <> "TABLEAU DE BORD COLONIES" Then Exit Sub
  Dim bcf As Worksheet, dlig&: Set bcf = Worksheets("BASE COMPTA FOURNISSEURS")
  dlig = bcf.Cells(Rows.Count, 1).End(xlUp).Row: If dlig < 7 Then Exit Sub
  Dim c0 As Range, c1 As Range, pmt@, org$, pce$, ltr$, s$, lg0&, lg1&, n&, dv&
  Set c1 = [G5]: n = Cells(Rows.Count, 2).End(xlUp).Row - 5
  Application.ScreenUpdating = 0
  For dv = 0 To n
    pmt = c1.Offset(dv, 14)
    If pmt > 0 Then
      org = c1.Offset(dv): pce = c1.Offset(dv, -1)
      For lg0 = 7 To dlig
        Set c0 = bcf.Cells(lg0, 10)
        If c0 = pce Then
          If c0.Offset(, 2) = org Then
            If c0.Offset(, 8) = pmt Then
              ltr = c0.Offset(, 6)
              If ltr <> "" Then
                For lg1 = lg0 + 1 To dlig
                  Set c0 = bcf.Cells(lg1, 17)
                  If c0 <> 0 Then
                    If c0.Offset(, -1) = ltr Then
                      c1.Offset(dv, 16) = c0.Offset(, -10)
                      s = Trim$(Replace$(c0.Offset(, -9), "Rglt Viremnt", ""))
                      If s <> "" Then c1.Offset(dv, 17) = s
                    End If
                  End If
                Next lg1
              End If
            End If
          End If
        End If
      Next lg0
    End If
  Next dv
End Sub
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message