Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Simplification de code...

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

belerofon

XLDnaute Occasionnel
Bonsoir les couche tard...
Je me pose une question existentielle...

Existe t il un moyen plus simple d ecrire ce morceau de code :


Peut être un cerveau moins embrumé que le mieux serait plus efficace...
Merci,
J.
 
Re : Simplification de code...

Re


Merci d'avoir compris le sens de mes messages.

Ainsi avec cette nouvelle pièce jointe, je vais pouvoir tester sur mon PC et te dire ou cela coince.

PS: Si tu avais joint la PJ adéquate dès ton 1er message, ton fil serait plus maigre de treize messages 🙄
 
Re : Simplification de code...

Re

Désolé mais cela aussi c'était dans la charte...
Remarque, c'est une façon de finir par la connaitre cette fameuse charte
Faire d'abord tout le contraire de ce qu'elle préconise, puis un peu plus tard, se rendre compte que finalement l'appliquer c'est indolore et plutot utilise pour soi, mais surtout pour le forum et ses membres... ou le contraire 😉
Evite ou préviens de la présente d'une procédure WorkBook_Open() dans une PJ
VB:
'Private Sub Workbook_Open() ' à proscrire dans les PJ
'    Application.WindowState = xlNormal
'    Application.Width = 300
'    Application.Height = 300
'    Application.Left = 300
'    Application.Top = 150
'    UserForm1.Show
'End Sub

Je retourne faire des tests.
 
Dernière édition:
Re : Simplification de code...

Staple,
Juste pour que l'on soit bien d accord sur deux points :
- Tu as effectivement raison sur le fait que l initiateur d'un fil soit le bon garant de l alimentation en fichier exemple pour permettre a d autres de tester le bon fonctionnement de leur code pour eviter a ce qu ils aient trop de contraintes, puisqu il s agit de services rendus gratieusement...

- Peut etre n est ce pas le cas pour d autres mais j ai fait expres de ne pas mettre mon fichier exemple en double dans deux fils differents pour des raisons citées plus haut dans le fil...
La raison est simple, entre temps le code avait changé et pour les memes raisons que citees ci dessus , tes reponses n etaient plus en accord avec le code "mis a jour" et il me semblait donc evident ( et je le fait bien volontiers puisque c est le but) qu il m appartenait à moi de m adapter a ce changement et donc de retravailler en changeant les valeurs changées dans ta rréponse et non à toi de t adapter a mon rythme de modification de mon code source...

Que l'on s entende donc bien, je ne demande pas qu on me serve tout chaud dans le bec, quand je bute sur un probleme je demande un coup de pouce mais je souhaite quand meme faire fonctionner mon bulbe...

Voila Staple, ceci etant dit, j essayerais de faire encore davantage d effort et saches que je t estime beaucoup pour ton assiduite , ta rapidité et ton savoir faire... donc merci pour tout, et j espere que tu ne me deteste pas , je suis juste un ptit gars qui s est decouvert une passion pour Excel et qui avance dans sa jungle a tatons...

J.

PS : Oops désolé pour le Workbook_Open()
oublié de le mettre en commentaire avant d envoyer le fichier exemple
 
Dernière édition:
Re : Simplification de code...

Re

Voici ce que donne mes tests
J'ai mis ce code (juste pour servir de test)
Ce code ne produit pas d'erreur sur mon PC, mais pour le moment ne sert qu'à monter que ma simplication peut fonctionner en suivant cette piste.

Testes stp cette macro sur ton PC (juste la macro : sans passer par l'userform)

Je poursuis plus avant mes tests.
VB:
Sub MacroDE_TEST()
Dim dlg&, i As Byte, tBlo, Tvals
'*****************************************************************************************************

'*****************************************************************************************************
' Méthode Calcul de la valeur de la collection
tBlo = _
        Split("A1C/A2C/A5C/A10C/A20C/A50C/A1E/A2E/A2EC/B1C/B2C/B5C/B10C/B20C/B50C/B1E/B2E/B2EC", "/")
    Tvals = _
    Array(0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 2, 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 2)
MsgBox UBound(tBlo) = UBound(Tvals) '-> test 1 = ok"

With Sheets("Base")
dlg = .Range("A65536").End(xlUp).Row
MsgBox "La dernière ligne de la colonne A de la feuille Base: " & _
vbCrLf & dlg 'ici ca marche toujours

    With Application
        For i = 0 To UBound(tBlo)
        Select Case i + 1
        Case 3 To 11, 13 To 17
        'tBlo(i) = .WorksheetFunction.CountIf(.Cells(1, i).Resize(dlg), "X") * Tvals(i)
        'ligne insérée pour voir ce qui se passe
        .Cells(i, "W") = .WorksheetFunction.CountIf(.Cells(1, i).Resize(dlg), "X") * Tvals(i)
        End Select
    Next i
End With
End With
End Sub
 
Re : Simplification de code...

Re

Donc l'erreur n'est plus là 😉

Pourquoi ?
(J’espérais que tu me le demanderais 😉 )

Parce que quand on utilise Split , le tableau ( Array en VBA) commence à 0 et non à 1
Voila l'explication de l'erreur que tu as rencontrée précédemment.

Maintenant, il reste à utiliser (ou pas) cette syntaxe en mode réel et non plus en mode test.

C'est la prochaine étape, et je m'y attelle de suite.

(Tu peux essayer de ton côté aussi bien évidemment)

PS: Tu devrais aussi avoir des valeurs affichées dans la colonne W de la feuille Base, non ?
 
Re : Simplification de code...

Pour l erreur je te fais confiance, je suis pas encore arrivé au stade des tableaux dans mon cheminement d apprentissage, par contre j etais deja en train de trifouiller ton code, kestucroi ? 🙂
 
Re : Simplification de code...

Re


En regardant mieux ta pièce jointe, je m'aperçois que je suis en train de faire fausse route (et pire je m'embrouille les méninges )

A quoi correspondent les noms suivants (qui ne sont plus valides dans ta PJ au fait)
Annee =#REF!$W$35:$W$47
Nom =#REF!$W$32:$W$33
Pays =#REF!$W$1:$W$20
Valeur =#REF!$W$22:$W$30
Et à quoi correspond A1C par exemple ?
(Car je vois pas de déclaration du style
Dim A1C as ...

Merci d'éclairer ma lanterne.
 
Dernière édition:
Re : Simplification de code...

Euh, t as eu ces reference ou exactement? je me servait de ces noms pour tester differentes methodes que je pensait capables de fournir un résultat mais en vain... donc du coup j ai arreter de me servir de ces variables...

Effectivement les A1C et compagnies ne sont pas déclarées :s avec mon "code" , tu sais celui qu on cherches a remplacé il faut croire que meme sans les avoir declarées ca fonctionnait donc j ai laissé comme ca plutot que de faire des betises...

A1C correspond a la valeur en euros de la somme de toutes les pieces de 1 centime de la collection "Julien"
en réalité A correspond a Julien, B a Brigitte, et ensuite 1C pour 1centime 1E pour 1 euro 2EC pour 2 euros Commemorative
 
Re : Simplification de code...

Re

belerofon
Pour voir les noms, exécute cette macro:
VB:
Sub VoirLesNoms()
' Macro1 Macro
' Macro enregistrée le 08/12/2011 par Staple
Dim RAZ, m$, t$
t = "Remise à Zéro": m = "Retour du classeur à l'état initial?"
On Error Resume Next
Sheets.Add(Before:=Sheets("Base")).Name = "VoirNoms"
With Sheets("VoirNoms")
    .Activate: .[A1].ListNames
    RAZ = 1 - MsgBox(m, 0, t): Application.DisplayAlerts = RAZ
    .Delete
End With
End Sub

ou en allant au plus simple:
(mais moins fun pour moi 😉)
1) Sélectionne une cellule en ligne 1 d'une colonne vide de la feuille Base
(X1: par exemple)
2) Insertion/Noms/Coller/Coller une liste

PS: je repasse plus tard dans ton fil.
Bonne nuit.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
6
Affichages
366
Réponses
10
Affichages
871
Réponses
3
Affichages
965
Réponses
0
Affichages
981
Réponses
33
Affichages
3 K
  • Question Question
Réponses
10
Affichages
943
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…