Incompatibilité de deux modules VBA dans un même fichier

Résolu/Fermé
el-doyon Messages postés 42 Date d'inscription mardi 13 octobre 2009 Statut Membre Dernière intervention 3 février 2017 - Modifié par el-doyon le 2/02/2017 à 11:25
el-doyon Messages postés 42 Date d'inscription mardi 13 octobre 2009 Statut Membre Dernière intervention 3 février 2017 - 3 févr. 2017 à 07:15
Bonjour à tous,
habituellement j'utilise deux codes récupérés sur le forum dans deux fichiers excel séparés.
Je rencontre un problème lorsque je souhaite les utiliser dans le même fichier excel.
- Le premier code insère des lignes dans mon tableau, ci dessous le code :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Lg%, Rep
If Not Application.Intersect(Target, Columns("a")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
Lg = Target.Row '- 1 (si rajout de la ligne au dessus sinon tel quel pour en dessous)'
Do
Rep = Application.InputBox("Combien de lignes à ajouter ?", "Ajoute lignes", 1, Type:=1)
If Rep = False Then Exit Sub 'bouton Annuler
Loop While Rep = ""

Rows(Lg).Copy
Range(Rows(Lg + 1), Rows(Lg + Rep)).Insert
Application.CutCopyMode = False
On Error Resume Next 'si ligne vide
Range(Rows(Lg + 1), Rows(Lg + Rep)).SpecialCells(xlCellTypeConstants, 23).ClearContents
End If
End Sub

- Le deuxième effectue la somme des cellules qui partage la même couleur. Il est placé dans un module mais pour actualiser les calculs, un code ce trouve sur la même feuille que le code 1 :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Calculate
End Sub

le module 1 :
Function SOMME_SI_COULEUR(PlageSomme As Range, PlageCouleur As Range) As Variant
'*********************************************************
' Effectuer la somme des cellules en couleur *
'*********************************************************
Dim Cel As Range
Dim Som As Double

If PlageCouleur.Cells.Count > 1 Then
SOMME_SI_COULEUR = CVErr(xlErrValue)
Exit Function
End If
For Each Cel In PlageSomme
If Cel.Interior.ColorIndex = PlageCouleur.Interior.ColorIndex Then Som = Som + Cel
Next
SOMME_SI_COULEUR = Som
End Function

Quelqu'un peut-il m'aider à résoudre ce problème et faire en sorte que les deux codes fonctionnent au sein du même fichiers ?
Merci d'avance.



A voir également:

2 réponses

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
2 févr. 2017 à 13:40
Bonjour,

Je rencontre un problème
Quel problème ?
eric
1
el-doyon Messages postés 42 Date d'inscription mardi 13 octobre 2009 Statut Membre Dernière intervention 3 février 2017
2 févr. 2017 à 13:52
bonjour Eric,
effectivement j'ai oublié de le préciser. Alors dès que j'utilise le code 1 pour insérer 1 ou des lignes, cela bloque l'utilisation du code 2. il s'affiche alors dans la cellule #valeur. Lorsque j'utilise le code 2 sans rajouter de lignes, aucun problème.
Francis
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
2 févr. 2017 à 14:03
Essaie en nommant tes plages PlageSomme et PlageCouleur et en utilisant ces noms dans l'appel de la fonction.
Sinon déposer un fichier.

Depuis 2009 que tu es inscrit tu n'as pas remarqué qu'on pouvait mettre en forme le code ?
Merci de le faire sur un code indenté parce que là ça ne donne pas envie de le lire.
eric
0
el-doyon Messages postés 42 Date d'inscription mardi 13 octobre 2009 Statut Membre Dernière intervention 3 février 2017 > eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024
2 févr. 2017 à 15:39
lol oui effectivement j'ai découvert la mise en forme du code suite à ta remarque. Je vais déposer un fichier pour que ça soit plus clair. Merci
0
el-doyon Messages postés 42 Date d'inscription mardi 13 octobre 2009 Statut Membre Dernière intervention 3 février 2017
2 févr. 2017 à 23:00
re bonjour,
je joins un fichier exemple pour que ça soit plus clair.
http://www.cjoint.com/c/GBcv3gUoG3a__merci de votre aide
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
2 févr. 2017 à 23:39
J'ai dû modifier dans les 2 modules.
Et comme il y avait toujours de la résistance pour ne pas forcer le recalcul de toutes les formules j'ai ajouté un nom sommeCoul qui doit avoir toutes les cellules ayant cette fonction (puisque ces cellules se baladent avec tes insertions). Le compléter si tu ajoutes des SOMME_SI_COULEUR().
https://www.cjoint.com/c/GBcwHTNVQx2
eric
0
el-doyon Messages postés 42 Date d'inscription mardi 13 octobre 2009 Statut Membre Dernière intervention 3 février 2017 > eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024
2 févr. 2017 à 23:52
Eric ta solution fonctionne jusqu'à ce que j'enlève la couleur d'une cellule déjà prise en compte dans la somme (ce qui peut arriver dans mon tableau). Le re-calcul ne s'opère pas :(
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
3 févr. 2017 à 00:23
Le recalcul se fait en sélectionnant une nouvelle cellule.
Tu le fais ? Parce que je n'ai pas touché à ce fonctionnement normalement.

Sinon dans :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
tu remplaces :
Calculate
par :
[SommeCoul].Dirty
et tu dis...

eric
0
el-doyon Messages postés 42 Date d'inscription mardi 13 octobre 2009 Statut Membre Dernière intervention 3 février 2017 > eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024
3 févr. 2017 à 07:15
Bonjour Eric, c'est impeccable en remplaçant Calculate par [SommeCoul].Dirty
Cela fonctionne exactement comme je le souhaitais. Merci de ton aide et de ta patience.
0