Erreur de syntaxe bva
Bonjour,
Est-ce que tu utilises bien le code du fichier que je t'ai soumis Hier à 19:43 ??
Je demande, car j'ai cherché fd.Range("A2:R2").Copy et je ne l'ai pas trouvé ...
la macro planning efface les celulles H2 jusqu'à Q2 après le report >> je ne vois pas ce phénomène ... >> Il y a bien la macro "Formule" qui copie les formules de H à Q > c'est peut être de là que provient le souci ... est-ce que ces cellules sont vraiment vides ?? >> ou bien les formules ne donnent pas de résultat et les cellules paraissent vides ??
ric
Encore une fois tu as raison...en fait j'ai insérer une ligne en ligne 1 et j ai oublié de modifier la macro "formule" et la macro "planning"...c'est chose faite.
J'ai modifier egalement la macro "mfc"...elle fonctionne bien mais pas partout...je pense encore avoir fait une erreur d ecriture....:
Sur cette ligne, la mfc devrait bien s'appliquer aux colonnes A, B et D ? Or elle ne s'applique qu'en A :
With Sheets("données").Range("A3:B100,D3:D100") 'Sélection des plages où doit s'appliquer la MeF.
Ensuite j'aimerai compléter quelque chose...mais tu as déjà passé beaucoup de temps sur mon cas. Donc si tu veux arrêter là je comprendrais :)
Dans le même genre, j'aimerai intercaler dans la feuille "pers" les lignes des personnes correspondantes mais en se basant cette fois sur la colonne "titulaire / Interim" et nom plus "Client" en copiant les colonnes de A à D et de H à Q.
J'ai mis l'exemple dans la feuille attendu. Je pensais imbriquer ça dans la macro "planning" mais il serait peut etre plus simple de créer une nouvelle macro ? Qu'en penses tu ?
Je te joint le fichier à jour
Bonjour,
Non, non, je ne suis pas tanné de ton fichier > je l'aime bien ...
Un souci à la fois > la MFC > il manque un signe de $ devant le E > comme ceci > Formula1:="=$E3=""Supplay""" ...
Je regarde la suite ...
ric
Ah oui c est beaucoup mieux :)
merci
Bonjour,
Pour le 2e Planning > que j'ai nommé "PlanningPers" > cette macro, pour l'instant, n'est pas imbriquée avec les autres afin que tu la testes avant ...
Je crois que tu as compris le principe d'appel d'une macro à l'autre pour l'imbrication ...
"PlanningPers" > tout au haut du module > j'ai ajouté 2 variables : flp et fp ...
J'ai remplacé les "fc" par "flp" ( CTRL+H ) > puis j'ai remplacé les "ft" par "fp" > il ne restait que "C" qui devient "E" et fd.Cells(i, 3) qui est devenu fd.Cells(i, 5) ...
Par contre : fd.Cells(i, 3) et fd.Cells(i, 5) pourraient s'écrirent fd.Cells(i, "C") et fd.Cells(i, "E") > c'est facilitant dans la compréhension du code ...
Au plaisir,
ric
effectivement suite à ta dernière phrase j ai fait le remplacement dans les 2 macros.
J'ai 2 nouveau problemes :
le report reprenait toutes les lignes alors qu'il ne me fallait que de A à D et H à Q. J'ai modifié pour ce qui est des lignes du tableau mais je n'y arrive pas pour "l'entête" :
| Prénom | Nom | Lieu de travail | Titulaire / Interim | Poste | Equipe | Lundi AM | Lundi PM | Mardi AM | Mardi PM | Mercredi AM | Mercredi PM | Jeudi AM | Jeudi PM | Vendredi AM | Vendredi PM |
Ce qui m'amène au 2eme probleme....logiquement la recopie reprend les formules de la feuille "données" et non les valeurs. Ca ne se voyait pas dans la feuille "Test" car presque toutes les colonnes etaient reportées, mais ca me met des colonnes vides dans la feuille "pers".
J'ai bien essayé de remplacer "insert" par pastvalues mais sans succès.
* petite contrainte supplémentaire dans la macro "PlanningPers" : il faudrait que les lignes du "client5" ne soit pas pris en compte dans le report..:)
je continue de chercher
Bonjour,
Excuse-moi pour AD et HQ > j'avais zappé cet info
Je regarde cela > AD et HQ > valeurs et non formules > exclure le Client5 ...
ric
Bonjour,
Les 3 critères sont respectés ...
Il rester à dynamiser, en passant par une variable, l'exclusion du "Client5" > selon le besoin ...
Un essai ...
Sub PlanningPers()
Application.ScreenUpdating = False
Set fd = Sheets("données")
Set flp = Sheets("Liste pers")
Set fp = Sheets("pers")
Set dico = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating = False
For i = 2 To flp.Range("A" & Rows.Count).End(xlUp).Row
dico(flp.Range("A" & i).Value) = ""
Next i
'initialisation
derLn = fp.Range("A" & Rows.Count).End(xlUp).Row
For i = derLn To 2 Step -1
If Not (dico.exists(fp.Range("A" & i).Value) And fp.Range("B" & i) = "") Then
fp.Range("A" & i & ":R" & i).Delete Shift:=xlUp
End If
Next i
derLn = fp.Range("A" & Rows.Count).End(xlUp).Row
For i = derLn To 2 Step -1
fp.Range("A1:G1").Copy
fp.Range("A" & i & ":G" & i).Insert Shift:=xlDown
Next i
fp.Range("A1:G1").Delete Shift:=xlUp
'Report
For i = 3 To fd.Range("A" & Rows.Count).End(xlUp).Row
If fd.Range("E" & i) <> "" Then
Set cell = fp.Range("A:G").Find(fd.Cells(i, 5).Value, lookat:=xlWhole)
If Not cell Is Nothing Then
lgn = cell.Row
'If cell.Offset(2, 0) = "" Then
If fp.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
fp.Cells(lgn + 1, 1).Offset(1, 2).Delete Shift:=xlToLeft
fp.Cells(lgn + 1, 1).Offset(1, 3).Delete Shift:=xlToLeft
fp.Cells(lgn + 1, 1).Offset(1, 3).Delete Shift:=xlToLeft
fp.Cells(lgn + 1, 1).Offset(1, 3).Delete Shift:=xlToLeft
End If
d = 0
Do Until fp.Cells(lgn + 2 + d, 1) = ""
d = d + 1
Loop
ln = lgn + 2 + d
fp.Range("A" & ln & ":Q" & ln).Insert Shift:=xlDown
If fd.Cells(i, "C").Value <> "Client5" Then
fd.Range("A" & i & ":B" & i).Copy fp.Range("A" & ln)
fd.Range("D" & i & ":D" & i).Copy fp.Range("C" & ln)
fd.Range("H" & i & ":Q" & i).Copy
fp.Range("D" & ln).PasteSpecial Paste:=xlPasteValues
End If
End If
End If
Next i
fp.Cells(2, "i").Activate
End Subric
Bonjour RIC,
Merci pour ce retour.
Ca fonctionne bien pour le report des colonnes A:D & H:Q.
Par contre, pour l'exclusion du "client5", parfois ca fonctionne bien, parfois j ai un message d'erreur (lorsque je modifie le nom du client dans la feuille "données") :
"erreur d'execution '1004' : La méthodes Activate de la classe Range a échoué.
Quand je fais le débogage, j ai la dernière ligne en seurbrillance : fp.Cells(2, "i").Activate
Par contre le resultat à l'air bon dans la feuille "pers", les nouveaux "client5" sont bien retiré et le "client5" passé "client1" sont bien ajouté.
J'ai un autre pb...je travaille dessus : la mise en forme conditionnelle qui s'applique en feuille"données" devrait être collée dans les feuilles "Test" et "pers".
Alors je sais que nous (tu) avons modifié pour avoir un copie valeur dans la feuille "pers" donc logique qu'il n y ait pas la copie des MFC. Par contre elle devrait apparaitre en feuille "Test"...
Je vais donc essayé de faire un copier/coller dans les colonnes "A,B et C" et un collé valeur dans les colonnes "D à M" dans la feuille "pers"
Je comprend en gros la macro, mais peux tu m'expliquer les lignes suivantes (ce que je n ai pas reussi à faire) :
If fp.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
fp.Cells(lgn + 1, 1).Offset(1, 2).Delete Shift:=xlToLeft
fp.Cells(lgn + 1, 1).Offset(1, 3).Delete Shift:=xlToLeft
fp.Cells(lgn + 1, 1).Offset(1, 3).Delete Shift:=xlToLeft
fp.Cells(lgn + 1, 1).Offset(1, 3).Delete Shift:=xlToLeft
desole tu l avais deja fait.
Bonjour,
Après le traitement dans la feuille "pers" > des cellules restaient sélectionnées > j'ai donc ajouté "fp.Cells(2, "i").Activate" pour sélectionné la cellule "i2" afin de désélectionner les autres > ici ça fonctionne > mais, tu as une erreur > supprime ou met en commentaire "fp.Cells(2, "i").Activate" > tout simplement ...
If fp.Cells(lgn + 2, 2) = "" Then ' si cette cellule est vide
cell.Offset(1, 0).Resize(1, 18).Insert Shift:=xlDown ' insérer une ligne
fd.Range("A2:R2").Copy ' prépare la copie d'une plage sur la feuille "données"
cell.Offset(2, 0).Resize(1, 18).Insert Shift:=xlDown ' coller cette plage en insérant une ligne
fp.Cells(lgn + 1, 1).Offset(1, 2).Delete Shift:=xlToLeft ' supprime cellule de la colonne C ("Client") (ainsi D devient C)
fp.Cells(lgn + 1, 1).Offset(1, 3).Delete Shift:=xlToLeft ' supprime Cellule de la colonne D ("Titulaire / Interim") (ainsi E devient D)
fp.Cells(lgn + 1, 1).Offset(1, 3).Delete Shift:=xlToLeft ' supprime Cellule de la colonne D ("Poste") (ainsi E devient D)
fp.Cells(lgn + 1, 1).Offset(1, 3).Delete Shift:=xlToLeft ' supprime Cellule de la colonne D ("Equipe") (ainsi E devient D)Les 3 dernières > je n'ai pas trouvé rapidement comment sélectionner 3 cellules pour les supprimer en lot ...
Si tu as 2 écrans > un pas à pas sur le code te permettrait de voir cela en action ...
J'ai donc opté pour supprimer 3 fois de suite 1 cellule > ce qui revient au même > s'il y avait des dizaines de milliers de lignes à traiter > le temps d'exécution en souffrirait > il faudrait trouver autre chose ...
Pour la MFC > en supprimant la colonne "Titulaire / Interim" sur la feuille "pers" > le critère disparaissant > l'exécution ne se fait pas > la condition de traitement ne s'avère pas ...
Car avec une MFC, la couleur n'est pas dans la cellule > c'est un masque sur la cellule...
Je vais regarder pour ne pas supprimer cette colonne > mais simplement la masquer > si ça fonctionne et que ce n'est pas un souci pour toi qu'une colonne soit masquée dans la feuille "pers" ...
ric
Merci de ton retour, j ai bien compris pour la feuille "pers", par contre la mfc devrait s appliquer sur la feuille "Test" non ?
J'ai donc essayé d'imbriquer une nouvelle mfc pour la feuille "Test" sans succès.
J'ai egalement essayer de faire une 2eme macro mfcTest mais sans succès egalement
Dans les 2 cas la mfc ne fonctionné plus même dans la feuille "données"...
Bonjour,
Pour la MFC >
.FormatConditions.Add Type:=xlExpression, Formula1:="=$E3=""Supplay"""
.FormatConditions.Add Type:=xlExpression, Formula1:="=$E3=""RAS"""
.FormatConditions.Add Type:=xlExpression, Formula1:="=$E3=""Crit"""
.FormatConditions.Add Type:=xlExpression, Formula1:="=$E3=""Randstad"""
.FormatConditions.Add Type:=xlExpression, Formula1:="=$E3=""CDI"""
.FormatConditions.Add Type:=xlExpression, Formula1:="=$E3=""CDD"""Pour la macro "PlanningPers" > si masquer les colonnes est "acceptable" > la MFC suit correctement ...
Le petit irritant qu'il subsiste est la largeur résiduelle de champs fusionnés (RAS, Supplay, etc) ...
J'ai augmenté leur largeur > en fait il faut leur donner 4 colonnes de plus que la largeur désirée une fois le traitement terminé > puisque l'on masque 4 colonnes ...
Vois si cela convient ...
ric
Bonjour,
J'ai continué mes recherches et je crois avoir avancé une information erronée concernant la MFC ...
Je reviens avec une nouvelle version de la macro "PlanningPers" ...
ric
Merci,
Ca me va tres bien avec les colonnes masquées, c'est une bonne idée....je suppose que c'est pour la meme raison que les mfc ne fonctionnent pas sur la feuille "Test" ? Parce qui'il y a une colonne que l'on ne reporte pas ?
Bonjour,
Exact > mais j'ai trouvé comment lire la couleur obtenue d'une MFC d'une cellule ...
Donc, voici une version du fichier où les couleurs suivent sur la feuille "pers" et maintenant sur la feuille "test" ...
Concernant le code de la feuille "pers" > j'ai aussi ajouté la condition d'exclusion "Client5" sur le 1er "IF ..." de la section Report > sinon, l'on se retrouvait avec des lignes vides colorées pour chacune des lignes exclues ...
Je viens d'ajouter la suppression de toutes les MFC des feuilles "test" et "pers" qui ont été importées lors des copies > les MFC de ces feuilles sont maintenant inutiles et alourdissent le fichier inutilement ...
L'on approche >
ric
Ça à l 'air de très bien fonctionner, je te remercie.
Je vais tester avec avec mes vraies données voir s'il n y a pas de problème.
Je reviens vers toi dans tous les cas.
Encore une question bête...habituellement je met une forme et y affecte une macro, là sur le bouton que tu as mis j ai 1 question : peut on le dépalcer ? le mettre quelque part dans la feuille "données" ? si oui comment le deplace t on ?
Bonjour,
Pour déplacer le "bouton de commande" de la feuille "Accueil" à la feuille "données" >
Va dans VBE > dans la feuille "Accueil" > coupe la macro " Private Sub CommandButton1_Click() " > va dans la feuille "données > colle cette macro >
Reviens dans Excel sur la feuille "Accueil" > menu Développeur > clique sur bouton "Mode Création" > maintenant, clique Droit sur le "bouton de commande" à déplacer > Couper > va dans la feuille "données" > Coller > clique à nouveau sur "Mode Création" afin de le désactiver > Woualla > le bouton est à nouveau opérationnel ...
Clique à nouveau sur le bouton "Mode Création" > clique droit sur le "bouton de commande" > Propriétés > là, tu peux le personnaliser ...
ric
Bonjour RIC,
Merci pour tes conseils et ton travail, le fichier fonctionne apparemment très bien.
Juste un pb avec les mfc sur le report dans les feuilles "Test" et "pers" : dans la feuille "données", la colonne "Titulaire / interim" est bien en couleur mais sur le report ca devient la colonne "Lieu de travail" dans la feuille "Test" et "pers". Mais ce n'est pas tres important, je vais regarder ca.
Par contre, j aimerai avoir ton avis sur ceci : est ce possible de créer un bouton "enregistrer" pour faire une copie valeur de ce fichier dans un dossier portant le n° de semaine par exemple....quelque chose du genre.
Sais tu si cela existe ?