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
- 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
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 :
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
Désolé