[Résolu] [VBA] Comment faire une boucle de ce code au lieu de réecrire

Angelo7

Habitué
Bonjour je suis débutant en VBA et je dois faire des macro afin d'automatisé un certain nombre de chose
DOnc je fais un code qui fais plusieur fois la meme chose et j'aimerais savoir comment faire pour faire une boucle ?
voici mon code :
Code:
Range("A2").Select 
'recherche de la derniere case non vide correspondant à la zone "semaine1"  
    Selection.FormulaArray = _  
        "=INDEX(semaine1,MAX(ROW(semaine1)*NOT(ISBLANK(semaine1)))-ROW(semaine1)+1)"  
         
'range le résultat de la derniere case non vide correspondant à la zone "semaine2" en A3  
    Range("A3").Select  
     
'recherche de la derniere case non vide correspondant à la zone "semaine2"  
    Selection.FormulaArray = _  
        "=INDEX(semaine2,MAX(ROW(semaine2)*NOT(ISBLANK(semaine2)))-ROW(semaine2)+1)"
ps les 2 zones semaine1 et semaine2 sont deja défini

ce que je souhaite faire c'est que au lieu de faire 2 fois le Range et le Selection.FormulaArray donc un truc de ce genre
Code:
For i = 1 To 2 
'range le résultat de la derniere case non vide correspondant à la zone "semaineX" en A(x+1)  ex semaine1 en A2 
    Range("A" & (i + 1)).Select 
     
'recherche de la derniere case non vide correspondant à la zone "semaineX" 
    Selection.FormulaArray = _ 
        "=INDEX(semaine &i,MAX(ROW(semaine &i)*NOT(ISBLANK(semaine &i)))-ROW(semaine &i )+1)" 

Next i

le seul probleme c'est que ce code marche pas (erreur ) alors que dois je changer??
 

zeb

Modérateur
A revoir : les guillemets.

Tu veux écrire
=INDEX(semaine &i ..
ou
=INDEX("semaine" & i ..
?
Dans ce dernier cas, lorsque tu remets tout entre guillemets, n'oublie pas de doubler les guillemets à l'intérieur. T'as rien compris ? Moi non plus quansd je me relis, alors essaie ça, pour voir :

.FormulaArray = _
"=INDEX(""semaine ""& i,MAX(ROW(""semaine"" & i)*NOT(ISBLANK(""semaine"" & i)))-ROW(""semaine"" & i )+1)"

Remarque subsidiaire.
Tu écris
Range (..).Select Selection.FormulaArray = ...
Tu peux écrire
Range (..).FormulaArray = ...
Ainsi la cellule sélectionnée ne change pas. Mais c'est peut-être ce que tu veux.

Puisque tu commences : bon courage.
 

Angelo7

Habitué
Ba non ca marche toujours pas erreur d'execution 1004 : Impossible de définir la propriété FormulaArray dans la classe Range :(
 

zeb

Modérateur
Ah, d'où l'intérêt de donner l'erreur.
Euh, une précision stp : semaineN c'est quoi ?
 

Angelo7

Habitué
semaineN c'est le nom des différente zone
d'abord semaine1 puis semaine2

j'ai aussi essayé de mettre une chaine de caractere qui prend la valeurs de semaine1 puis 2 :
Code:
sem = "semaine" & i
et je met sem dans mon index au lieu de semaine :
Code:
Selection.FormulaArray = _
        "=INDEX(sem,MAX(ROW(sem)*NOT(ISBLANK(sem)))-ROW(sem)+1)"

mais ca marche pas non plus deja ca met plus d'erreur c'est un progres mais ca me met comme résultat #NOM.
il doit pas reconnaitre le sem

 

Angelo7

Habitué
On m'a donné la réponse sur un autre forum (je vais pas faire de pub je sais pas si on a le droit )
Bref il fallait une fonction:

Code:
Function MaFormule(st As String) As String
MaFormule = "=INDEX(" & st & ",MAX(ROW(" & st & ")*NOT(ISBLANK(" & st & ")))-ROW(" & st & ")+1)"
End Function

puis mettre dans la macro :
Code:
For i = 1 To 2
'range le résultat de la derniere case non vide correspondant à la zone "semaineX" en A(x+1)  ex semaine1 en A2
    Range("A" & (i + 1)).Select
    
'recherche de la derniere case non vide correspondant à la zone "semaineX"
    Selection.FormulaArray = MaFormule("Semaine" & i)

Next i
 

zeb

Modérateur
Ah, bah oui.
Et ça, ça marche ? :
Code:
For i = 1 To 2
   Range("A" & (i + 1)).FormulaArray = "=INDEX(semaine" & i & ",MAX(ROW(" & st & ")*NOT(ISBLANK(" & st & ")))-ROW(" & st & ")+1)"
Next i
Je ne crois pas que dire du bien d'un site soit interdit. Pourvu que tu ne fasses pas de diffamation par ailleurs.
 

Angelo7

Habitué
Oui ca marche aussi le dernier code que tu m'a donné
Merci à toi pour ton aide, c'est gentil !
J'aurai surement d'autre question plus tard donc je compte sur toi lol ;)
merci encor, sur ce je rentre chez moi :D
 

zeb

Modérateur
C'est bien ça, je ne savais pas trop ce qu'était ta semaine.
Pour info, ici (tu peux en dire du bien) ou ailleurs (pareil), plus tu donneras d'informations précises sur l'environnement, plus la réponse sera précise et rapide.

Bon courage.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 158
Messages
6 718 507
Membres
1 586 441
Dernier membre
Energys_Stars
Partager cette page
Haut