Erreur de syntaxe bva
Bonjour à tous,
J ai 4 macros qui fonctionnent bien individuellement, j ai essaye de rassembler les 4 en une et la...ca ne fonctionne pas.
J'avais déjà réussi à le faire mais je ne vois pas comment faire.
Auriez vous une idée ?
Cordialement
Bonjour,
Un essai ...
Option Explicit
Sub totale()
Dim fd As Worksheet, fc As Worksheet, ft As Worksheet, cell As Range
Dim dico As Object
Dim i&, derLn&, lgn&, ln&, d&
Dim DerLig As Long
Dim PremLig As Long
Dim Plage As Range
Application.ScreenUpdating = False
With Sheets("données")
.Activate ' active la feuille au besoin
DerLig = Cells(Rows.Count, "C").End(xlUp).Row ' trouve la dernière ligne de la colonne C < ajuster au besoin
.Sort.SortFields.Clear ' en préparation du nouveau tri
' détermine les filtres du tri
.Sort.SortFields.Add2 Key:=Range("C1:C" & DerLig) _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Sort.SortFields.Add2 Key:=Range("G1:G" & DerLig) _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Sort.SortFields.Add2 Key:=Range("F1:F" & DerLig) _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With .Sort ' prépare le tri
.SetRange Range("A2:Q" & DerLig) ' de la colonne A à la colonne Q
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply ' applique le tri
End With
End With
With Sheets("données").Range("A1:B100,D1:D100") 'Sélection des plages où doit s'appliquer la MeF
'Supprime les MFC existantes
.FormatConditions.Delete
'Ajoute une condition (Vrai lorsque la cellule est non vide)
.FormatConditions.Add Type:=xlExpression, Formula1:="=E1=""Supplay"""
.FormatConditions.Add Type:=xlExpression, Formula1:="=E1=""RAS"""
.FormatConditions.Add Type:=xlExpression, Formula1:="=E1=""Crit"""
.FormatConditions.Add Type:=xlExpression, Formula1:="=E1=""Randstad"""
.FormatConditions.Add Type:=xlExpression, Formula1:="=E1=""CDI"""
.FormatConditions.Add Type:=xlExpression, Formula1:="=E1=""CDD"""
With .FormatConditions(1)
'Définit la couleur de fond de la cellule lorsque la condition sera vraie.
.Interior.Color = RGB(255, 0, 0) '.Interior.ColorIndex = 15 'Gris
End With
With .FormatConditions(2)
.Interior.Color = RGB(255, 255, 0)
End With
With .FormatConditions(3)
.Interior.Color = RGB(120, 120, 120)
End With
With .FormatConditions(4)
.Interior.Color = RGB(51, 51, 255)
End With
With .FormatConditions(5)
.Interior.Color = RGB(0, 204, 0)
End With
With .FormatConditions(6)
.Interior.Color = RGB(0, 255, 51)
End With
End With
Set fd = Sheets("données")
Set fc = Sheets("Liste clients")
Set ft = Sheets("Test")
Set dico = CreateObject("Scripting.Dictionary")
For i = 2 To fc.Range("A" & Rows.Count).End(xlUp).Row
dico(fc.Range("A" & i).Value) = ""
Next i
'initialisation
derLn = Range("A" & Rows.Count).End(xlUp).Row
For i = derLn To 2 Step -1
If Not (dico.exists(Range("A" & i).Value) And Range("B" & i) = "") Then
Range("A" & i & ":R" & i).Delete Shift:=xlUp
End If
Next i
derLn = Range("A" & Rows.Count).End(xlUp).Row
For i = derLn To 2 Step -1
Range("A1:G1").Copy
Range("A" & i & ":G" & i).Insert Shift:=xlDown
Next i
Range("A1:G1").Delete Shift:=xlUp
'Report
For i = 3 To fd.Range("A" & Rows.Count).End(xlUp).Row
If fd.Range("C" & i) <> "" Then
Set cell = ft.Range("A:G").Find(fd.Cells(i, 3).Value, lookat:=xlWhole)
If Not cell Is Nothing Then
lgn = cell.Row
'If cell.Offset(2, 0) = "" Then
If Cells(lgn + 2, 2) = "" Then
cell.Offset(1, 0).Resize(1, 18).Insert Shift:=xlDown
fd.Range("A2:R2").Copy
cell.Offset(2, 0).Resize(1, 18).Insert Shift:=xlDown
Cells(lgn + 1, 1).Offset(1, 2).Delete Shift:=xlToLeft
End If
d = 0
Do Until Cells(lgn + 2 + d, 1) = ""
d = d + 1
Loop
ln = lgn + 2 + d
Range("A" & ln & ":Q" & ln).Insert Shift:=xlDown
fd.Range("A" & i & ":B" & i).Copy Range("A" & ln)
fd.Range("D" & i & ":R" & i).Copy Range("C" & ln)
End If
End If
Next i
With Sheets("données")
' début de l'ajout
DerLig = .Cells(Rows.Count, "A").End(xlUp).Row
Set Plage = .Range("H2:H" & DerLig)
Plage.FormulaR1C1 = "=IF(RC[-1]=""équipe apres-midi"",""14:00"",IF(RC[-1]=""équipe matin"",""6:00"",IF(RC[-1]=""journée 1"",""7:00"",IF(RC[-1]=""journée 2"",""8:00"",IF(RC[-1]=""journée 3"",""9:00"",RC[0])))))"
Set Plage = .Range("J2:J" & DerLig)
Plage.FormulaR1C1 = "=IF(RC[-3]=""équipe apres-midi"",""14:00"",IF(RC[-3]=""équipe matin"",""6:00"",IF(RC[-3]=""journée 1"",""7:00"",IF(RC[-3]=""journée 2"",""8:00"",IF(RC[-3]=""journée 3"",""9:00"","""")))))"
Set Plage = .Range("L2:L" & DerLig)
Plage.FormulaR1C1 = "=IF(RC[-5]=""équipe apres-midi"",""14:00"",IF(RC[-5]=""équipe matin"",""6:00"",IF(RC[-5]=""journée 1"",""7:00"",IF(RC[-5]=""journée 2"",""8:00"",IF(RC[-5]=""journée 3"",""9:00"","""")))))"
Set Plage = .Range("N2:N" & DerLig)
Plage.FormulaR1C1 = "=IF(RC[-7]=""équipe apres-midi"",""14:00"",IF(RC[-7]=""équipe matin"",""6:00"",IF(RC[-7]=""journée 1"",""7:00"",IF(RC[-7]=""journée 2"",""8:00"",IF(RC[-7]=""journée 3"",""9:00"","""")))))"
Set Plage = .Range("P2:P" & DerLig)
Plage.FormulaR1C1 = "=IF(RC[-9]=""équipe apres-midi"",""14:00"",IF(RC[-9]=""équipe matin"",""6:00"",IF(RC[-9]=""journée 1"",""7:00"",IF(RC[-9]=""journée 2"",""8:00"",IF(RC[-9]=""journée 3"",""9:00"","""")))))"
Set Plage = .Range("I2:I" & DerLig)
Plage.FormulaR1C1 = "=IF(RC[-2]=""équipe apres-midi"",""22:00"",IF(RC[-2]=""équipe matin"",""14:00"",IF(RC[-2]=""journée 1"",""15:00"",IF(RC[-2]=""journée 2"",""16:00"",IF(RC[-2]=""journée 3"",""17:00"","""")))))"
Set Plage = .Range("K2:K" & DerLig)
Plage.FormulaR1C1 = "=IF(RC[-4]=""équipe apres-midi"",""22:00"",IF(RC[-4]=""équipe matin"",""14:00"",IF(RC[-4]=""journée 1"",""15:00"",IF(RC[-4]=""journée 2"",""16:00"",IF(RC[-4]=""journée 3"",""17:00"","""")))))"
Set Plage = .Range("M2:M" & DerLig)
Plage.FormulaR1C1 = "=IF(RC[-6]=""équipe apres-midi"",""22:00"",IF(RC[-6]=""équipe matin"",""14:00"",IF(RC[-6]=""journée 1"",""15:00"",IF(RC[-6]=""journée 2"",""16:00"",IF(RC[-6]=""journée 3"",""17:00"","""")))))"
Set Plage = .Range("O2:O" & DerLig)
Plage.FormulaR1C1 = "=IF(RC[-8]=""équipe apres-midi"",""23:00"",IF(RC[-8]=""équipe matin"",""14:00"",IF(RC[-8]=""journée 1"",""15:00"",IF(RC[-8]=""journée 2"",""16:00"",IF(RC[-8]=""journée 3"",""17:00"","""")))))"
Set Plage = .Range("Q2:Q" & DerLig)
Plage.FormulaR1C1 = "=IF(RC[-10]=""équipe apres-midi"",""20:20"",IF(RC[-10]=""équipe matin"",""14:00"",IF(RC[-10]=""journée 1"",""15:00"",IF(RC[-10]=""journée 2"",""16:00"",IF(RC[-10]=""journée 3"",""17:00"","""")))))"
' fin de l'ajout
End With
End Subric
Bonjour
Merci de te pencher sur mon probleme :)
Alors effectivement il n y a plus d erreur mais ca a efface toutes mes donnée (de la feuille données).
Bonjour,
J'ai modifié légèrement le code précédent ...
À placer dans un module ... exemple "Module1" ...
ric
Bonjour,
Désolé ...
Ajoute > Dim Plage As Range au bas des Dim ... au début du code ...
ric
Bonjour,
Je suis désolé, mais je ne vois pas ou il faut mettre l'ajout....à chaque fois la ligne se met en rouge...peux tu me préciser stp ?
Merci
Bonjour,
Je te fournis un fichier ... tu serais bien aimable d'y placer des données du même type que celles du fichier de travail.
Puis, teste ce fichier ...
ric
Bonjour Ric, et merci encore de ton aide.
Je te joint le fichier avec les 4 macros séparées, elles fonctionnent bien individuellement .
Dans la "total", j aimerai regrouper les 4 dans l'ordre suivant : tri>mfc>planning>formule
Merci
Bonjour,
Dans la macro "mfc" > la mise en forme s'applique à partir de A1 et D1 ...
Est-ce bien à partir de la ligne 1 que la couleur va s'appliquer ?
Dans la macro "planning" > plusieurs bouts de code ne mentionnent pas sur quelle feuille exécuter le traitement > ce qui peut donner des rendus aléatoires ...
Exemple : Ici, ce sont les Range de quelle feuille > car, il n'y a aucune sélection de feuille, ni précision de feuille ...
'initialisation
derln = Range("A" & Rows.Count).End(xlUp).Row
For i = derln To 2 Step -1
If Not (dico.exists(Range("A" & i).Value) And Range("B" & i) = "") Then
Range("A" & i & ":R" & i).Delete Shift:=xlUp
End If
Next iTu serais bien aimable de revoir la macro "planning" afin d'y préciser chacun des bouts de code sur quelle feuille il doit s'appliquer ...
J'attends ta réponse pour continuer ...
ric
La macro "mfc" s'applique en A, B et E...plutôt à partir de la ligne 3 c'est vrai, mais cela a t il une incidence sachant que la condition ne sera jamais presente en ligne 1 et 2 ?
pour la macro "planning":
"initialisation" concerne la feuille "Test" (supprime les données qui ont ete copier la fois precedente)
"Report" : il y fait bien mention des "fd", "fc" et "ft" qui font references aux feuilles.
Bonjour,
J'ai imbriqué les 4 macros > étant donné que je ne comprends pas vraiment les traitements à effectuer > je ne peux qu'espérer que l'on s'approche de ton besoin ...
La formule qui est écrite dans la colonne H de la feuille "données", contient une erreur > à la fin de la formule > elle fait référence à la cellule où est écrite la formule > causant une erreur de "Référence circulaire" > j'ai donc enlevé la fin de cette formule pour la remplacer par la fin des autres formules ( voir le code, j'ai placé la fin en commentaire ) ...
Regarde au bas des macros comment je les ai imbriquées en appelant la suivante ...
S'il persiste de soucis > fais un pas-à-pas ( touche F8 dans VBE ) afin de trouver les références qui ne sont pas explicites sur l'adressage des feuilles ...
ric
Merci pour ton aide, je ne m en sort pas :(
Je te joint le fichier avec le resultat attendu dans la feuille "resultat attendu"(je l'ai fait manuellement pour montrer le resultat attendu, pas par macro)
En fait, toutes les lignes qui sont en clients 1 dans la feuille "données" s'intercallent sous la ligne "client 1" de la feuille "Test", idem pour les lignes des clients 2, 3...
La prochaine fois qu'on execute la macro, la feuille "Test" se reinitialise et recopie les nouvelles lignes...
N'hesite pas à me dire si ce n'est pas clair...
Bonjour,
Good, je regarde cela ...
ric
Bonjour,
J'ai repris le fichier du post de Hier à 02:53 ou tu mentionnes ( Je te joint le fichier avec les 4 macros séparées, elles fonctionnent bien individuellement ) ...
La macro Planning fait des choses sur la feuille Test > mais ... ou je n'ai rien compris ... ou le résultat attendu n'est pas bon ...
Est-ce bien la version de Planning qui fonctionne correctement ?
Sinon, est-ce possible que tu me donnes la meilleure version que tu as ?
Je demande, car j'ai un peu de difficulté à la faire fonctionner correctement ... un peu de fatigue sans doute ...
Merci
ric
en fait je ne comprend pas, quand j essayé la macro "planning" elle fonctionnait bien individuellement. A partir du moment ou j ai combiné les 4, elle ne fonctionnait plus (même individuellement)...c est un mystere pour moi.
La je suis sur open office...donc avec des pb de compatibilite mais je pense que ce fichier doit fonctionner
je viens de tester à nouveau sur excel...la macro planning fonctionne sur ce fichier
Bonjour,
Good, je regarde ...
####################
Le mystère ...
Il n'y a pas de mystère > ou un si petit > quand l'on utilise Cells ou Range > si l'on ne met pas devant la référence à la feuille concernée > Cells ou Range considèrent qu'il faut faire référence à la feuille active ...
Exemple : je suis sur la feuille "Test" > Cells ou Range vont faire référence à la feuille "Test" ...
Je bascule sur la feuille "Données" > Cells ou Range vont faire référence à la feuille "Données ...
Par contre > si je le code est : Worksheets("Test").Cells(... ou Sheets("Test").Cells(... (idem pour Range) ... là, même si je suis sur la feuille "Données" > Cells ou Range vont continuer à faire référence à la feuille "Test" ...
Cela ne fonctionnera pas à 100% > il y a quelques commandes qui ne passeront pas ... tel : .Paste où cette commande nécessite de coller sur la feuille active ...
Dans ton code "Planning" qui a été composé en étant sur la feuille "Test" > certains traitements n'ont pas été référencés de la feuille à utiliser > ce qui fait qu'en imbriquant les 4 macros et en les exécutant à partir de la feuille "Données" > le bordel pogne dans le code et le résultat est catastrophique ...
Par contre, une fois le code modifié > le traitement sera correct même si l'on est pas sur la feuille "Test" ...
ric
Bonjour,
Voici un fichier où les 4 macros sont imbriquées > on lance le traitement via le bouton de la feuille "Accueil" > ou de l'endroit qu'il te plaira ...
L'important est que les Titres (noms clients) dans la feuille "Test" correspondent aux Clients de la colonne "Client" ( colonne C) de la feuille "données" ... ainsi, que les noms clients de la feuille "Liste clients" ...
Je suis désolé si cela a été si pénible > je fais mon apprentissage moi aussi ...
ric
Tu plaisantes :)
Je te remercie beaucoup du temps passé sur mon probleme et de tes explications.
le resultat est tres bien, merci.
Juste un pb de recopie que j'ai modifié (fd.Range("A2:R2").Copy au lieu de "A1:R1")
Par contre, la macro planning efface les celulles H2 jusqu'à Q2 après le report. Je ne vois pas ou modifier ca ?
