Macro VBA pour appli

C@thy

XLDnaute Barbatruc
Bonjour à toutes et à tous,

suite aux conseils de Gaël, que je salue au passage, je me suis rendue compte que mon appli avait besoin de macros.

En effet, jusqu'à présent je copie (à la mimine) les valeurs à partir d'un classeur données_dossiers dans lequel j'ai des colonnes calculées (rajoutées en vert) vers un classeur tableau de bord qui exploite ces données.

le nombre très important de lignes complique la chose, je dois empêcher le recalcul automatique sinon c'est la galère, quand je rajoute des lignes je dois recopier les formules vers le bas etc...

Gaël m'a indiqé qu'il serait plus rapide (en termes de temps d'exécution) que mes tableaux de bord soient faits par macro.

Je vous livre un extrait de mon tableau de bord pour voir si cela vous semble possible.
Cet extrait a été réalisé en fonction d'une période déterminée (j'ai fait un filtre).
Voici le bébé.

Merci de me dire ce que vous en pensez, et si on peut l'aider à grandir (en sagesse!!!).

Bisous et bonne journée

C@thy
 

Pièces jointes

  • tdb.zip
    131.2 KB · Affichages: 90
  • tdb.zip
    131.2 KB · Affichages: 77
  • tdb.zip
    131.2 KB · Affichages: 73

C@thy

XLDnaute Barbatruc
Re : Macro VBA pour appli

Bon, ça y est, j'ai fait monUSF qui demande les dates,
je les mets dans le format mm/jj/aaaa avec l'instruction
Code:
Cri = Format(Crit, "mm/dd/yyyy")
tout marche très bien, sauf...
lorsque ma plage d'arrivée est vide ou ne comporte qu'une seule ligne avec le nom des champs.

Sais-tu comment éviter ça???

Merci et pardon de t'embêter encore, j'y suis presque!

Bises

C@thy
 
C

Compte Supprimé 979

Guest
Re : Macro VBA pour appli

Salut C@thy,

Désolé, je n'étais pas sur le fil ce matin :eek:

J'ai pensé que ma solution ne t'intéressait pas ;)
car je n'avais pas eu de réponse hier :D

Peux-tu nous donner le code que tu as à l'heure actuelle ?
Je regarde le problème que tu peux avoir et te tient au courant

Edit : le code à ajouter pour les entêtes de colonne
Code:
....
' Ouvrir les enregistrements selon le criètère
  Set rs = Cn.Execute("SELECT * FROM " & Mabdd & " where " & Crit)
  ' Copier les enregistrements correspondants en A2
  With ThisWorkbook.Sheets("Interactions")
    ' Effacer le contenu des cellules avant l'import
    DerLig = .Range("A" & Rows.Count).End(xlUp).Row
    .Range("A1:AH" & DerLig).ClearContents
    [B][COLOR=blue]' Inscrire le nom de chaque champ[/COLOR][/B]
[B][COLOR=blue]   For NbChamp = 0 To rs.Fields.Count - 1[/COLOR][/B]
[B][COLOR=blue]     .Range("A1").Offset(0, NbChamp).Value = rs.Fields(NbChamp).Name[/COLOR][/B]
[B][COLOR=blue]   Next NbChamp[/COLOR][/B]
    ' Importer les enregistrements à partir de la 2ème ligne
    .Range("A2").CopyFromRecordset rs
  End With
....

Merci et pardon de t'embêter encore, j'y suis presque!
Ne t'inquiète pas, tu ne m'embête absolument pas ;)

A+
 
Dernière modification par un modérateur:

Gael

XLDnaute Barbatruc
Re : Macro VBA pour appli

Salut Cathy, bruno, Vbacrumble, Chti160,

Ta macro est super Bruno, je l'ai gardé en exemple. Je n'utilise pas beaucoup ADO et c'est un tort, ça marche super bien :)

Mon exemple n'a rien à voir et concerne uniquement la totalisation des éléments dans le tableau de bord. c'est la macro Tbord dans le module 2.

Cathy, j'ai pensé qu'il y avait une erreur dans certains Sommeprod ou tu mettais AM=Urgent pour le central et AN=Urgent pour l'assistance, j'ai supposé que c'était bien AM dans chaque colonne et de même pour STANDARD.

La macro traite les feuilles Interventions et Incidents puis remplit le tableau de bord. Les cellules correspondant aux feuilles "Données appel" et "satisfactions" conservent leurs formules.

J'ai vérifié les résultats qui me semblent corrects. Reste à tester sur un nombre de lignes plus important.

@+

Gael
 

Pièces jointes

  • indicateurs-tdb_V1.zip
    138.6 KB · Affichages: 35

C@thy

XLDnaute Barbatruc
Re : Macro VBA pour appli

Un grand MERCI à vous deux, vous êtes SUPER GENIAUX.
(Désolée, je n'ai internet qu'au bureau, j'ai pas pu vous répondre avant).

Tu as raison, Gael, j'ai recopié la formule vers la droite et AM est devenu AN. Tu as l'oeil!!!

j'ai modifié ta macro un chouilla, à cause de la ligne de titres :
For i = 2 To UBound(tablo)
et c'est super nickel.

Encore merci, Bruno et Gaël, je vais gagner un temps fou avec ça, et surtout, adieu les plantages!

Bisous et bonne journée

C@thy
 
Dernière édition:

C@thy

XLDnaute Barbatruc
Re : Macro VBA pour appli

P.S. encore une toute petite chose :

quand je change la valeur de C3 (liste déroulante) je dois relancer la macro,

Gaël, je pense qu'il serait bon de mettre la macro sur l'événement change C3.
Private Sub Change(ByVal Target As Range)
If Not Intersect(Target, Range("C3")) Is Nothing Then
MacroGael
End if
EndSub

Qu'en penses-tu?

Bibises et bonne journée

C@thy
 
Dernière édition:

Gael

XLDnaute Barbatruc
Re : Macro VBA pour appli

Bonjour Cathy, bonjour à tous,

Oui, ce serait parfait et à ajouter également à la fin de macro de Bruno, une fois les données importées.

Cede à mettre dans la feuille "sla":

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C3")) Is Nothing Then
Module2.Tbord
End If
End Sub

Et le temps de réponse sur la totalité des données ?

@+

Gael
 

C@thy

XLDnaute Barbatruc
Re : Macro VBA pour appli

Le temps de réponse? Un vrai bonheur, c'est immédiat!

Je n'ai pas encore les formules pour la feuille ola, mais j'ai modifié ton Tbord en faisant un TbordOla.
J'ai changé C3 en C1 (la liste déroulante est en C1), et le nom de la feuille sla en ola.
Pour l'instant il ne se passe rien du tout dans ma feuille ola,
je cherche d'où ça vient.
En tout cas pour sla, c'est vraiment super génial géantissime.

Bisous

Edit : ah oui, t'inquiète, Gael, je sais pourquoi ça marche pas, (paf! main sur le front!)

la plage à remplir n'est pas au même endroit...

C@thy
 
Dernière édition:

C@thy

XLDnaute Barbatruc
Re : Macro VBA pour appli

Oups! Bruno, j'ai un GROS souci :

ta super macro de récup des données marche à merveille, mais je récupère des scories dans les données :

pour les heures je récupère bien les heures, mais avec devant une date 00/01/1900 voire /4000,
et là.... c'est la cata!!!

Tu sais à quoi c'est du???

Merci de m'aider sur ce coup-là. Il faut absolument éviter ça.

Bisous

C@thy
 
C

Compte Supprimé 979

Guest
Re : Macro VBA pour appli

Bonjour C@thy,

C'est juste un problème de format de colonne ;)

Si tu prends ton classeur source et que tu vas dans une des cellules de la colonne "Handle time"
Tu verras que tu as aussi : 01/01/4000 00:03:06
pour le numéro : IT0000431

A la fin de mon code, il suffit de mettre
Code:
...
    ' Importer les enregistrements
    .Range("A2").CopyFromRecordset rs
[COLOR=blue][B]   ' Mettre certaines colonnes au bon format[/B][/COLOR]
[B][COLOR=blue]   .Range("V:Y").NumberFormat = "h:mm:ss"[/COLOR][/B]
  End With
...

Voili, voilà ;)
 

C@thy

XLDnaute Barbatruc
Re : Macro VBA pour appli

Arf! Je viens t'embêter encore, mais y'a un truc que je ne comprends pas (mais alors pas du tout!) :mad: :

Dans Données dossiers Incidents en AB3 j'ai 06/01/1900 16:49:55
après la copie, dans le classeur destination en Incidents AB3 j'ai 07/01/1900 16:49:55 :eek: :confused: :( du coup ça ne fait pas le même nombre d'heures lorsque je formate en [h]:mm:ss.
(J'ai rajouté les crochets car le nb d'h peut dépasser 24).

Gasp! Prise de tête assurée! :confused: :confused: :confused:

T'y comprends quelquechose, toi??? :cool:

Bises

C@thy
 

C@thy

XLDnaute Barbatruc
Re : Macro VBA pour appli

Oui, bien sûr,

voici toute la macro.

Code:
Sub RecupDonnees()
  Dim VPath As String, FicBdD As String
  Dim Cn, rs As ADODB.Recordset
  Dim Mabdd As String, Crit As String, Crit2 As String
  Dim DerLig As Long
  ' En cas d'erreur
  On Error GoTo Err_Proc
  ' Initialisation des variables
  VPath = ActiveWorkbook.Path ' Chemin d'accès de la BdD
  Fic = ThisWorkbook.Name
  FicBdD = "donnees_dossiers BIS.xls" ' Fichier contenant la BdD
 
  Mabdd = "[Interactions$A1:AH65536]" ' Feuille et Plage contenant les données
  ' Pour les dates il faut inverser le jour et le mois = format US
 Crit = Workbooks(Fic).Sheets("Outils").Range("C2").Value
 Crit2 = Workbooks(Fic).Sheets("Outils").Range("D2").Value
 Cri = Format(Crit, "mm/dd/yyyy")
 Cri2 = Format(Crit2, "mm/dd/yyyy")
 Crit = "[Date ouverture]>#" & Cri & "#"
 Crit2 = "[Date Clôture]<#" & Cri2 & "#"
  ' Créer la Connexion ADO
  Set Cn = New ADODB.Connection
  ' Ouvrir la BdD
  Cn.Open "DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" & VPath & "\" & FicBdD
  ' Ouvrir les enregistrements selon le criètère
  Set rs = Cn.Execute("SELECT * FROM " & Mabdd & " where " & Crit) '& " where " & Crit2)
   ' Inscrire le nom de chaque champ
   With ThisWorkbook.Sheets("Interactions")
    ' Effacer le contenu des cellules avant l'import
    DerLig = .Range("A" & Rows.Count).End(xlUp).Row
    .Range("A2:AH" & DerLig).ClearContents
    ' Copier les enregistrements correspondants en A2
    For NbChamp = 0 To rs.Fields.Count - 1
     .Range("A1").Offset(0, NbChamp).Value = rs.Fields(NbChamp).Name
   Next NbChamp
    ' Importer les enregistrements
    .Range("A2").CopyFromRecordset rs
    ' Mettre certaines colonnes au bon format
   .Range("V:Y").NumberFormat = "[h]:mm:ss"
  End With
'************************************************************
Mabdd = "[Incidents$A1:AS65536]"
  'Crit = "[Date ouverture]>#03/10/2009#"
 
  Set rs = Cn.Execute("SELECT * FROM " & Mabdd & " where " & Crit)
  With ThisWorkbook.Sheets("Incidents")
  DerLig = .Range("A" & Rows.Count).End(xlUp).Row
    .Range("A1:AS" & DerLig).ClearContents
    For NbChamp = 0 To rs.Fields.Count - 1
     .Range("A1").Offset(0, NbChamp).Value = rs.Fields(NbChamp).Name
   Next NbChamp
    .Range("A2").CopyFromRecordset rs
    ' Mettre certaines colonnes au bon format
   .Range("AA2:AB" & DerLig).NumberFormat = "[h]:mm:ss"
   .Range("AJ2:AK" & DerLig).NumberFormat = "[h]:mm:ss"
   End With
  rs.Close
  Set rs = Nothing
  Cn.Close
  Set Cn = Nothing
Err_Proc:
End Sub

Là où ça se passe mal, c'est uniquement sur les heures > à 24.

Mille mercis à toi.

Bisous

C@thy
 
Dernière édition:

C@thy

XLDnaute Barbatruc
Re : Macro VBA pour appli

Hi hi hi... moi j'ai d'autres expressions, par exemple dans l'oeuf est remplacé par dans le potage et coquille est amputé d'une lettre...

(Salut Pascal, j'ai été correcte, là, hein, superModo?)

mais en général, je dis qu'il y a une "nouillerie" ...:)
bref, on est mal... de chez mal!:eek:

C'est bizarre autant qu'étrange, je ne sais pas où il va m'inventer un jour de plus. C'est plus fort que de jouer au bouchon!

Il faut dire que le fichier d'origine est tellement mal fichu, mais bon, il faut faire avec, y'a pas le choix!

Bibises

C@thy
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal