[Résolu] Appeler une Private Sub dans une macro

Lebonetletruand

XLDnaute Occasionnel
Bonsoir à tous,

Je travaille actuellement sur une petite application permettant l'édition d'états de commande.

J'ai créé une macro permettant la création d'une feuille d'analyse des réponses aux appels d'offres. Pour éviter les erreurs, dès que l'on clique sur la commande "Analyse des appel d'offres", une feuille du même nom est créée. Si elle existe déjà (parce que la manip a été faite précédemment), la feuille existante est écrasée.

Dans cette feuille créée, je souhaite créer une macro type Private sub Worksheet_SelectionChange mais je ne peux la créer dans cette feuille directement puisqu'elle est regénérée à chaque analyse. Je souhaitais donc utiliser un truc du style dans la macro de création de la feuille :

Set Wb = Workbooks("Etats individuels de commande.xls")
With Wb.VBProject.VBComponents("nom de la feuille créée").CodeModule
X = .CountOfLines
.InsertLines X + 1, ".........."
.InsertLines X + 2, ".........."
.InsertLines X + 3, "......"

Mais ça ne marche pas...çà bloque sur les Set a1 = Range....

L'appel à cette macro dans la première ne fonctionne pas non plus puisque je ne sais pas comment l'appeler. Je ne parviens pas à utiliser les codes Call ou Application.Run dans le cas d'une Private Sub
Pourriez vous m'aider s'il vous plaît.

Merci par avance.
 
Dernière édition:

Lebonetletruand

XLDnaute Occasionnel
Re : Appeler une Private Sub dans une macro

En plus c'est moi qui avait généré cette première discussion.... ^^

Je n'avais pas vu la deuxième partie de la réponse à l'époque.
D'ailleurs c'est le code de Softmama que j'ai repris

J'essaye et te tiens au courant

Merci MJ pour ta réactivité, comme d'habitude ^^
 

Lebonetletruand

XLDnaute Occasionnel
Re : Appeler une Private Sub dans une macro

Bon.... j'ai essayé
déjà, j'ai du mal à comprendre le code, comme ça bloque tout le temps, je ne sais plus où donner de la tête ^^
Tant pis, je vais essayer de trouver une autre solution, çà bloque sans cesse sur les Range("X"). j'ai l'impression qu'il ne supporte pas les " " sur une ligne .insertline
la ligne se met en rouge et il plante
Ci dessous la macro que je souhaite intégrer dans ta formule
Private Sub Worksheet_SelectionChange ()
Workbooks("Commande groupée phyto - fichier de suivi.xls").Worksheets("Synthèse Analyse Réponse AO").Select
For i = 8 To 127
If Cells(i, 12) = Range("H6").Value Then
Cells(i, 9 & 10 & 11).Clear
If Cells(i, 12) = Range("I6").Value Then
Cells(i, 8 & 10 & 11).Clear
If Cells(i, 12) = Range("J6").Value Then
Cells(i, 8 & 9 & 11).Clear
If Cells(i, 12) = Range("K6").Value Then
Cells(i, 8 & 9 & 10).Clear
End If
End If
End If
End If
Next i
End Sub
' Conserve la valeur minimale de la ligne et efface les autres
 

ROGER2327

XLDnaute Barbatruc
Re : Appeler une Private Sub dans une macro

Bonjour à tous
Un problème de syntaxe, probablement.
Code:
[B][COLOR=DarkSlateGray]Sub toto()
Dim x&, wb As Object
  Sheets.Add
  Set wb = ThisWorkbook 'adapter...
  With wb.VBProject.VBComponents(wb.ActiveSheet.Name).CodeModule 'adapter...
    x = .CountOfLines
    .InsertLines x + 1, "Private Sub Worksheet_SelectionChange()"
    .InsertLines x + 2, "Workbooks(" & Chr(34) & "Commande groupée phyto - fichier de suivi.xls" & Chr(34) & ").Worksheets(" & Chr(34) & "Synthèse Analyse Réponse AO" & Chr(34) & ").Select"
    .InsertLines x + 3, "For i = 8 To 127"
    .InsertLines x + 4, "If Cells(i, 12) = Range(" & Chr(34) & "H6" & Chr(34) & ").Value Then"
    .InsertLines x + 5, "Cells(i, 9 & 10 & 11).Clear"
    .InsertLines x + 6, "If Cells(i, 12) = Range(" & Chr(34) & "I6" & Chr(34) & ").Value Then"
    .InsertLines x + 7, "Cells(i, 8 & 10 & 11).Clear"
    .InsertLines x + 8, "If Cells(i, 12) = Range(" & Chr(34) & "J6" & Chr(34) & ").Value Then"
    .InsertLines x + 9, "Cells(i, 8 & 9 & 11).Clear"
    .InsertLines x + 10, "If Cells(i, 12) = Range(" & Chr(34) & "K6" & Chr(34) & ").Value Then"
    .InsertLines x + 11, "Cells(i, 8 & 9 & 10).Clear"
    .InsertLines x + 12, "End If"
    .InsertLines x + 13, "End If"
    .InsertLines x + 14, "End If"
    .InsertLines x + 15, "End If"
    .InsertLines x + 16, "Next i"
    .InsertLines x + 17, "End Sub"
  End With
End Sub[/COLOR][/B]
Testé. Fonctionnel. Reste à adapter, mais sans classeur, ce n'est pas facile...
ROGER2327
#4430


Samedi 28 Haha 138 (Fuite d' Ablou, SQ)
12 Brumaire An CCXIX
2010-W44-2T22:03:44Z
 

kjin

XLDnaute Barbatruc
Re : Appeler une Private Sub dans une macro

Bonjour,
@Lebonetletruand
Il n'y a pas de formule mais un code VBA
Code:
Cells(i, 8 & 9 & 11).Clear
:confused:, étonnant pour le moins
Il y a quand même bien des questions
Pourquoi une macro événementielle qui s'executera à chaque click !
Pourquoi integrer le nom d'un classeur/nom de feuille d'un un module de feuille, à moins que la macro n'agisse sur un autre classeur, et dans ce cas, écrite comme ça, tu risques qq soucis
Maintenant, j'ai qq doute quant à l'utilité de la chose mais tu me contrediras en fournissant qq explications complémentaires
Pour ton pb, s'agissant d'une variable texte, les guillemets doivent être doublés
A+
kjin
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Appeler une Private Sub dans une macro

Re... bonsoir kjin
Je me suis borné à écrire la procédure souhaitée dans la nouvelle feuille.
Bien entendu, j'ignore pourquoi la procédure est écrite, et on peut se poser des questions à ce sujet...
Bonne nuit.

ROGER2327
#4432


Samedi 28 Haha 138 (Fuite d' Ablou, SQ)
12 Brumaire An CCXIX
2010-W44-2T23:08:52Z
 

ROGER2327

XLDnaute Barbatruc
Re : Appeler une Private Sub dans une macro

Re...
J'avais bien compris. C'était juste pour abonder dans votre sens, en indiquant à notre ami que

  1. on peut écrire une procédure dans un module ;
  2. ce faisant, on ne dit rien de la validité de cette procédure.
Pas de souci, donc...
ROGER2327
#4433


Samedi 28 Haha 138 (Fuite d' Ablou, SQ)
12 Brumaire An CCXIX
2010-W44-2T23:20:30Z
 

Lebonetletruand

XLDnaute Occasionnel
Re : Appeler une Private Sub dans une macro

Bonjour Kjin, Bonjour Roger,

Désolé pour la faute de syntaxe sur le terme "code". Pour les questions... je vais essayer de m'expliquer :
La macro évenementielle agit dans une feuille d'analyse des appel d'offres. Dans cette feuille, seule une colonne est accessible aux lecteurs, le reste est verrouillé. Cette colonne lui permet, à partir d'un menu déroulant, de choisir le fournisseur retenu . L'objectif de cette macro est qu'à chaque sélection d'un produit pour un fournisseur, les autres fournisseurs s'effacent. D'où une macro à chaque clic. Voici pour la première réponse.
Ensuite, la macro corrigée par Roger est écrite dans une feuille pas dans un module (d'ailleurs, je ne connais pas la différence, j'écris où ça marche, et quand ça ne marche pas, je ne sais pas résoudre ^^ je suis débutant débutant dirons nous).

Quant à l'utilité de la chose... ben je ne sais pas trop si ce n'est que je veux avoir des cellules qui s'effacent lorsque je choisis un fournisseur dans un menu déroulant. S'il y a d'autres méthodes pourquoi pas, je suis preneur. Je ne sais pas où écrire une private sub pour qu'elle fonctionne à chaque changement de cellule si ce n'est dans la feuille en question. J'ai essayé de la mettre dans un module, ça ne fonctionne pas.
La macro agit dans le même classeur.

Roger merci pour tes efforts, il y a erreur 9 l'indice n'appartient pas à la selection. Je ne comprends pas, lorsque j'applique ton code dans un nouveau classeur, elle fonctionne, sinon, elle me met ce code erreur... Tant pis, je vais créer un nouveau classeur, je l'appelerai du même nom. Je commence à perdre patience... et tout ça me donne mal au crâne. En tout cas, je te remercie pour tes informations très utiles.
 

Lebonetletruand

XLDnaute Occasionnel
Re : Appeler une Private Sub dans une macro

Merci Kjin,

Les symptômes ont disparu depuis que j'ai créé un nouveau classeur au lieu d'une simple feuille. Le classeur d'origine contient beaucoup de noms et adresses, donc il m'est difficile de le mettre en ligne. Mais je vous remercie quand même pour votre disponibilité et votre réactivité. A bientôt.
 

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 952
Membres
103 989
dernier inscrit
jralonso