Problème Autofill dans une boucle

student42

XLDnaute Nouveau
Bonjour

Je suis en train d'écrire une macro pour traiter des données de mesure. Je suis amené à devoir normaliser plusieurs séries de données. J'utilise une boucle for et la méthode autofill pour cela. Le problème : l'autofill ne se produit que lors de la première itération de ma boucle. Après plusieurs vérifications, les plages de cellules pour les itérations suivantes semblent correctes, il ne se passe juste rien.


Pour le fichier que je suis en train de traiter, j'ai seulement 3 séries de 81 mesures chacune.

Voici le code que j'utilise :
Code:
nb_value = 81
Sheets(2).Select
Range("A1:A" & nb_value & "").Select
Selection.Copy
Sheets("Calc").Select
Range("A1").Select
ActiveSheet.Paste
Sheets(2).Select
nb_lines = Range("A1").CurrentRegion.Rows.Count
nmeasure = nb_lines / nb_value
For i = 1 To nmeasure
Sheets(2).Select
Range("B" & (i - 1) * nb_value + 1 & ":B" & i * nb_value & "").Select
Selection.Copy
Sheets("Calc").Select
Cells(1, 1 + i).Select
ActiveSheet.Paste
Cells(nb_value + 2, i + 1).Formula = "=MAX(" & Chr(65 + i) & "1:" & Chr(65 + i) & nb_value & ")"
Cells(1, nmeasure + 3).Formula = "=" & Chr(65 + i) & "1/$" & Chr(65 + i) & "$" & nb_value + 2 & ""
Range(Chr(66 + i + nmeasure) & "1").Select
Selection.AutoFill Destination:=Range(Chr(66 + i + nmeasure) & "1:" & Chr(66 + i + nmeasure) & nb_value), Type:=xlFillDefault
Next
Range("A" & nb_value + 2 & "").Value = "Maximum"

Le problème se pose donc pour i=2 :
"Cells(1, nmeasure + 3).Formula = "=" & Chr(65 + i) & "1/$" & Chr(65 + i) & "$" & nb_value + 2 & ""
Range(Chr(66 + i + nmeasure) & "1").Select
Selection.AutoFill Destination:=Range(Chr(66 + i + nmeasure) & "1:" & Chr(66 + i + nmeasure) & nb_value), Type:=xlFillDefault
"

Avez-vous une idée d'où peut venir ce problème?

Merci d'avance pour vos réponses.
 

Pièces jointes

  • h101lb.xls
    70 KB · Affichages: 59
  • h101lb.xls
    70 KB · Affichages: 60
  • h101lb.xls
    70 KB · Affichages: 59
G

Guest

Guest
Re : Problème Autofill dans une boucle

Bonjour,

Pas sûr d'avoir tout compris mais est-ce que cela va mieux avec le code ci-dessous:
VB:
Sub sequence()
    Dim col1 As String, col2 As String
    nb_value = 81
    With Sheets(2)
        .Range("A1:A" & nb_value & "").Copy Destination:=Sheets("Calc").Range("A1")
        nb_lines = .Range("A1").CurrentRegion.Rows.Count
    End With
    nmeasure = nb_lines / nb_value
    With Sheets("calc")
        For i = 1 To nmeasure
            col1 = Chr(65 + i)
            col2 = Chr(66 + i + nmeasure)
 
            Sheets(2).Range("B" & (i - 1) * nb_value + 1 & ":B" & i * nb_value & "").Copy _
                    Destination:=Sheets("Calc").Cells(1, 1 + i)
            .Cells(nb_value + 2, i + 1).Formula = "=MAX(" & col1 & "1:" & col1 & nb_value & ")"
            .Cells(1, nmeasure + 3 + i).Formula = "=" & col1 & "1/$" & col1 & "$" & nb_value + 2 & ""
            .Range(col2 & "1").AutoFill Destination:=.Range(col2 & "1:" & col2 & nb_value), Type:=xlFillDefault
        Next
        Range("A" & nb_value + 2 & "").Value = "Maximum"
    End With
End Sub

A+
 

student42

XLDnaute Nouveau
Re : Problème Autofill dans une boucle

Merci de ta réponse. Je débute en VBA et mon code n'était pas très optimisé niveau copié/collé.

J'ai essayé de lancer le programme avec ton code, au lieu d'avoir 1/3 autofill qui se fait, j'en ai 2/3 cette fois-ci.

Autre bizarrerie : quand je fais un débogage en pas à pas je remarque qu'à la première itération, l'autofill ne se fait pas, à la deuxième itération il se fait pour la première colonne, et à la troisième, il se fait pour la deuxième colonne. Tout est décalé, pourtant les colonnes sont les bonnes.

Est-ce que ça fonctionnait pour toi?
 
G

Guest

Guest
Re : Problème Autofill dans une boucle

Re,

comme je suis un paresseux, je ne me suis pas vraiment penché sur ce qu'était censé réaliser ta macro, juste sur l'écriture et ce qu'il me semblait que tu voulais faire.

Le mieux c'est de joindre un classeur avec Etat de départ et un exemple de résultat sur une feuille de ce que ta macro est sensée accomplir.

J'ai essayé de lancer le programme avec ton code, au lieu d'avoir 1/3 autofill qui se fait, j'en ai 2/3 cette fois-ci.

Conçois que cela n'est pas très explicite et ne m'apporte aucune piste de résolution du problème.

A+
 

student42

XLDnaute Nouveau
Re : Problème Autofill dans une boucle

Désolé de n'avoir pas plus détaillé que ça.

Ma macro doit copier des données d'une page à une autre. puis normaliser ces valeurs.

Concernant le copiage, les séries de données sont à la suite les unes des autres dans une première feuille ("h101lb"). La macro sépare ces différentes séries en les mettant dans des colonnes différentes d'une autre page ("Calc") :
Code:
Sheets(2).Range("B" & (i - 1) * nb_value + 1 & ":B" & i * nb_value & "").Copy _ Destination:=Sheets("Calc").Cells(1, 1 + i)

Ensuite pour normaliser, en dessous des séries de données on fait apparaître le maximum (jusque à tout fonctionne bien) :
Code:
.Cells(nb_value + 2, i + 1).Formula = "=MAX(" & col1 & "1:" & col1 & nb_value & ")"
Pour finir, pour chaque série, on calcule la valeur normalisée : chaque valeur est divisée par le maximum.
On entre donc la formule dans la première ligne de la colonne :
Code:
.Cells(1, nmeasure + 3 + i).Formula = "=" & col1 & "1/$" & col1 & "$" & nb_value + 2 & ""
puis on remplit les autres cellules de la colonne avec un autofill :
Code:
.Range(col2 & "1").AutoFill Destination:=.Range(col2 & "1:" & col2 & nb_value), Type:=xlFillDefault

(ci-joint, le fichier de base avec la macro que tu m'as corrigé)

Merci
 

Pièces jointes

  • h101lb.xls
    62.5 KB · Affichages: 58
  • h101lb.xls
    62.5 KB · Affichages: 65
  • h101lb.xls
    62.5 KB · Affichages: 62
G

Guest

Guest
Re : Problème Autofill dans une boucle

Re,

Et avec ceci ne serait-ce pas mieux:

Code:
Sub sequence()
    Dim Dest As Range
    nb_value = 81
 
    With Sheets("h101lb")
        .Range("A1:A" & nb_value & "").Copy Destination:=Sheets("Calc").Range("A1")
        nb_lines = .Range("A1").CurrentRegion.Rows.Count
    End With
 
    nmeasure = nb_lines / nb_value
 
    With Sheets("calc")
        For i = 1 To nmeasure
            Set Dest = Sheets("Calc").Cells(1, 1 + i)
 
            Dest.Resize(nb_value).Value = Sheets("h101lb").Range("B" & (i - 1) * nb_value + 1 & ":B" & i * nb_value & "").Value
            With .Cells(nb_value + 2, Dest.Column)
                    .Formula = "=MAX(" & Dest.Address() & ")"
                    Dest.Offset(, 5).Resize(nb_value).FormulaR1C1 = "=RC[-5]/" & .Address(True, True, xlR1C1)
            End With
        Next
        Range("A" & nb_value + 2 & "").Value = "Maximum"
    End With

A+
 

student42

XLDnaute Nouveau
Re : Problème Autofill dans une boucle

Je viens juste de tester, tout marche bien!

Je vais essayer de décortiquer le code demain histoire de bien comprendre.

Merci de ton aide ;)

edit : juste une petite rectification pour le calcul du maximum
Code:
.Formula = "=MAX(" & Dest.Address() & ":" & Dest.Offset(nb_value - 1).Address() & ")"
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 327
Membres
103 518
dernier inscrit
hbenaoun63