Petite aide sur macro

birac

XLDnaute Junior
Bonjour,

Je progresse, je progresse :) j'aurais juste besoin d'une aide pour finir cette macro :
Sub DOSSP()
Dim nb As Integer, i As Integer

nb = Range("W65000").End(xlUp).Row

For i = 1 To nb
If Range("W" & i) = "" Then
Range("W" & i) = "Session non commencée. Vous avez 4 dossiers à faire"
End If
If Range("W" & i) = "12.01" Then
Range("W" & i) = "12.01 Il vous reste 3 dossiers à faire pour être à jour"
End If
If Range("W" & i) = "12.02" Then
Range("W" & i) = "12.02 Il vous reste 2 dossiers à faire pour être à jour"
End If
If Range("W" & i) = "12.03" Then
Range("W" & i) = "12.03 Il vous reste 1 dossiers à faire pour être à jour"
End If
If Range("W" & i) = "12.04" Then
Range("W" & i) = "12.04 Vous êtes actuellement à jour"
End If
If Range("W" & i) = "12.05" Then
Range("W" & i) = "12.05 "
End If
If Range("W" & i) = "12.06" Then
Range("W" & i) = "12.06 "
End If
Next
End Sub

Au niveau de la ligne If Range("W" & i) = "" Then
Range("W" & i) = "Session non commencée. Vous avez 4 dossiers à faire"
End If
je souhaiterais pouvoir dire à la macro que si c'est vide (ça c'est bon) OU si c'est différent de toutes les valeurs mises en dessous, ALORS mettre la phrase indiquée.

Merci de votre aide

Cordialement

Philippe
 

mutzik

XLDnaute Barbatruc
Re : Petite aide sur macro

bonjour,

dans ton exemple, il serait plus judicieux d'utiliser select case - end select
style ...
select case Range("W" & i)
case ""​
action 1​
case "12.01"
action 2
action 3
mavar ="123456"​
case 4​
...​
case else​
'si aucune des autres conditions ci-dessus
action x​
end select
 

birac

XLDnaute Junior
Re : Petite aide sur macro

bonjour,

dans ton exemple, il serait plus judicieux d'utiliser select case - end select
style ...
select case Range("W" & i)
case ""​
action 1​
case "12.01"
action 2
action 3
mavar ="123456"​
case 4​
...​
case else​
'si aucune des autres conditions ci-dessus
action x​
end select

Bonjour et merci de ta réponse.

J'ai donc tenté de reprendre la fonction que tu cites, que je ne connaissais pas et j'ai écris ceci :

Sub DOSSC1()
Dim nb As Integer, i As Integer

Select Case Range("Y" & i)
Case ""

Action "Session non commencée. Vous avez 4 dossiers à faire"

Case "DC1201"

Action "C1201 Il vous reste 3 dossiers à faire pour être à jour"

Case "DC1202"

Action "C1202 Il vous reste 2 dossiers à faire pour être à jour"

Case "DC1203"

Action "C1203 Il vous reste 1 dossier à faire pour être à jour"

Case "DC1204"

Action "C1204 Vous êtes actuellement à jour"

Case "DC1205"

Action "C1205 en attente de parution"

Case "DC1206"

Action "C1205 en attente de parution"

Case Else

'si aucune des autres conditions ci-dessus
Action "Session non commencée. Vous avez 4 dossiers à faire"
End Select
End Sub

mais lorsque je lance la macro, j'ai le message d'erreur de compilation "Sub ou fonction non définie" sur "Action"

Je dois bien évidemment faire une erreur quelque part

Cordialement

Philippe
 

MJ13

XLDnaute Barbatruc
Re : Petite aide sur macro

Bonjour Birac, Mutzig


mais lorsque je lance la macro, j'ai le message d'erreur de compilation "Sub ou fonction non définie" sur "Action"

En effet, si tu utilises des termes que le VBA ne connaît pas, tu auras des problèmes. Le mieux dans ce cas est d'utiliser l'enregistreur de macros pour voir le code généré pour l'adapter à ta macro.
 

vgendron

XLDnaute Barbatruc
Re : Petite aide sur macro

Bonjour,

Action voulait dire que tu dois mettre l'instruction vba que tu souhaites voir réalisée..
dans ton cas.. t'afficher un message? (ligne msgbox)
ou mettre tes messages dans la cellule (lignes range()=)


par contre dans mon exemple suis parti de la cellule A10 et je remonte..

Sub DOSSP()
Dim nb As Integer, i As Integer

nb = Range("A10").End(xlUp).Row

Range("A10").End(xlUp).Select
For i = 1 To nb

Select Case Range("A" & i)
Case ""
MsgBox ("Session non commencée. Vous avez 4 dossiers à faire")
Range("A" & i) = "session non commencée"

Case "12.01"
MsgBox ("12.01 il vous reste 3 dossiers à faire pour être à jour")
Range("A" & i) = "12.01 il vous reste 3 dossiers à faire pour être à jour"

Case "12.02"
MsgBox ("12.02 il vous reste 2 dossiers à faire pour être à jour")
Range("A" & i) = "12.02 il vous reste 2 dossiers à faire pour être à jour"

Case "12.03"
MsgBox ("12.03 il vous reste 1 dossiers à faire pour être à jour")
Range("A" & i) = "12.03 il vous reste 1 dossiers à faire pour être à jour"
Case "12.04"
MsgBox ("12.04 Vous êtes actuellement à jour")
Range("A" & i) = "12.04 Vous êtes actuellement à jour"

Case Else
MsgBox ("cas pas prévu par la macro")

End Select
Next i
End Sub
 
Dernière édition:

birac

XLDnaute Junior
Re : Petite aide sur macro

Un grand merci à toi, et à ceux qui ont répondu précedemment.

En effet, je n'avais pas ces notions, encore un nouvel apprentissage que je vais exploiter.

Une dernière petite question : dans ton code, sachant que j'ai mis en regard de Case Else Range("Y" & i = "Session non commencée. Vous avez 4 dossiers à faire", comment faire pour qu'il exclut la ligne 1 qui est figée avec un titre qui entre dans la catégorie des Else ?

Cordialement

Philippe
 

vgendron

XLDnaute Barbatruc
Re : Petite aide sur macro

De rien Philippe

j'imagine que la ligne 1 dont tu parles est celle du Y1
si tu ne veux pas faire le test sur cette ligne, tu commences la boucle directement à 2
for i = 2 to nb

sinon, joins ton fichier pour qu'on puisse t'aider mieux..
parce que déjà j'ai pas compris pourquoi tu commencais en W65000 et que tu sélectionnais la zone en remontant end(xlup).row
 

birac

XLDnaute Junior
Re : Petite aide sur macro

De rien Philippe

j'imagine que la ligne 1 dont tu parles est celle du Y1
si tu ne veux pas faire le test sur cette ligne, tu commences la boucle directement à 2
for i = 2 to nb

sinon, joins ton fichier pour qu'on puisse t'aider mieux..
parce que déjà j'ai pas compris pourquoi tu commencais en W65000 et que tu sélectionnais la zone en remontant end(xlup).row

Rebonjour

Ca marche impeccable, encore merci.

Pour ce qui est de "remonter" - je précise que je ne suis pas très calé en macro et donc, je viens régulièrement ici demander de l'aide. Cette fonction de remonter m'a été donné dans une autre macro.
Lorsque je récupère une aide ici, je tente ce que l'on me donne et si ca marche, je me mets à étudier celle-ci afin d'être capable de la reproduire lorsqu'un besoin similaire se fait sentir. C'est ainsi que je progresse car malheureusement, je n'ai jamais eu de formation de ce type et je n'ai pas le temps d'en faire actuellement.
Pour ton interrogation spécifique concernant le end(xlup).row, je suppose qu'il doit exister une sélection de zone qui permet de descendre. est ce de prendre la première cellule à voir (W2) et de mettre end(xldown).row ?

encore un grand merci pour ton aide

Philippe
 

Statistiques des forums

Discussions
312 165
Messages
2 085 881
Membres
103 009
dernier inscrit
dede972