Xl Aide sur code Vba type rechercheV

Résolu
7808622H Messages postés 331 Statut Membre -  
7808622H Messages postés 331 Statut Membre -
Bonjour,

J'ai un souci de compréhension sur un code que l'on m'a donné pour un autre fichier que celui présenté

je cherche à l'adapter et surtout a le comprendre pour pouvoir l'utiliser à l'avenir sur d'autres fichiers dont celui joint

https://www.cjoint.com/?hmm1I6vO6s

Le fichier joint fonctionne comme suit.

Coller la totalité du fichier extraction dans l'onglet "extraction" du fichier REPORTING

Cliquer sur le bouton

Les actions qui doivent être menées

- Converti le numéro de BUAP en nombre ( ca ca marche)
- Met en forme l'extraction de base selon les besoin du fichier en créant un onglet " Global" ( ca ca marche)
- Cherche le nom des comptables sur l'onglet "comptable" pour les insérer dans le tableau "Global" et pour qu'il soient incrémentés en fonction de la BUAP ( c'est la que ca plante)

- L'étape suivante serait la même chose que la recherche du nom du comptable mais pour indiquer le type d'établissement toujours en fonction de la BUAP

- Etape suivante, un onglet doit être créer a partir de la liste global , nominatif, par comptable en allant chercher les critères de nom de comptable dans la liste de l'onglet comptable ( e ncolonne F). En gros, le principe serait de selectionner toutes les lignes de chaque comptable pour les coller dans un onglet au nom du comptable

Les noms des comptables etant evolutifs, il faut que la recherche se fasse en cherchant une valeur dans la colonne F de l'onglet Comptable et non pas directement le code avec comme critère un nom.

Voila si quelqu'un peut m'aider cela serait super , car j'ai eu un debut d'info par la personne qui m'a filé le code remplaçant la rechercheV ( pour le nom des comptable) mais ce dernier n'etant pas super dispo en ce moment il n'a pas eu le temps de m'expliquer en profondeur ( ou alors je suis vraiment une buse et j'ai rien compris ... bon ca c'est possible aussi.

Une fois ce fichier finalisé je pourrais generer des stats diverses que j'ajouterai à la fin et qui s'actualiseront a chaque semaine selon l'extraction de la semaine

En tout cas merci d'avance si vous avez quelques minutes a me consacrer pour m'expliquer ce code et éventuellement corriger mon fichier

NB : au bureau nous sommes assez arriéré niveau informatique , nous tournons sous excel 2002. je sais que ca peut jouer sur le code qui plante si le code est de la génération 2003 - ou 2007, car les codes ne sont pas reconnus

CED

5 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    Merci de mettre la pièce jointe en .zip et non en .rar
    0
    1. 7808622H Messages postés 331 Statut Membre 4
       
      Bonjournecessaire fait le fichier est remplacé dans le post par un zip

      Désolé
      0
  2. 7808622H Messages postés 331 Statut Membre 4
     
    Bonsoir, personne pour me donner un tit coup de main sur ce fichier?
    0
  3. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    - Met en forme l'extraction de base selon les besoin du fichier en créant un onglet " Global" ( ca ca marche)

    Sauf si l'onglet " Global" existe déjà et je te propose de remplacer :
    Sheets("Comptables").Select
    Sheets.Add
    ActiveSheet.Name = "Global"

    par ceci :
    Sheets("Comptables").Select 
    On Error Resume Next 
    Sheets("Global").Activate 
    If Err.Number <> 0 Then 
        Sheets.Add 
        ActiveSheet.Name = "Global" 
    End If 
    

    - Cherche le nom des comptables sur l'onglet "comptable" pour les insérer dans le tableau "Global" et pour qu'il soient incrémentés en fonction de la BUAP ( c'est la que ca plante)
    - L'étape suivante serait la même chose que la recherche du nom du comptable mais pour indiquer le type d'établissement toujours en fonction de la BUAP

    Tu peux utiliser ceci :
    Sub cherchecomptables() 
    Dim nbrligne As Long 
    With Sheets("Global") 
        nbrligne = .Cells(.Columns(2).Cells.Count, 2).End(xlUp).Row - 1 
        .Range("D2").NumberFormat = "General" 
        .Range("D2").FormulaR1C1 = "=VLOOKUP(RC[-2],Comptables!C1:C3,2,0)" 
        .Cells(2, 4).AutoFill Destination:=.Cells(2, 4).Resize(nbrligne, 1) 
        .Range("A2").NumberFormat = "General" 
        .Range("A2").FormulaR1C1 = "=VLOOKUP(RC[1],Comptables!C1:C3,3,0)" 
        .Cells(2, 1).AutoFill Destination:=.Cells(2, 1).Resize(nbrligne, 1) 
    End With 
    End Sub


    - Etape suivante, un onglet doit être créer a partir de la liste global , nominatif, par comptable en allant chercher les critères de nom de comptable dans la liste de l'onglet comptable ( e ncolonne F). En gros, le principe serait de selectionner toutes les lignes de chaque comptable pour les coller dans un onglet au nom du comptable


    Tu peux utiliser ceci :
    Sub copie_comptable()     ' copie lignes
    Const col = 4   ' "D"
    Const dat = "U1"       ' plage date modif
    Const tit = "A1:T1"    ' plage du titre
    Dim f As Integer, nom As String, dmaj As Variant
    Dim lig As Long, lgc As Long
    Application.ScreenUpdating = False
    dmaj = Now
    With Sheets("Global") ' boucle sur onglet global
        For lig = 2 To .Cells(Columns(1).Cells.Count, 2).End(xlUp).Row
            For f = 1 To Sheets.Count   ' recherche onglet identique
                nom = Sheets(f).Name
                If .Cells(lig, col).Value = Sheets(f).Name Then Exit For
            Next f
            If .Cells(lig, col).Value <> nom Then       ' non trouvé : création
                Sheets.Add After:=Sheets(f - 1)
                ActiveSheet.Name = .Cells(lig, col).Text ' nommage
                .Range(tit).Copy Destination:=ActiveSheet.Range(tit)
                ActiveSheet.Range(dat).Value = dmaj
                f = ActiveSheet.Index
            Else
                If Sheets(f).Range(dat).Value <> dmaj Then
                    Sheets(f).Rows(2).Resize(Sheets(f).UsedRange.Rows.Count).Delete
                    Sheets(f).Range(dat).Value = dmaj
                End If
            End If
            lgc = Sheets(f).Cells(Columns(1).Cells.Count, 1).End(xlUp).Row + 1
            .Rows(lig).Copy Destination:=Sheets(f).Rows(lgc)
        Next lig
    End With
    Application.ScreenUpdating = True
    End Sub
    


    Bon test.

    Edit : petite modification du dernier module pour permettre plusieurs mise à jour de suite.

    Toujours zen
    0
  4. 7808622H Messages postés 331 Statut Membre 4
     
    bonjour gbinforme

    alors j'ai fait toutes les modifs que tu m'as donné et a vue de nez ca marche pratiquement jusqu'au bout

    seul truc j'ai un bug a un moment donné

    je t'ai joint l'image du bug dans le zip avec le fichier modifié

    par contre concernant l'onglet "global" j'ai fait ta modif, mais le fichier sera repris a partir d'un fichier vièrge a chaque semaine

    voila le fichier a jour avec l'etractin et le bug

    https://www.cjoint.com/?hrp3n5fdPe

    merci d'avance pour ta réponse, et deja merci bcp pour m'avoir aidé

    Surtout en cette période de vacance avec moins de personnel, si je peux l'avoir lundi ca serait génialissime
    CED
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Ton bug ne vient pas de ma macro mais de la première que tu exécutes qui ne fonctionne pas aussi bien que cela : si tu la rectifies ainsi elle fonctionnera et le reste avec :

    Sub ConvertirNumBU_Nombre()
    Dim deli As Integer
    
    ' *** convertir le n° BUAP en nombre dans l'extraction d'origine
    Sheets("Extraction").Select
    deli = Cells(Columns(1).Cells.Count, 4).End(xlUp).Row
        Range("D1").Value = 1
        Range("D1").Copy
        Range("D12:D" & deli).PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
                SkipBlanks:=False, Transpose:=False
        Range("D:D").NumberFormat = "General"
        Range("D1") = ""
    End Sub
    

    Le précédent code ne traitait pas correctement la fin du fichier car les 10 premières lignes de la colonne D n'ont pas de données :

    deli = WorksheetFunction.CountA(Range("D:D")) + 1
    0
    1. 7808622H Messages postés 331 Statut Membre 4
       
      bon bah y a pas autre chose a dire, t es u nchef !!!!

      merci bcp bcp je m'attarderai si j epeux ce week end histoire de comprendre la totalité de ce que tu m'as envoyé par rapport au code complet


      si j'ai des question de compréhension je peux me retourner vers toi ?
      0
    2. 7808622H Messages postés 331 Statut Membre 4
       
      ah vi une tite question j'ai fait tout mes tableau etc, j ai mis le fichier en lecture seule

      mais je cherche un code que je trouve pas


      lorsque le code complet est terminé j ai un msgbox qui arrive et qui previent que le fichier est en lecture seule et qu'il faut penser a enregistrer


      je cherche le code qui permet d'ouvrir la fenetre d'enregistrer sous , comem si on faisait un appui sur la touche F12

      sans incrementer de nom ni d'empalcement, juste lancer la fenetre poru que l'utilisateur le fasse totu de suite


      Je trouve pas mal de code qui oblige a mettre u nnom ou un chemin d'enregistremetn mais pas la commande pour juste ouvrir la boite de dialogue d'enregistrement sous


      si tu as ca sous le coude ca serait top


      Merci d'avance
      0
    3. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      bonsoir

      Avec ceci tu obliges l'utilisateur à faire un enregistrement dans le répertoire et avec le nom choisis :

      Dim reponse
      Do
          reponse = Application.GetSaveAsFilename
      Loop While reponse = False
      Application.DisplayAlerts = False
      ActiveWorkbook.SaveAs Filename:=reponse, FileFormat:=xlNormal
      Application.DisplayAlerts = True
      
      0
    4. 7808622H Messages postés 331 Statut Membre 4
       
      nickel chrome tout marche a merveille

      c est cool encore un enorme merci
      0