code dans workbook ou dans un module pour 45 feuilles d'un classeur excel 2007

nasser

XLDnaute Nouveau
Bonjour
Aidez-moi à appliquer aux 45 premières feuilles d’un classeur excel 2007, le code suivant qui marche bien pour une feuille.
Merci


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Date du jour'
Range("I1").Value = "Date :"
Range("J1").Value = Format(Date, "dddd dd mmmm yyyy")


Range("A1") = "SITUATION D'UNE LIGNE BUDGETAIRE "
Range("A3") = "Ministère :"
Range("a4") = "Imputation :"
Range("a5") = "Crédit annuel :"
Range("A6") = "Taux :"
Range("a7") = "Crédit autorisé :"
Range("K12") = "Cumul Avances :"
Range("M12") = "Cumul Reliquats :"
Range("D9") = "Nbre O M :"
Range("A8") = "Taux necessaire :"
Range("i9") = "GRANDE SITUATION"
Range("k9") = "PETITE SITUATION"
Range("m9") = "RELIQUAT "
Range("i10") = "Cons. Ant. "
Range("i11") = "Disponible "
Range("k10") = "Dép.ant./Solde "
Range("k11") = "Disponible "
Range("A13") = "Date "
Range("b13") = "Bénéficiaire "
Range("c13") = "Destination "
Range("d13") = "Groupe "
Range("e13") = "N° O M "
Range("i13") = "Durée "
Range("j13") = "Montant "
Range("k13") = "Durée "
Range("l13") = "Montant "
Range("m13") = "Durée "
Range("n13") = "Montant "
Range("o13") = "Observation"
Range("f13") = "Décision "
Range("g13") = "Zone "
Range("h13") = "Taux "
Range("A13:R13").Font.Bold = True
Range("I9:M9").Font.Bold = True


Range("L12").Formula = "=sum(L14:L100)"
Range("N12").Formula = "=sum(N14:N100)"
Range("J10").Formula = "=sum(j14:j100)"
Range("J11").Formula = "=c7-j10"
'dépenses antérieures'
Range("L10").Formula = "=sum(L14:L100)+sum(N14:N100)"
'Petite situation disponible'
Range("L11").Formula = "=c7-(sum(L12+N12))"

'cumul avance'
Range("L12").Formula = "=sum(L14:L100)"
'cumul reliquat'
Range("N12").Formula = "=sum(N14:N100)"
'Nombre d'O M'
Range("E9").FormulaLocal = "=NBVAL(E14:E100)"
'Ministère en MAJUSCULES'
Range("B3") = UCase(Range("B3"))
'Plage des Bénéficiaires et Destination en MAJUSCULES'
Dim cell As Range
Dim Maplage As Range
Set Maplage = Range("B14:B99,C14:C99")
For Each cell In Maplage
cell.Value = UCase(cell.Value)
Next cell



'formule C=A*B
Range("J14:J99").FormulaR1C1 = "=RC[-2]*RC[-1]"
Range("L14:L99").FormulaR1C1 = "=RC[-1]*RC[-4]"
Range("N14:N99").FormulaR1C1 = "=RC[-1]*RC[-6]"

'credit autorisé'
Range("C7") = Range("C5") * Range("C6")
'taux necessaire'
Range("b8") = "Consommat° antérieure/Crédit autorisé"

If Range("B" & Target.Row).Value <> 0 Then
Lig = Target.Row

' Inscrit la date
Range("A" & Lig).Value = Now()
' Réactive les évènements dans le classeur
Application.EnableEvents = True


End If



End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : code dans workbook ou dans un module pour 45 feuilles d'un classeur excel 2007

Bonjour,

comprends pas bien, en l'état ce code placé dans le module "thisworkbook" doit s'appliquer à toute les feuilles, non ? pour le limiter au 45 premières, à placer sur la première ligne de la procédure :
Code:
If Sh.Index > 45 Then Exit Sub
bon après midi
@+
 

ERIC S

XLDnaute Barbatruc
Re : code dans workbook ou dans un module pour 45 feuilles d'un classeur excel 2007

Bonjour

1/je ne comprends pas trop ton code : à part les lignes contennant "target", pourquoi réécrire sans arrêt les mêmes valeurs....
2/ soit tu fais des copier coller sur tes feuilles
soit tu copies ton code dans un module et tu l'appelles sur chaque feuille

edit bonjour Pierrot
 

nasser

XLDnaute Nouveau
Re : code dans workbook ou dans un module pour 45 feuilles d'un classeur excel 2007

en fait, je ne veux pas des copier coller sur les feuilles. je préfère un module et on l'appelle sur chaque feuille.
veux tu me le faire en excel 2007 afin que je vois. merci pour tout.

Bonjour

1/je ne comprends pas trop ton code : à part les lignes contennant "target", pourquoi réécrire sans arrêt les mêmes valeurs....
2/ soit tu fais des copier coller sur tes feuilles
soit tu copies ton code dans un module et tu l'appelles sur chaque feuille

edit bonjour Pierrot
 

ERIC S

XLDnaute Barbatruc
Re : code dans workbook ou dans un module pour 45 feuilles d'un classeur excel 2007

re

un essai
je n'ai mis l'appel que sur feuil1

tu regardes le code sur feuil1
tu le copies sur les autres feuilles

a part cela je ne comprends pas pourquoi tu réécris toutes les en-têtes et formules à chaque fois mais bon, ce n'est pas mon pb si la macro te convient
 

Pièces jointes

  • exemplecopieES.xlsm
    25.3 KB · Affichages: 40

nasser

XLDnaute Nouveau
Re : code dans workbook ou dans un module pour 45 feuilles d'un classeur excel 2007

Merci beaucoup, je vais essayé ça et je te rends compte demain matin. Entre temps, veux tu me donner un coup de pouce pour empêcher les doublons dans la colonne ("E14:E100")?
Bonne soirée.


re

un essai
je n'ai mis l'appel que sur feuil1

tu regardes le code sur feuil1
tu le copies sur les autres feuilles

a part cela je ne comprends pas pourquoi tu réécris toutes les en-têtes et formules à chaque fois mais bon, ce n'est pas mon pb si la macro te convient
 

ERIC S

XLDnaute Barbatruc
Re : code dans workbook ou dans un module pour 45 feuilles d'un classeur excel 2007

Bonjour

pour les doublons, quelle action veux-tu faire ?
effacer, supprimer le cellule...
a quel moment veux tu regarder si les doublons existent (à la saisie, par un bouton....)
 

nasser

XLDnaute Nouveau
Re : code dans workbook ou dans un module pour 45 feuilles d'un classeur excel 2007

Merci pour ton attention toute particulière.
En fait, je veux empêcher les doublons à la saisie et que le message "Ce numéro existe déjà!" s'affiche.

Veux tu m'aider par un code vb sur la plage ("G14:G100") ; bien sûr cette formule est pour la cellule G14 :
=SI(OU(C14="togo";C14="mali";C14="congo";C14="burkina";C14="niger";C14="bénin";C14="cameroun";C14="tchad";C14="côte d'ivoire";C14="senégal";C14="nigeria";C14="gabon";C14="centrafrique";C14="guinee";C14="guinee-bissau";C14="comores";C14="cap-vert";C14="comores";C14="gambie";C14="ghana";C14="liberia";C14="sierra leone";C14="guinée équatoriale");"cedeao";"RM")
Merci et à bientôt.


Bonjour

pour les doublons, quelle action veux-tu faire ?
effacer, supprimer le cellule...
a quel moment veux tu regarder si les doublons existent (à la saisie, par un bouton....)
 

ERIC S

XLDnaute Barbatruc
Re : code dans workbook ou dans un module pour 45 feuilles d'un classeur excel 2007

re

doublons à la saisie, peut-être avec le code suivant, plage à adapter j'ai testé en colonne A

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'doublons
If Target.Count > 1 Then Exit Sub
If Intersect(Target, Range("A1:A100")) Is Nothing Then Exit Sub
Dim c As Range
 valid = WorksheetFunction.CountIf(Range("A1:A100"), Target.Value)
 If valid > 1 Then
    MsgBox ("valeur :" & Target.Value & " existe - effacement")
    Target.ClearContents
End If
End Sub
 

ERIC S

XLDnaute Barbatruc
Re : code dans workbook ou dans un module pour 45 feuilles d'un classeur excel 2007

re

pour le ou (je n'ai pas écrit tous les termes)

Code:
    Range("G14:G100").FormulaR1C1 = _
        "=IF(OR(RC[-4]=""togo"",RC[-4]="" liberia"",RC[-4]=""sierra leone"",RC[-4]=""guinée équatoriale""),""cedeao"",""RM"")"
 

nasser

XLDnaute Nouveau
Re : code dans workbook ou dans un module pour 45 feuilles d'un classeur excel 2007

Tu m'as rendu simple la vie.
excuz mw d'avoir trainé a te répondre. C'est parce que j'ai essayé la même chose pour ceci en vain :

1) Dans la plage ("014:0100") et pour la cellule I14 :
=SI(I14=K14+M14;"Soldé";"Retour non constaté")

2) Dans la plage ("F14:F100) et pour la cellule F14 :
=CONCATENER(G14;D14)

3) Dans la plage ("H14:H100) et pour la cellule H14 :
=SI(F14="cedeao1";"120 000";SI(F14="cedeao2";"105 000";SI(F14="cedeao3";"90 000";SI(F14="cedeao4";"75 000";SI(F14="cedeao5";"45 000";SI(F14="RM1";"195 000";SI(F14="RM2";"165 000";SI(F14="RM3";"142 500";SI(F14="RM4";"120 000";SI(F14="RM5";"97 500"))))))))))

Je ne vais plus te déranger pour cette base si j'ai la solution car je pourrai me débrouiller pour la suite. Merci infiniment.
 

ERIC S

XLDnaute Barbatruc
Re : code dans workbook ou dans un module pour 45 feuilles d'un classeur excel 2007

Re

Pas de miracle : le principe reste simple pour beaucoup de formules :
Sous 2007
1/ tu écris ta formule en O14
tu sélectionnes l'onglet développeur et tu fais enregistrer macro
tu sélectionnes O14
dans la barre de formule tu sélectionnes toute la formule
ctrlC ctrlV et entrée
onglet développeur
arrêter macro

si tu vas voir dans les modules vba tu trouveras
Code:
Sub Macro1()
'
' Macro1 Macro
'
'
    Range("O14").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(RC[-6]=RC[-4]+RC[-2],""Soldé"",""Retour non constaté"")"
    Range("O15").Select
End Sub

tu as la syntaxe que tu transformes pour ta zone

Code:
Sub Macro1()
'
' Macro1 Macro
'
'
    Range("O14:0100").FormulaR1C1 = _
        "=IF(RC[-6]=RC[-4]+RC[-2],""Soldé"",""Retour non constaté"")"

End Sub

et c'est tout

à tester sur tes points 2 & 3
 

nasser

XLDnaute Nouveau
Re : code dans workbook ou dans un module pour 45 feuilles d'un classeur excel 2007

j'ai essayé. sans succès. peut être une erreur dans la procédure.
si possible, un EXEMPLE.

Re

Pas de miracle : le principe reste simple pour beaucoup de formules :
Sous 2007
1/ tu écris ta formule en O14
tu sélectionnes l'onglet développeur et tu fais enregistrer macro
tu sélectionnes O14
dans la barre de formule tu sélectionnes toute la formule
ctrlC ctrlV et entrée
onglet développeur
arrêter macro

si tu vas voir dans les modules vba tu trouveras
Code:
Sub Macro1()
'
' Macro1 Macro
'
'
    Range("O14").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(RC[-6]=RC[-4]+RC[-2],""Soldé"",""Retour non constaté"")"
    Range("O15").Select
End Sub

tu as la syntaxe que tu transformes pour ta zone

Code:
Sub Macro1()
'
' Macro1 Macro
'
'
    Range("O14:0100").FormulaR1C1 = _
        "=IF(RC[-6]=RC[-4]+RC[-2],""Soldé"",""Retour non constaté"")"

End Sub

et c'est tout

à tester sur tes points 2 & 3
 

Staple1600

XLDnaute Barbatruc
Re : code dans workbook ou dans un module pour 45 feuilles d'un classeur excel 2007

Bonjour à tous

Voici une autre façon de faire pour ce qui est de recopier des plages de cellules (formules et format compris sauf largeur de colonne entre autres)
Je mets un exemple à tester sur un classeur vierge avec 3 ou 4 feuilles par exemple.
Prendre soin de nommer la 1ere feuille MODELE puis de lancer la macro: MacroPOUR_TEST
Ensuite lancer la macro a
(c'est cette macro qu'il te faudra ensuite adapter à ta problématique)
Une fois a exécutée, tu verras que dans toutes les feuilles du classeur, dans la plage A1:B4, tu auras la copie de cette plage (format, données et formules) de la feuille MODELE
VB:
Sub MacroPOUR_TEST()
'macro servant juste à créer un exemple de modèle (donc macro à zapper par la suite, une fois le test fait)
With Range("A1")
    .Value = "DATE"
        With .Offset(, 1)
            .Value = "J+1"
            With .Item(2).Resize(3)
            .FormulaR1C1 = "=R2C1+(ROW()-1)"
            .NumberFormatLocal = "jjjj j/m/aaaa"
            End With
        End With
    .Offset(1).FormulaR1C1 = "=TODAY()"
        With .CurrentRegion
            .Borders.LineStyle = 1
            .HorizontalAlignment = xlCenter
            .ColumnWidth = 17
        End With
        With .Resize(, 2)
            .Font.Bold = True
            .Interior.ColorIndex = 17
        End With
End With
End Sub
VB:
Sub a()
Dim arrWSN() As String, i%
'crée un tableau avec le nom de toutes les feuilles du classeur actif
ReDim arrWSN(1 To ActiveWorkbook.Sheets.Count)
For i = 1 To Sheets.Count
arrWSN(i) = Sheets(i).Name
Next i
'permet de recopier une plage de cellules définies issue d'une d'une feuille "MODELE"
'sur tous les feuilles d'un même classeur
Worksheets(arrWSN).FillAcrossSheets Worksheets("MODELE").Range("A1:B4") ' ici adapter l'adresse de la plage de cellules
End Sub
 

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 329
Messages
2 087 335
Membres
103 520
dernier inscrit
Azise