Mise en condition avant lancement macro [Résolu/Fermé]

Signaler
Messages postés
10
Date d'inscription
jeudi 4 septembre 2014
Statut
Membre
Dernière intervention
1 octobre 2014
-
Messages postés
10
Date d'inscription
jeudi 4 septembre 2014
Statut
Membre
Dernière intervention
1 octobre 2014
-
Bonjour,
je suis en train de créer des macros VBA excel 2010 et je souhaiterais mettre des "conditions" avant le lancement de celles ci :

Macro Archiver : transfert une ligne sélectionnée d'un tableau feuille 4 pour la coller dans un autre tableau feuille 6

Selection.Copy
Sheets("BT ARCHIVES").Select
Rows("6:6").Select
Selection.Insert Shift:=xlDown
ActiveSheet.Paste
Range("A1").Select
Sheets("BT EN COURS").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
Range("A1").Select

Pour son lancement, je souhaiterais une vérification de la cellule colonne U soit mot OK alors lancement de la macro, si autre terme A SUIVRE ou ANNULE pas de lancement de la macro et message "attendre bilan OK", si cellule vide pas de lancement et message "remplir le bilan".

Macro RÉPÉTITIF : transfert une ligne sélectionnée R d'un tableau feuille 4 pour la coller dans un autre tableau feuille 6 et dans le tableau feuille 4 cette ligne se duplique avec effacement de certaines données

Selection.Copy
Sheets("BT ARCHIVES").Select
Rows("6:6").Select
Selection.Insert Shift:=xlDown
Range("A1").Select
Sheets("BT EN COURS").Select
Application.CutCopyMode = False
Selection.Cut
Rows("8:8").Select
Selection.Insert Shift:=xlDown
Range("L8").Select
Selection.ClearContents
Range("M8").Select
Selection.ClearContents
Range("S8:X8").Select
Selection.ClearContents
Range("A1").Select

Pour la seconde macro, j'ai 2 conditions pour la ligne sélectionnée :
en colonne B, la cellule doit faire apparaître la lettre R
en colonne U, mêmes conditions que macro archiver.
lancement de la macro si conditions colonne B cellule=R et colonne U cellule=OK
toutes autres combinaisons en colonne B et colonne U bloquent le lancement de la macro

j'espère pouvoir trouver une aide et avoir suffisamment décrit ma demande
avec tous mes remerciements

14 réponses

Messages postés
138
Date d'inscription
jeudi 17 juillet 2014
Statut
Membre
Dernière intervention
25 février 2019
7
slt,

Pour commencer on va faire des coupe sombre dans ton code pour y voir plus clair. Les select sont toujours affichés par l'enregistreur mais sont à proscrir sit tu veux que ton travail se face rapidement :

sub Archiver() 
 
dim cel as range 
'je suppose que ta selection est la ligne entière ? 
set cel = selection 

'il faut que je test sur mon ordi pour verifier que ça génèrepas un décalage 
with Sheets("BT ARCHIVES").Rows("6:6")
    .Insert Shift:=xlDown 
    .value = cel.value
end with 
'tu supprime vraiment toute la feuille ? il manque pas la selection de ta ligne ? je me suis permis de rajouter cel.
cel.Delete Shift:=xlUp 

end sub 
Messages postés
138
Date d'inscription
jeudi 17 juillet 2014
Statut
Membre
Dernière intervention
25 février 2019
7
ensuite pour verifier ce qui est écri dans la colonne U de ta ligne rien de plus simple utilise la fonction intersect qui te renvoi une range :

sub verif ()

dim cel as range 

set cel = intersect(selection, activeSheet.Range("U:U"))

'ensuite un case permet de verifier chacune de tes options : 
select case cel.value 
    case is = "OK" 
        call archiver()
    case is ="A SUIVRE" or = "ANNULE" 
        msgbox "attendre bilan ok"
    case is =""
        mgbox "remplir le bilan"
end select 

end sub 
 
Messages postés
138
Date d'inscription
jeudi 17 juillet 2014
Statut
Membre
Dernière intervention
25 février 2019
7
Je te laisse modifier la deuxième macro pour qu'elle ressemble à celles que je t'ai mises. avec le recul je ferais plutôt :

archiver(cel as range )

'et tu enlève le
dim cel
et le
set cel
de la macro et tu lui dis sur quelle ligne tu travail au moment de l'appel :
call archiver(cel) 

Messages postés
10
Date d'inscription
jeudi 4 septembre 2014
Statut
Membre
Dernière intervention
1 octobre 2014

merci pour ton temps j'ai testé ta première macro mais cela ne fonctionne pas. il faut savoir que lorsque je l'ai enregistrée, j'avais sélectionné la ligne à transférer. les feuilles 4 et 6 ont les même titres, la première récupère des bons de travaux, la seconde est une archive. pour aller de la 4 vers la 6 il faut que le bilan soit rempli.
une ligne = un bon = un bilan

je libère l'emplacement de la ligne qui par aux archives.
Messages postés
10
Date d'inscription
jeudi 4 septembre 2014
Statut
Membre
Dernière intervention
1 octobre 2014

pour la seconde proposition je dois la placer entre sub archiver et dim cel as range ou juste après set cel=selection



cette ligne elimine la ligne sélectionnée ou toute la feuille ?
cel.Delete Shift:=xlUp
Messages postés
394
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
17
En gros, la macro veriif va appeler la macro archiver.

J'imagine que tu as placer un bouton, ton bouton devrait lancer la macro verif et non pas la macro archiver.

Si on résume, tu ne place pas verif dans archiver, mais tu appel la macro verif avec ton bouton et la macro verif, selon les conditions, va appeler la macro archiver ou faire apparaître le message box.
Messages postés
394
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
17
Pour la 2ieme question, Cel est une variable qui correspond a ce qui est selectionné.

cel = selection

Donc,
Si tu selectionnes une ligne, cel c'est une ligne.
Si tu selectionnes deux ligne, cel c'est deux ligne.

Si tu selection la page entière, cel c,est la page entière.

Ensuite, quand on delete Cel, bien on delete ce qui était sélectionné.
Messages postés
138
Date d'inscription
jeudi 17 juillet 2014
Statut
Membre
Dernière intervention
25 février 2019
7
La feuille 4 et 6 avait pas deux nom differents ?
Sheets("BT EN COURS")
Sheets("BT ARCHIVES")


quand tu dis que ça ne fonctionne tu peux présciser genre : ligne qui plante, resultat, type d'erreur, ne fait pas ce qui est attendu, un grizzly a détruit ton ordinateur... :-)
Messages postés
10
Date d'inscription
jeudi 4 septembre 2014
Statut
Membre
Dernière intervention
1 octobre 2014

Bonjour lors de la copie dans la feuille 6, la ligne (6:6) change de format, la ligne sélectionnée est copiée mais les mises en forme conditionnelles ne s'appliquent pas. j'ai vérifié les mises en forme conditionnelles au départ et elles sont correctes.
Merci pour toutes les infos, je repars reformuler mes macros
Messages postés
10
Date d'inscription
jeudi 4 septembre 2014
Statut
Membre
Dernière intervention
1 octobre 2014

lorsque je lance la macro verif par le bouton (j'ai indiquer affectation verif dans son code) l'écran me signale erreur d'exécution '13' incompatibilité de type
Messages postés
138
Date d'inscription
jeudi 17 juillet 2014
Statut
Membre
Dernière intervention
25 février 2019
7
à quel ligne (surligné en jaune) ?
Messages postés
10
Date d'inscription
jeudi 4 septembre 2014
Statut
Membre
Dernière intervention
1 octobre 2014

erreur d'exécution porte sur

case is ="A SUIVRE" or = "ANNULE"

ou pour l'autre macro

Case Is = "U" Or "C" Or "S"

soit les infos bloquant et induisant les msgbox
Messages postés
138
Date d'inscription
jeudi 17 juillet 2014
Statut
Membre
Dernière intervention
25 février 2019
7
J'avais jamais essayer de mettre un
or
dans un case, ça doit pas être possible, donc la solution est de l couper en 2 :

 'ensuite un case permet de verifier chacune de tes options : 
select case cel.value 
    case is = "OK" 
        call archiver()
    case is ="A SUIVRE" 
        msgbox "attendre bilan ok"
    case is = "ANNULER"
        msgbox "attendre bilan ok"
    case is =""
        mgbox "remplir le bilan"
end select 


ça devrait mieux marcher
cordialement,
N'oubliez pas de marquez votre post comme résolu !
Messages postés
10
Date d'inscription
jeudi 4 septembre 2014
Statut
Membre
Dernière intervention
1 octobre 2014

Cela fonctionne pour les deux macro. Je te remercie Bonne journée peut être à bientôt pour d'autres soucis