lilikel
Messages postés20Date d'inscriptionlundi 4 août 2008StatutMembreDernière intervention12 septembre 2008
-
22 août 2008 à 12:26
cs_denis11
Messages postés1Date d'inscriptionvendredi 5 septembre 2008StatutMembreDernière intervention 7 septembre 2008
-
5 sept. 2008 à 21:21
Bonjour a tous,
J'ai redigee la macro suivante
Sub macro1()
If Range("i25") Like "0*" Then
Range("l25") = "RA2000"
ElseIf Range("i25") Like "9*" Then
Range("l25") = "UO1000"
Else
Range("l25") = ""
End If
End Sub
Mon probleme est le suivant: les 30 lignes suivantes doivent etre parametrees de la meme maniere. Or si j'applique une telle macro pour 4 lignes mon fichier fonctionne au ralenti.
Y a t il moyen de simplifier cette commande pour les 30 lignes: un equivalent de recopier vers le bas ou par une formule globale??
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 22 août 2008 à 14:57
Salut
Est ce que ceci ralentit beaucoup ton fichier
Sub macro1()
Dim i As Long
Application.ScreenUpdating = False
For i = 25 To 55
If Range("i" & CStr(i)) Like "0*" Then
Range("l" & CStr(i)) = "RA2000"
ElseIf Range("i" & CStr(i)) Like "9*" Then
Range("l" & CStr(i)) = "UO1000"
Else
Range("l" & CStr(i)) = vbNullString
End If
Next i
Application.ScreenUpdating = True
End Sub , ----
[code.aspx?ID=41455 By Renfield]
dedenet2
Messages postés372Date d'inscriptionvendredi 27 juillet 2007StatutMembreDernière intervention22 juillet 20132 22 août 2008 à 21:41
Bonjour ,
Voici le code que je te propose.
Il permet de déclencher le macro quand une saisie est effectuée dans la plage [I25:I55].
-------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
'----------------------------------------------'
'Programme en VBA Excel 2000
'Lance le macro sur saisie dans la plage [I25:I55]
'----------------------------------------------'
Dim LigneSelectionnée As Long
Dim ColonneSelectionnée As Long
Dim LigneTableauHaut As Long
Dim LigneTableauBas As Long
Dim ColonneTableauGauche As Long
Dim ColonneTableauDroite As Long
'Attribution des limites du tableau pour lancement Macro
LigneTableauHaut = 25
LigneTableauBas = 55
ColonneTableauGauche = 9
ColonneTableauDroite = 9
'Numero Ligne et Colonne selectionnées
LigneSelectionnée = Target.Row
ColonneSelectionnée = Target.Column
'Lance le macro dans la plage [I25:I55]
If LigneSelectionnée >= LigneTableauHaut And _
LigneSelectionnée <= LigneTableauBas And _
ColonneSelectionnée >= ColonneTableauGauche And _
ColonneSelectionnée <= ColonneTableauDroite Then
'Appelle le macro1
Call macro1
End If
End Sub
------------------------------------------------- La plage [I25:I55] doit est formaté en "Texte"
lilikel
Messages postés20Date d'inscriptionlundi 4 août 2008StatutMembreDernière intervention12 septembre 2008 22 août 2008 à 15:10
Tout d'abord merci pour ta reponse
mais en fait le code ne marche pas.
Mais je pense que ca doit etre moi qui est fait une erreur
Dans l'element sheet 1 j ai ecris ceci pour appeler ma macro mais je suis quasiment sure que c est pas ca
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("i" & CStr(i)) Then
Call macro1
End If
End sub
lilikel
Messages postés20Date d'inscriptionlundi 4 août 2008StatutMembreDernière intervention12 septembre 2008 22 août 2008 à 15:49
bonjour dedenet2,
jrivet m a propose cette macro
Sub macro1()
Dim i As Long
Application.ScreenUpdating = False
For i = 25 To 55 If Range("i" & CStr(i)) Like "0*" Then
Range("l" & CStr(i)) = "RA2000" ElseIf Range("i" & CStr(i)) Like "9*" Then
Range("l" & CStr(i)) = "UO1000"
Else
Range("l" & CStr(i)) = vbNullString
End If
Next i
Application.ScreenUpdating = True
End Sub
pour remplacer ma macro, qui repetee sur plusieur ligne ralentit le fichier.
Mais pour l appliquer il me semble qu il faut que j appelle la macro par une fonction mais je ne sais pas quoi designer comme target .
Apres il se peut que j ai mal compris la manip
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 26 août 2008 à 10:07
Re,
Ou bien on se sert des fonction mise à disposition par Excel pour savoir si une Cellule est contenu dans une plage (Fonction InterSec) plus sympa non?
Private Sub Worksheet_Change(ByVal Target As Range)
If InRange(Target, Range("I25:I55")) Then Call macro1
End Sub<hr />
Function InRange(Range1 As Range, Range2 As Range) As Boolean
' returns True if Range1 is within Range2
Dim InterSectRange As Range
Set InterSectRange = Application.Intersect(Range1, Range2)
InRange = Not InterSectRange Is Nothing
Set InterSectRange = Nothing
End Function<hr />
, ----
[code.aspx?ID=41455 By Renfield]
lilikel
Messages postés20Date d'inscriptionlundi 4 août 2008StatutMembreDernière intervention12 septembre 2008 26 août 2008 à 10:13
salut
en fait je debute totalement en vba....
autant j ai compris les commandes faites precedement autant celle la j ai du mal a comprendre ce qu elle fait
Si c etait ds l aide d excel je suis desolee. le mien est configuree en anglais il se peut que je sois passe dessus sans comprendre.
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 26 août 2008 à 10:36
Re,
Bah il n'y pas beaucoup à comprendre,
InRange Retourne Vrai si Range1 est COntenu dans Range2 donc ici Vrai si Target est contenu dans la plage I25:I55