Se connecter avec
S'enregistrer | Connectez-vous

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

Dernière réponse : dans Programmation

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 :
  1. Range("A2").Select
  2. 'recherche de la derniere case non vide correspondant à la zone "semaine1"
  3. Selection.FormulaArray = _
  4. "=INDEX(semaine1,MAX(ROW(semaine1)*NOT(ISBLANK(semaine1)))-ROW(semaine1)+1)"
  5.  
  6. 'range le résultat de la derniere case non vide correspondant à la zone "semaine2" en A3
  7. Range("A3").Select
  8.  
  9. 'recherche de la derniere case non vide correspondant à la zone "semaine2"
  10. Selection.FormulaArray = _
  11. "=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
  1. For i = 1 To 2
  2. 'range le résultat de la derniere case non vide correspondant à la zone "semaineX" en A(x+1) ex semaine1 en A2
  3. Range("A" & (i + 1)).Select
  4.  
  5. 'recherche de la derniere case non vide correspondant à la zone "semaineX"
  6. Selection.FormulaArray = _
  7. "=INDEX(semaine &i,MAX(ROW(semaine &i)*NOT(ISBLANK(semaine &i)))-ROW(semaine &i )+1)"
  8.  
  9. Next i


le seul probleme c'est que ce code marche pas (erreur ) alors que dois je changer??
Lassé par la pub ? Créez un compte
Expert Programmation

A revoir : les guillemets.

Tu veux écrire
Citation :
=INDEX(semaine &i ..
ou
Citation :
=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 :

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


Remarque subsidiaire.
Tu écris
Citation :
Range (..).Select Selection.FormulaArray = ...
Tu peux écrire
Citation :
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.

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 :
  1. sem = "semaine" & i

et je met sem dans mon index au lieu de semaine :
  1. Selection.FormulaArray = _
  2. "=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

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:

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


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

Ah, bah oui.
Et ça, ça marche ? :
  1. For i = 1 To 2
  2. Range("A" & (i + 1)).FormulaArray = "=INDEX(semaine" & i & ",MAX(ROW(" & st & ")*NOT(ISBLANK(" & st & ")))-ROW(" & st & ")+1)"
  3. 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.
Expert Programmation

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.
Lassé par la pub ? Créez un compte