Sélection de cellule en fonction du numéro de semaine
Bonsoir tous le monde
Je dois développer une macro pour le travail et n'ayant jamais fait ce genre de chose je suis un peu comme une poule qui aurait trouvé un couteau comme on me dit chez moi (imaginez ce que ça peu donner...
Alors pour l'instant j'ai bien avancé mais je bloque sur un truque et même en lissant les questions réponses postés sur le forum je n'arrive pas à trouver de solution malgré plusieurs jours de recherche.
Voici sur quoi je coince :
J'ai un tableau comportant 11 colonnes et 275 lignes. Dans la colonne I figurent un numéro de semaine.
(je suis desolée je ne peux pas partager mon fichier excel puisqu'il s'agit de données confidentiels issues de mon boulot).
Je dois sélectionner à travers de ma macro toutes les lignes et colonnes pour lesquels la semaine en cours apparaît dans la cellule I.
Quelqu'un pourrait il venir à on secours.
D'avance merci beaucoup pour votre aide
Bonsoir,
Sub selSemEnCours()
Dim sem As Long, c As Range, plag As Range
sem = IsoWeekNumber(Date)
For Each c In [I2:I276]
If c = sem Then
If plag Is Nothing Then
Set plag = Rows(c.Row)
Else
Set plag = Union(plag, Rows(c.Row))
End If
End If
Next c
Intersect(plag, [A:K]).Select
End Sub
Public Function IsoWeekNumber(ByVal d As Date) As Long
Dim wd As Long
wd = Weekday(d, vbMonday)
IsoWeekNumber = Int((d - DateSerial(Year(d - wd + 4), 1, 1) - wd + 11) / 7)
End FunctionLa fonction doit être dans un module standard.
eric
Bonsoir Eriiic et merci pour votre réponse,
Je viens de tester la macro et il me surligne, lors du test, l'éléments que j'ai fait apparaitre en rouge ci dessous. Savez vous pourquoi?
Concernant les éléments que j'ai fais apparaitre en bleu je les ai inscrit dans un second module. J'espère avoir bien fait.
Je vous ai copié toute ma macro afin que vous puissiez voir ce que ca donne.
Merci pour votre aide
Esmee1
Sub Macro1()
'Rennommer la première feuille
'
Worksheets(1).Name = "Extraction Wave"
' Inserer nouvelle feuille et la renommer
'
Sheets.Add
Worksheets(1).Name = "Audit S0"
'Selection de données semaine en cours
'
Dim sem As Long, c As Range, plag As Range
sem = IsoWeekNumber(Date)
For Each c In [I:I]
If c = sem Then
If plag Is Nothing Then
Set plag = Rows(c.Row)
Else
Set plag = Union(plag, Rows(c.Row))
End If
End If
Next c
Intersect(plag, [A:X]).Select
Public Function IsoWeekNumber(ByVal d As Date) As Long
Dim wd As Long
wd = Weekday(d, vbMonday)
IsoWeekNumber = Int((d - DateSerial(Year(d - wd + 4), 1, 1) - wd + 11) / 7)
End Function
'supprimer les colonnes inutiles
'
Sheets("Audit S0").Select
Range("A:B,D:G,I:L,S:U").Select
Selection.Delete Shift:=xlToLeft
'Remplacement des valeurs de la colonne A
'
Sheets("Audit S0").Select
Columns("A:A").Select
Selection.Replace What:="01", Replacement:="Guenard K", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="02", Replacement:="Aubertin S", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="03", Replacement:="Amourette N", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="04", Replacement:="Gemetto Ca", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="07", Replacement:="Varinot A", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="08", Replacement:="Deminuid N", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="09", Replacement:="Mercier V", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="11", Replacement:="Hichard A", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="12", Replacement:="Lenoir C", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="13", Replacement:="Simon T", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="16", Replacement:="Singler R", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="17", Replacement:="Bonnefoy A", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="21", Replacement:="Loisy P", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="24", Replacement:="Prieur C", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="32", Replacement:="Mélanie", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="34", Replacement:="Husson D", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="36", Replacement:="Fatihi S", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="38", Replacement:="Varinot B", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="49", Replacement:="Bouche F", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="55", Replacement:="Toussaint C", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="60", Replacement:="Jeandot E", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="65", Replacement:="Moreau R", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="66", Replacement:="Bergami F", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="67", Replacement:="Schillinger F", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="81", Replacement:="Aubry G", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="100", Replacement:="Interim", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="AN", Replacement:="Amourette N", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="BA", Replacement:="Bonnefoy A", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="BF", Replacement:="Briaux F", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="BP", Replacement:="Blot P", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="DM", Replacement:="Destainville M", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="DS", Replacement:="Douge S", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="EI", Replacement:="Estevez I", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="FC", Replacement:="Firion C", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="FS", Replacement:="Fatihi S", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="HD", Replacement:="Husson D", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="JNF", Replacement:="François JN", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="GC", Replacement:="Gimondo C", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="LP", Replacement:="Loisy P", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="MV", Replacement:="Mercier V", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="PP", Replacement:="Prieur P", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="RC", Replacement:="Raffat C", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="TN", Replacement:="Tagnon N", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="US", Replacement:="Usun S", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="VJ", Replacement:="Vitter J", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
'Remplacement des valeurs de la colonne B
'
Sheets("Audit S0").Select
Columns("B:B").Select
Selection.Replace What:="Plastic 1.5", Replacement:="Orma", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="Polycarbonate (PC)", Replacement:="Airwear", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="Plastic 1.67", Replacement:="Stylis", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="Plastic 1.6", Replacement:="Ormix", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="Plastic 1.56", Replacement:="Ormix", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
'Remplacement des valeurs de la colonne D
'
Sheets("Audit S0").Select
Columns("D:D").Select
Selection.Replace What:="000 : Commercial", Replacement:="000", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="003 : Coated Lens", Replacement:="003", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
'Remplacement des valeurs de la colonne E
'
Sheets("Audit S0").Select
Columns("E:E").Select
Selection.Replace What:="021 : Not Justified", Replacement:="021", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="311 : Spot Defect", Replacement:="311 : Manipulation", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="332 : Speaded Defect", Replacement:="332 : Coulure >3mm", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="329 : Miscellaneous", Replacement:="329 : Appairage teinte", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="342 : Speaded Defect", Replacement:="342 : Empreinte / Poussière / Tache", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="312 : Speaded Defect", Replacement:="312 : Voile", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="314 : Internal Defect", Replacement:="314 : Defaut Fini ou SF brut", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="319 : Other Defect", Replacement:="314 : Anneau / Point au centre", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="352 : Cosmetic", Replacement:="352 : Aspect signature / Gravure", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="343 : AR Coating Reliability", Replacement:="343 : Craquelure", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
Selection.Replace What:="331 : Spot Defect", Replacement:="331 : Cratère", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True
End SubBonsoir,
je ne vois pas de rouge.
eric
Bonsoir,
Oups voici ce qui aurait du apparaitre en rouge
Intersect(plag, [A:X]).Select
Esmee1
Peut-être dû à 2007 (?) mais je ne vois pas trop ce qui le dérange.
Au cas ou remplace par :
Intersect(plag, range("A:X")).Select
Sinon met ton fichier que je vois si je constate l'erreur.
eric
Bonjour Eric,
Ça ne fonctionne pas non plus.
Voici mon fichier j'ai juste supprimé quelques lignes et colonnes pour des soucis de confidentialité. J'ai modifié la macro en conséquence.
Merci pour ton aide
Bonjour,
1) met le curseur dans ta macro et exécute-là en pas à pas avec F8 en gardant un oeil sur ton classeur, tu comprendras tout de suite.
2) de plus tu demandes pour une semaine en colonne I, elle est ailleurs et tu n'adaptes pas le code. Ca ne risque pas de fonctionner. Il faut un minimum de cohérence.
3) tu as demandé une sélection de lignes... pour ne rien en faire (?!??:!) La ligne suivante est un autre .select
4) par ailleurs faire 50 lignes de code pour remplacer 50 chaines par une autre n'est d'aucune efficacité. Personne ne procède ainsi.
Le jour où tu as un nouveau nom tu vas aller modifier ton programme ?
Il faut que tu crées des tables de conversions sur une autre feuille, qui seront faciles à mettre à jour. Et ton code doit aller lire ces tables avec des boucles pour traduire.
Ne le prend pas mal mais je crois que tu as strappé la phase apprentissage, commence par là.
Tu ne trouveras pas grand monde pour te tenir la main plusieurs jours pour acquérir le B.A.BA. Il faut le faire toi même par des recherche sur google. Tu peux commencer sur ce site en lisant tous les 'COURS VBA' (menu en haut)
eric
Bonsoir Eric,
Malheureusement pour moi j'ai du mal à comprendre les cours présent sur les différents site dédiés à la création de macro via VBA alors j'essaie de me débrouiller comme je peux (en copiant par exemple plusieurs fois une formule donner sur un site permettant de remplacer des valeurs par des autres).
Je pense effectivement que ce genre de chose peut paraître archaïque pour certaines personnes mais est ce que j'ai vraiment le choix?, La réponse est non.
Le fait est que je dois développer une macro sans n'avoir jamais eu aucune aide sur le sujet et en un temps record. Je suis même obligée de travaillé sur ce projet les soirs et le week end.
Alors en m'inscrivant sur ce forum j'attendais un peu d'aide.
Bonne soirée
Ok, mais à faire des copier-coller sans comprendre ton code n'a aucun sens, tu n'y arriveras jamais.
Si sur ton CV tu n'as pas écris connaissances en VBA tu pourrais demander une formation.
Décris plutôt précisément et clairement comment tu reçois les données et ce que tu dois faire.
Si c'est simplement remplacer des chaines par d'autres on pourra te le faire si tu prépares sur une autre feuille des tables de conversion et des instructions claires (pourquoi une autre feuille ? Quoi y coller ? Dans quelle colonne utiliser telle table ? etc).
Maintenant si c'est une appli complète c'est autre chose. On aide ponctuellement sur un pb, mais on n'a pas forcément 3 jours pleins ou 3 semaines à y consacrer.
eric
Bonjour Eric,
Vous savez actuellement le monde du travail est difficile et en intérim je ne peux malheureusement pas prétendre à une formation....
Et même si je n'ai pas eu la prétention d'indiquer sur mon CV et lors de mon entretien que j'avais des connaissances en VBA, on m'a demandé de développer une macro.... Alors je fais ce qu'on m'a demandé...
J'ai quasiment fini la version provisoire c'est à dire la macro qu'il me restera à améliorer par la suite..... Je pense que vous comprenez ce que je veux dire....
Il me reste une dernière chose :"comment déplacer les cellules contenant l'élément SD présentent dans la colonne E" dans la même ligne mais dans la colonne K, sachant que la colonne K contient déjà des valeurs". Je vous explique je fais des audits sur des produits. Ces produits sont soit conforme sans défauts :"SD", soit conforme mais avec défaut "0", ou soit non conforme 3. Les résultats obtenus lors de l'enregistrement de ces données me permettent de déterminer la capabilité de notre processus de fabrication.
Le problème est que le logiciel permettant de saisir ces valeurs n'enregistre pas ces valeurs dans la même colonne je dois donc pour l'exploitation réunir dans la même colonne.
Bonne journée Eric et merci pour votre patience et votre aide
Bonjour,
sachant que la colonne K contient déjà des valeurs
Et tu en fais quoi de ces valeurs ?
Sinon le principe c'est :
cells(lig, "K")=cells(lig,"E")
eric
En fait, j'utilise ces valeurs pour établir un tableau croisé dynamique et au final un graphique
Il faudrait j'obtienne un histogramme avec le nombre de produits conformes sans défaut, le nombre de produits conformes avec défaut et le nombre de produits non conformes.
Il faut donc qu'il me déplace les cellules en rouge dans la colonne E de la feuille audit S0 dans la colonne K de la même feuille (il faut mieu que je déplace dans la colonne K plutôt que J sinon je vais avoir des problème) . Classeur excel joint.
A tester :
Sub compileEK()
Dim nblig As Long, lig As Long
Dim colE As Variant, colK As Variant
Const SD As String = "SD"
nblig = Cells(Rows.Count, "A").End(xlUp).Row - 1
' recup données
colE = [E2].Resize(nblig)
colK = [K2].Resize(nblig)
For lig = 1 To nblig
If colE(lig, 1) = SD Then colK(lig, 1) = SD
Next lig
' coller
[K2].Resize(nblig) = colK
'supprimer E
Columns("E").EntireColumn.Delete
End Sub