Besoin aide pour macro excel ?

Résolu
tchulio -  
tchulio Messages postés 160 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

je démarre un peu dans la VBA et j'aurais besoin d'un petit coup de main.
j'ai créé une macro excel, qui a pour champs d'action les cellules L5, L6, L7.

Et je voudrais savoir si c'est possible d'insérer une incrémantation automatique après chaque enregistrement de feuille, je précise:

Quand j'ouvre mon tableau les actions s'appliquent sur les cellules L5,L6,L7 et je voudrais qu'après enregistrement de la feuille elle s'appliquent sur les cellules L8,L9,L10 ainsi de suite.

Est-ce possible?

Merci beaucoup de votre aide, parce que je galère un peu là
:)
A voir également:

11 réponses

ego
 
les cellules L5-6-7 sont vides?
tu les remplis et il faut que la macro attende que les cellules 8-9-10 soient remplies?
0
tchulio
 
exact L5-6-7 sont vides, puis une fois qu'elle sont remplie et que j'enregistre, je voudrais que la marco agisse sur sur L8-9-10, ainsi de suite.

Merci de ta réponse
0
tchulio
 
please help
0
tchulio
 
personne n'aurait la solution alors :(

J'aimerais bien finir ce tableau pour la reprise du travail lundi....

MErci de vos conseils
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
bonjour

Pour ne pas être bloqué avec L5/L7, je te propose de nommer ta plage, par exemple "action" et de l'utiliser dans ta macro.

Comme "après chaque enregistrement de feuille", tu veux passer 3 lignes plus bas, tu mets cette macro dans thisworkbook et lorsque tu va sauver ta plage d'action va se décaler de 3 lignes si j'ai compris ta problématique.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim i As Integer
Dim l As Long
l = 5
For i = 1 To ActiveWorkbook.Names.Count
    If ActiveWorkbook.Names(i).Name = "action" Then
        l = Range(ActiveWorkbook.Names(i)).Row
    End If
Next i
ActiveWorkbook.Names.Add Name:="action", RefersToR1C1:= _
        "=Feuil1!R" & l + 3 & "C12:R" & l + 6 & "C12"
End Sub
0
tchulio
 
C'est parfait je te remercie :)

t'es un dieu pour moi!!
0
tchulio Messages postés 160 Date d'inscription   Statut Membre Dernière intervention   1
 
j'ai essayé de joindre ta macro aujourd'hui au boulot, cf:

bonjour

Pour ne pas être bloqué avec L5/L7, je te propose de nommer ta plage, par exemple "action" et de l'utiliser dans ta macro.

Comme "après chaque enregistrement de feuille", tu veux passer 3 lignes plus bas, tu mets cette macro dans thisworkbook et lorsque tu va sauver ta plage d'action va se décaler de 3 lignes si j'ai compris ta problématique.


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim i As Integer
Dim l As Long
l = 5
For i = 1 To ActiveWorkbook.Names.Count
If ActiveWorkbook.Names(i).Name = "action" Then
l = Range(ActiveWorkbook.Names(i)).Row
End If
Next i
ActiveWorkbook.Names.Add Name:="action", RefersToR1C1:= _
"=Feuil1!R" & l + 3 & "C12:R" & l + 6 & "C12"
End Sub

_______________________________________________________________

Je l'ai placé dans comme tu m'a dit dans "thisworkbook", mais a ce que je comprend, il ne reconnait pas la plage d'action.
Pourrais tu juste me nommé ma plage d'action sur ma macro si ce n'est pas trop te demander?? ;)

Voici ma macro =>


Private Sub CheckBox1_Click()

End Sub

Private Sub CheckBox2_Click()

End Sub

Private Sub UserForm_Activate()
' Remplace la propriéte TripleState mise à True
CheckBox1.Value = Null
CheckBox2.Value = False
CheckBox3.Value = False
End Sub

Private Sub OK_Click()
Dim Langue1 As String
Dim Langue2 As String
Dim Langue3 As String
If CheckBox1.Value = False Then
Langue1 = ""
Else
Langue1 = "X"
End If
If CheckBox2.Value = False Then
Langue2 = ""
Else
Langue2 = "X"
End If
If CheckBox3 = False Then
Langue3 = ""
Else
Langue3 = "X"
End If
CasesACocher.Hide
Range("L5").Value = Langue1
Range("L6").Value = Langue2
Range("L7").Value = Langue3
Range("A1").Select
End Sub
Private Sub Annuler_Click()
CasesACocher.Hide
End Sub

(LA PLAGE D'ACTION ETANT DANS L5-L6-L7)

Merci de tout coeur...
J'étais vraiment bloqué... il ne me reste plus que ce petit détail...Merci
0
ego
 
tu peux essayer un truc tout simple comme ca :
sub tonoeuvre()
dim i as integer, myvar as string
' tu testes si L5 est vide
i=5
myvar = range("L" & i).value
'tu peux aussi tester la derniere cellule de ta plage
myvar = range("L" & i+3).value
ca depend de ce que tu entends faire car je n ai pas compris ce que tu entendais par incrementer
tu peux aussi terster tes cellules par un do while
myvar = range("L" & i).value
do while myvar <>""
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
bonjour

La plage se nomme bien automatiquement mais il faut sauver le fichier pour cela.

Pour utiliser la macro de décalage, il faut sauver ton fichier puis tu remplaces ces 3 lignes

Range("L5").Value = Langue1
Range("L6").Value = Langue2
Range("L7").Value = Langue3

par

Range("action").Cells(1, 1).Value = Langue1
Range("action").Cells(2, 1).Value = Langue2
Range("action").Cells(3, 1).Value = Langue3

Ainsi à chaque fois que tu vas sauver ton classeur ta plage d'action sera décalée de 3 lignes, et il me semble que c'était le but ?

Quand j'ouvre mon tableau les actions s'appliquent sur les cellules L5,L6,L7 et je voudrais qu'après enregistrement de la feuille elle s'appliquent sur les cellules L8,L9,L10 ainsi de suite.
0
tchulio Messages postés 160 Date d'inscription   Statut Membre Dernière intervention   1
 
Exact.

Tu as tout bien compris ;)

J'essaye tout de suite
merci
0
tchulio Messages postés 160 Date d'inscription   Statut Membre Dernière intervention   1
 
toujours quelques petits souci .... :(

Si tu veux je peux t'envoyer le fichier par mail ?

Il y a cette ligne qui se met en surbrillance =>

l = Range(ActiveWorkbook.Names(i)).Row

Dis moi si tu veux que je t'envoie le fichier?

Ce doit être un tout petit détail... Merci...

Si des fois, voici mon adresse => jtassetti@bluewin.ch

Je reviens vers 19h.
a+
0