Condition if

thomas4530

XLDnaute Junior
Bonjour,

Pourriez-vous me dire ce que je dois écrire en VBA pour obtenir l'action suivante:

--> pour chaque cellule de la colonne E, si la valeur n'est pas "AAA" efface le contenu des colonnes C:F.

Sans VBA, cela donne:
If Range("E4") <> "AAA" Then Range("C4:F4").Clear
If Range("E5") <> "AAA" Then Range("C5:F5").Clear
If Range("E6") <> "AAA" Then Range("C6:F6").Clear
...
If Range("E2090") <> "AAA" Then Range("C2090:F2090").Clear

Un grand merci,

Thomas
 

Staple1600

XLDnaute Barbatruc
Re : Condition if

Re

Quelle dernière ligne?
Celle du code VBA?
Ou celle identifiée par le code VBA

Pour préciser un numéro de ligne il suffit d'écrire.. le numéro de ligne

Code:
Sub testII()
 Dim i As Long
 For i = 4 To 57 ' si 57 est le numéro de ligne choisi
 If Cells(i, 5) <> "AAA" Then Cells(i, 3).Resize(, 4).Clear
 Next
End Sub
 

thomas4530

XLDnaute Junior
Re : Condition if

Bonjour Staple1600,

Effectivement pour rien... je pouvais à chaque fois conserver le i ! Suis-je si bête...

Petite question, y aurait-il moyen d'adapter le code pour que par exemple, s'il n'y a aucune valeur en E5, il n'efface pas le contenu de C5-D5-E5-F5 ???

Merci une nouvelle fois pour votre aide.

Thomas

Sub professeur()
Sheets("Données").Range("A1:CH2090").copy Sheets("AAA").Range("A1:CH2090")
Dim i As Long
For i = 4 To 2090
If Cells(i, 5) <> "AAA" Then Cells(i, 3).Resize(, 4).ClearContents
If Cells(i, 9) <> "AAA" Then Cells(i, 7).Resize(, 4).ClearContents
If Cells(i, 13) <> "AAA" Then Cells(i, 11).Resize(, 4).ClearContents
If Cells(i, 17) <> "AAA" Then Cells(i, 15).Resize(, 4).ClearContents
If Cells(i, 22) <> "AAA" Then Cells(i, 20).Resize(, 4).ClearContents
If Cells(i, 26) <> "AAA" Then Cells(i, 24).Resize(, 4).ClearContents
If Cells(i, 30) <> "AAA" Then Cells(i, 28).Resize(, 4).ClearContents
If Cells(i, 34) <> "AAA" Then Cells(i, 32).Resize(, 4).ClearContents
If Cells(i, 39) <> "AAA" Then Cells(i, 37).Resize(, 4).ClearContents
If Cells(i, 43) <> "AAA" Then Cells(i, 41).Resize(, 4).ClearContents
If Cells(i, 47) <> "AAA" Then Cells(i, 45).Resize(, 4).ClearContents
If Cells(i, 51) <> "AAA" Then Cells(i, 49).Resize(, 4).ClearContents
If Cells(i, 56) <> "AAA" Then Cells(i, 54).Resize(, 4).ClearContents
If Cells(i, 60) <> "AAA" Then Cells(i, 58).Resize(, 4).ClearContents
If Cells(i, 64) <> "AAA" Then Cells(i, 62).Resize(, 4).ClearContents
If Cells(i, 68) <> "AAA" Then Cells(i, 66).Resize(, 4).ClearContents
If Cells(i, 73) <> "AAA" Then Cells(i, 71).Resize(, 4).ClearContents
If Cells(i, 77) <> "AAA" Then Cells(i, 75).Resize(, 4).ClearContents
If Cells(i, 81) <> "AAA" Then Cells(i, 79).Resize(, 4).ClearContents
If Cells(i, 85) <> "AAA" Then Cells(i, 83).Resize(, 4).ClearContents
Next
End Sub
 

thomas4530

XLDnaute Junior
Re : Condition if

Parfait, cela fonctionne. Sis impressionné...

Encore (encore, encore, encore) une question.

Grâce à votre aide, j'ai réussi dupliquer ma feuille de données pour chaque professeur et à éliminer toutes les données qui ne concernaient pas le professeur. Au final, je me retrouve dans la feuille professeur avec les 48 horaires (2090 lignes) dans lesquels n'apparaissent que les informations qui concernent le professeur. Seul hic, je ne vais pas distribuer 48 horaires à chaque prof, je dois créer un horaire de synthèse sachant qu'un professeur ne donne cours qu'à une seule classe à un même moment (logique).

J'ai bien une idée mais j'imagine qu'il doit y en avoir une meilleure...

Mon idée, intégrer dans la cellule C4 (horaire de synthèse du professeur - lundi 15 septembre - plage 8h-10h - code cours) la formule =c45&c86&c127&c168&c209&c250&c291&c332&c373&c414&c455&c496&c537&c578&c619&c660&c701&c742&c783&c824&c865&c906&c947&c988&c1029&c1070&c1111&c1152&c1193&c1234&c1275&c1316&c1357&c1398&c1439&c1480&c1521&c1562&c1603&c1644&c1685&c1726&c1767&c1808&c1849&c1890&c1931&c1972&c2013&c2054

A faire pour toutes les cellules de l'horaire de synthèse... lourd lourd.

J'imagine qu'il doit y avoir bcp plus facile vu qu'il y a toujours un bond de 46.

Je mets en pièce jointe, une partie de la feuille prof "AAA" (comprend son horaire de synthèse (vide) + 4 horaires sur les 48 - uniquement lundi et mardi).

Thomas
 

Pièces jointes

  • AAA.xlsx
    35.6 KB · Affichages: 26
  • AAA.xlsx
    35.6 KB · Affichages: 28
  • AAA.xlsx
    35.6 KB · Affichages: 22

Staple1600

XLDnaute Barbatruc
Re : Condition if

Bonjour à tous

thomas4530
"Patience est mère de vertu"
Si les réponses tardent à venir, ajoute quelques explications et détails en plus.
Et continue à faire régulièrement des up dans ce fil.
Ton problème finira par être résolu mais pas forcément au rythme que tu souhaites.
 

thomas4530

XLDnaute Junior
Re : Condition if

Voilà, j'essaye de préciser...

Dans un premier temps, y aurait-il moyen de simplifier le code suivant :

Range(«C4»).value=Range("C86").Value+range(«C127").value+Range(«C168").value+Range(«C209").value+Range(«C250").value+Range(«C291").value+Range(«C332").value+Range(«C373").value+Range(«C414").value+Range(«C455").value+Range(«C496").value+Range(«C537").value+Range(«C578").value+Range(«C619").value+Range(«C660").value+Range(«C701").value+Range(«C742").value+Range(«C783").value+Range(«C824").value+Range(«C865").value+Range(«C906").value+Range(«C947").value+Range(«C988").value+Range(«C1029").value+Range(«C1070").value+Range(«C1111").value+Range(«C1152").value+Range(«C1193").value+Range(«C1234").value+Range(«C1275").value+Range(«C1316").value+Range(«C1357").value+Range(«C1398").value+Range(«C1439").value+Range(«C1480").value+Range(«C1521").value+Range(«C1562").value+Range(«C1603").value+Range(«C1644").value+Range(«C1685").value+Range(«C1726").value+Range(«C1767").value+Range(«C1808").value+Range(«C1849").value+Range(«C1890").value+Range(«C1931").value+Range(«C1972").value+Range(«C2013").value+Range(«C2054").value

Merci pour votre aide,

Thomas
 

Staple1600

XLDnaute Barbatruc
Re : Condition if

Re

Tu peus utiliser ce type de syntaxe
Sub b()
MsgBox Application.Sum(Range("C4"), Range("C86"))
End Sub


Je te laisse modifier avec le reste des cellules

EDITION: Si dans ta colonne C, les autres cellules sont vides ou contiennent du texte, tu pourrais aussi utiliser
MsgBox Application.Sum(Range("C4:C2054"))

PS: Le Msgbox est juste là pour faire les tests
 
Dernière édition:

thomas4530

XLDnaute Junior
Re : Condition if

Bonjour à toutes et tous,

Je reviens vers vous car je ne trouve pas la solution à mon problème.

Dans le fichier en pièce jointe, je souhaiterais que:
- en C4 faire la synthèse de C45, C86, C127, C168 (je pourrais indiquer Range("C4").Value = Range("C45").Value + Range("C86").Value + Range("C127").Value + Range("C168").Value)

- en D4 faire la synthèse de D45, D86, D127, D168 (je pourrais indiquer Range("D4").Value = Range("D45").Value + Range("D86").Value + Range("CD27").Value + Range("D168").Value

- en E4 faire la synthèse de E45, E86, E127, E168 (je pourrais indiquer Range("E4").Value = Range("E45").Value + Range("E86").Value + Range("E127").Value + Range("E168").Value

Et ainsi de suite jusque la cellule C40.

Je pourrais pour chacune des cellules indiquer le texte proposé. Mais sachant qu'il y a 126 cellules (42*3) cela risque d'être très lourd...surtout que dans mon tableau original j'ai 2520 cellules :(

N'y aurait-il pas moyen d'automatiser la procédure (boucles ?) ?

Un grand merci pour votre aide,

Thomas
 

Pièces jointes

  • HELP.xlsm
    33.7 KB · Affichages: 25
  • HELP.xlsm
    33.7 KB · Affichages: 28
  • HELP.xlsm
    33.7 KB · Affichages: 18

thomas4530

XLDnaute Junior
Re : Condition if

Bonjour,

Je cherche toujours la solution...

Un code dans ce style là est-il possible ?

Sub synthese()
Dim j As Long
For j = 4 To 40
Cells(j, 3) = Cells(j + 41, 3) + Cells(j + 82, 3) + Cells(j + 123, 3) + Cells(j + 164, 3) + Cells(j + 205, 3) + Cells(j + 246, 3) + Cells(j + 287, 3) + Cells(j + 328, 3) + Cells(j + 369, 3) + Cells(j + 410, 3) + Cells(j + 451, 3) + Cells(j + 492, 3) + Cells(j + 533, 3) + Cells(j + 574, 3) + Cells(j + 615, 3) + Cells(j + 656, 3) + Cells(j + 697, 3) + Cells(j + 738, 3) + Cells(j + 779, 3) + Cells(j + 820, 3) + Cells(j + 861, 3)
Next
End Sub

Merci de votre aide,

Thomas
 

Discussions similaires

Réponses
7
Affichages
406
Réponses
2
Affichages
909
Réponses
10
Affichages
1 K