Erreur dans ma macro ?

Résolu/Fermé
Ju@nita Messages postés 135 Date d'inscription mardi 11 juin 2013 Statut Membre Dernière intervention 19 mars 2018 - Modifié par Ju@nita le 2/05/2016 à 17:19
 Utilisateur anonyme - 19 mai 2016 à 12:48
Bonjour,

voici un petit fichier dans lequel j'ai créé une macro, qui en principe paraissait très simple à faire (masquer des colonnes et mettre une mise en forme conditionnelle) mais quand je l'exécute, ça ne donne pas le résultat voulu.

La première feuille, c'est le fichier tel que je le reçois. (J'ai enlevé les noms qui sont confidentiels, mais le reste, j'y ai pas touché). Dans la 2e feuille, c'est le résultat voulu pour faciliter la lecture pour facturer. Donc, mon premier client, #3520, j'ai à lui faire un crédit pour le fournisseur B, C et D. Donc, ça varie d'un client à l'autre et il va y avoir de plus en plus de clients qui se rajouteront à chaque trimestre. Mais après avoir exécuté ma macro, voir le résultat dans la 3e feuille. J'ai pas compris pourquoi ça n'a pas fonctionné.
Ça, c'était la solution rapide pour préparer la facturation. Mais idéalement, ce serait encore plus facile si je pouvais avoir, à la place, le résultat de la 4e feuille qui lui, ne nécessiterait pas d'exécuter cette macro mais je crains que ça prenne un tableau croisé dynamique, je trouve ça hyper compliqué :(
Mais si ça en prend un, est-ce que ça se met dans une macro ???
dites-moi quelle solution serait la plus simple à faire svp ?

merci
j'ai excel 2010

https://www.cjoint.com/c/FEcpsnkNpGV


A voir également:

9 réponses

Utilisateur anonyme
3 mai 2016 à 01:47
Bonjour Ju@nita,

J'ai trouvé votre exercice vraiment très intéressant ! Voici 2 liens :

Fichier Word 2003 : Note explicative
Fichier Excel 2003 : Exercice

Quand j'ai voulu créer un lien Cjoint avec le fichier Excel 2007, ça a refusé
sans que je sache pourquoi. Aussi, je l'ai converti en fichier Excel 2003,
et là, ça a marché.

La conversion a changé certaines couleurs et enlevé une mise en forme conditionnelle ; mais quand vous lirez ma note explicative, vous saurez
que ça n'a pas d'importance :

Seuls comptent un nouveau format et la nouvelle macro.

Cordialement.  😊
 
0
Ju@nita Messages postés 135 Date d'inscription mardi 11 juin 2013 Statut Membre Dernière intervention 19 mars 2018
3 mai 2016 à 14:12
bonjour Albkan,
Heureuse de voir que l'exercice vous ait plu. J'avais pas eu le choix pour la sauvegarde vu qu'il fallait qu'il soit sauvegardé avec macro. Mais j'ai toujours pas compris pourquoi ma macro ne s'exécutait pas comme il faut. La feuille n'était pourtant pas protégée. Mais votre macro est très intéressante, le fait qu'il y ait une bascule, je ne savais pas qu'on pouvait faire ça. J'ai bien aimé l'exécuter et voir le résultat.
Toujours est-il qu'il serait compliqué que je change manuellement le format de chaque colonne dans le fichier original puisque ce fichier provient de quelqu'un d'autre et qui me l'envoie à chaque trimestre. Le but d'une macro est justement d'éviter d'avoir à faire tout ce travail à chaque fois. Je voudrais, quand je reçois le fichier, cliquer sur ma macro (qui serait dans mes macros personnelles avec raccourci dans ma barre d'accès rapide), et je serais prête à facturer avec le résultat voulu. La dernière option (l'idéal) me paraissait irréalisable. Mais si ça vous semble possible (à michel_m aussi), je serais aux anges. Et on oublierait la première option car c'était soit la solution facile, soit la solution difficile.
Je suis toujours fascinée par les solutions proposées sur ce site car je ne sais pas composer des macros directement dans le VBA. Je les fais avec exécution au fur et à mesure avec "enregistrer une macro". Je sais que ça me limite beaucoup mais j'aimerais tellement avoir toutes vos connaissances !
J'attends vos réponses avec impatience :)
bonne journée.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 3/05/2016 à 22:33
ci joint proposition macro pour "l'ideal"
en feuille synthèse, traitement quasi instantané macro "main" + macro paramétrée par client dans module "sstotaux"

http://www.cjoint.com/c/FEduuQljlQt

le code
Option Explicit
Option Base 1
Dim T_in
Const Code As Integer = 1572
'---------------------------------------------------------
Sub main()
Dim Derlig As Byte, Cptr As Byte

Application.ScreenUpdating = False 'fige défilement écran: confort rapidité
Sheets("synthese").Range("A6:E10000").Clear 'nettoyage
With Sheets("original")
Derlig = .Columns("A").Find("", .Range("A5")).Row - 2 'dernier client
T_in = .Range("A6:CH" & Derlig) 'mémorisation RAM tableau complet: rapidité traitement
For Cptr = 1 To UBound(T_in)
Call par_client(Cptr) 'appel traitement des succursales (client)
Next
End With

With Sheets("synthese")
.Columns("E").NumberFormat = "0.00" 'format 2 décimales
.Activate 'présentation
End With
End Sub
'----------------------------------------------
Sub par_client(Lig)
Dim T_out(), Col As Byte, Cpt As Byte, Ligvid As Integer

For Col = 12 To 85 Step 9
If T_in(Lig, Col) > 0 Then 'si crédit > 0
Cpt = Cpt + 1
ReDim Preserve T_out(5, Cpt) 'mémorisation des traitement pour chaque succursale
T_out(1, Cpt) = T_in(Lig, 1) '#client
T_out(2, Cpt) = T_in(Lig, 2) 'client
T_out(3, Cpt) = Code '#item
With Sheets("original")
T_out(4, Cpt) = .Cells(1, Col - 8) & " " & Format(.Cells(5, Col), "0%") 'fournisseur%
End With
T_out(5, Cpt) = T_in(Lig, Col) 'crédit
End If
Next
Cpt = Cpt + 1
ReDim Preserve T_out(5, Cpt)
T_out(1, Cpt) = "SOUS TOTAL " & T_in(Lig, 2)
T_out(5, Cpt) = T_in(Lig, 86) 'total crédit

'restitution client
With Sheets("synthese")
Ligvid = .Columns("A").Find("", .Range("A5")).Row '1° ligne vide
'restitution T_out
.Cells(Ligvid, "A").Resize(Cpt, 5) = Application.Transpose(T_out)
'mise en gras sous total client
.Rows(Ligvid + Cpt - 1).Font.Bold = True
End With
End Sub

 Michel
0
Ju@nita Messages postés 135 Date d'inscription mardi 11 juin 2013 Statut Membre Dernière intervention 19 mars 2018
4 mai 2016 à 14:10
WOW, je suis très impressionnée par le résultat ! C'est exactement ce que je voulais. Il y a juste deux petites erreurs. Quand j'ai voulu valider si tous les montants y étaient, il manque des lignes dans la feuille synthèse. Par exemple, tous les clients qui ont un montant en négatif qui provient de la colonne AM de la feuille originale n'ont pas cette ligne dans la feuille synthèse. Ex: client 3345, il faudrait qu'on puisse voir : fourn. D (32.71), sinon son total ne serait pas valide. Et tous ceux qui ont un montant dans la colonne CB du fourn. I-A, cette ligne n'y est pas. C'est sûrement pas grand chose. Mais je ne sais pas comment corriger l'erreur :(
Puis-je te demander d'y jeter un coup d'oeil svp ?
un gros merci pour tout ce temps que tu y passes pour moi. C'est énormément apprécié.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 4/05/2016 à 14:36
Bonjour,

effectivement :
changer >0 en =0 dans la macro " par_client"
For Col = 12 To 85 Step 9
If T_in(Lig, Col) = 0 Then 'si crédit = 0
Cpt = Cpt + 1


est ce normal que fournnisseur I A et I B n('est pas de de colonnes "indirect ?

si oui le + simple serait d'insérer 4 colonnes avant BS et BX et de les masquer pour garder le pas de 9 (step 9 dans la macro)
tu dis...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ju@nita Messages postés 135 Date d'inscription mardi 11 juin 2013 Statut Membre Dernière intervention 19 mars 2018
4 mai 2016 à 14:29
ce serait pas plutôt <>0 ??
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
4 mai 2016 à 14:40
Oui !!! excuse
j'ai fait un edit dans mon message précédent concernant les fournisseurs

je repasse tout à l'heure (dentiste)
0
Ju@nita Messages postés 135 Date d'inscription mardi 11 juin 2013 Statut Membre Dernière intervention 19 mars 2018
Modifié par Ju@nita le 4/05/2016 à 15:12
j'ai rajouté 4 colonnes mais ça donne un résultat bizarre. Les sous-totaux ne se font pas.
je vais attendre ton retour. merci
et j'ai oublié de répondre à ton autre question. Les fournisseurs IA et IB n'ont pas de colonne indirect.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
4 mai 2016 à 17:43
ouf!

Ci joint classeur modifié en ajoutant les 4 colonnes aux IA et IB
et en les masquant; sur ton classeur il y a un petit boulot pour changer leur cellule fusionnée : afficher, défusionner - refusionner; le nom fournisseur se centre lui même dans les colonnes visibles

pour tester j'ai ajouté des crédits dans 1A et 1B

http://www.cjoint.com/c/FEepQotkNpt


0
Ju@nita Messages postés 135 Date d'inscription mardi 11 juin 2013 Statut Membre Dernière intervention 19 mars 2018
4 mai 2016 à 18:00
merveilleux ! ça fonctionne à la perfection. T'es un génie !

merci beaucoup Michel et passe une bonne journée (malgré ta visite chez le dentiste) :)
0
Utilisateur anonyme
19 mai 2016 à 12:48
Bonjour Ju@nita,

Désolé de t'avoir fait « faux bond », et de n'avoir pas répondu à ton
message 3. J'ai été tellement débordé ces temps-ci que je n'ai pas
pu revoir ton exercice avant aujourd'hui.

Même si tu as reçu une très bonne solution, et même si tu as clôturé
le sujet, j'ai beaucoup d'informations très intéressantes pour toi,
à commencer par la réponse à une question que tu te posais tout à
fait légitimement :

Dans ton message initial (le tout premier), tu as écris à propos de
ta propre macro : « J'ai pas compris pourquoi ça n'a pas fonctionné. » ;
et dans ton message 3, tu as écris : « Mais j'ai toujours pas compris
pourquoi ma macro ne s'exécutait pas comme il faut. ».

Si ça t'intéresse toujours, cliques sur mon pseudo, et sur mon profil,
cliques sur le bouton bleu « Lui écrire un message ».

Cela parce que j'aurai aussi besoin de te poser une question
d'ordre privé. Je t'enverrai alors un Message Privé, et pour
pouvoir le lire, tu devras cliquer sur la petite enveloppe qui
est tout en haut de ton écran, à droite de ton pseudo.

Pour t'avertir que tu as reçu un MP, cette enveloppe clignote avec
un chiffre blanc sur fond rouge : c'est le nombre de nouveaux MP
que tu as reçu (et pas encore lu).

J'aurai encore beaucoup d'autres informations pour toi,
dont la technique de la « balance ».

Cordialement.  😊
 
0