[Catégorie modifiée .Net --> VBA] Simplifier une macro mettre une boucle-

Résolu
uspa Messages postés 12 Date d'inscription mercredi 21 juin 2006 Statut Membre Dernière intervention 16 octobre 2010 - 2 oct. 2010 à 18:47
uspa Messages postés 12 Date d'inscription mercredi 21 juin 2006 Statut Membre Dernière intervention 16 octobre 2010 - 2 oct. 2010 à 22:15
Bonjour,
Je débute sur la création et la modification des macros. Soyez donc indulgents avec moi.
J'ai enregistré une suite d'actions dans une macro (VBA 6.3). Cela consiste à mettre un titre de colonne dans une cellule puis à remplir les 24 cellules suivantes en incrémentant chaque cellule de 1 à 24 selon: A1, A2 ...A24.
Continuer ensuite avec B (B1, B2 ...B24)...jusqu'à P (P1, P2...P24).
Pouvez-vous m'indiquer comment mettre une boucle qui incrémente automatiquement à la place des lignes de code suivantes:
Columns("D:D").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("D1").Select
ActiveCell.FormulaR1C1 = "Coordonnées"
Range("D2").Select
ActiveCell.FormulaR1C1 = "A1"
Selection.AutoFill Destination:=Range("D2:D25"), Type:=xlFillDefault
Range("D26").Select
ActiveCell.FormulaR1C1 = "B1"
Selection.AutoFill Destination:=Range("D26:D49"), Type:=xlFillDefault
Range("D50").Select
ActiveCell.FormulaR1C1 = "C1"
Selection.AutoFill Destination:=Range("D50:D73"), Type:=xlFillDefault
...

Merci beaucoup pour votre aide
Uspa

4 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
2 oct. 2010 à 19:06
Salut et bienvenu

Première chose : remarque la catégorie dans laquelle ta question se trouve et pense à correctement la choisir la prochaine fois.
Ensuite, quand tu colles du code, il est préférable d'utiliser la coloration syntaxique 3ème icone à droite plus facile à lire et conserve les espaces de début de ligne.

Exemple :
    Dim r As Integer
    Dim t As Integer
    Dim oRange As Range
    Set oRange = Range("E2")        ' Cellule de départ
    For r = Asc("A") To Asc("P")    ' de A à P
        For t = 1 To 24             ' de 1 à 24
            oRange.Value = Chr$(r) & CStr(t)
            Set oRange = oRange.Offset(1, 0)
        Next t
    Next r
Tu noteras l'utilisation de Value et pas FormulaR1C1

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
2 oct. 2010 à 19:09
Pour pouvoir boucler sur les colonnes, il faut que tu utilises Cells et non la fontion range parce qu'on ne peut boucler que sur des entiers.

Alors commencons :
dim i as integer
dim j as integer
For int j=0 To 20
   ' j est l'indice des colonnes P est la 21 eme lettre de l'alphabet
   For i=0 To 25
      ' i est l'indice sur les lignes
       Cells(i, j).select
       ActiveCell.FormulaR1C1 = "ce que tu veux mettre"
   Next i
Next j


Je ne peux pas vérifier ce code, il y a donc peut être quelques erreurs, en particulier sur les indices de Cells, je ne sais pas s'ils commencent à 0 ou 1 mais tu t'en sortiras surement
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
2 oct. 2010 à 19:12
on m'a devancé de trois minutes !

la réponse de Jack est meilleure, je ne connaissais pas la fonction Asc.

bon courage
0
uspa Messages postés 12 Date d'inscription mercredi 21 juin 2006 Statut Membre Dernière intervention 16 octobre 2010
2 oct. 2010 à 22:15
Merci beaucoup à Jack et Julien39 pour leur réponse très rapide et efficace.
Désolé pour l'envoi de ce message dans le mauvais post.

Uspa
0
Rejoignez-nous