Variable please help

Ken Hutchinson

XLDnaute Occasionnel
Hello,

Je refais un poste plus complet concernant mon problème.

Je dois corriger des ventes. Suivant le numéro de la semaine la correction à apporter est différente. je suis parti au départ sur une solution avec des filtres auto mais je ne m'en sors pas.

J'ai 11 semaines avec un paquet de données à chaque semaine.

Ya t'il un moyen plus simple de faire cela ?

Code:
Sub CorrigeNmoinsUn()

Dim NoSemaine1 As String
Dim NoSemaine2 As String
Dim NoSemaine3 As String
Dim NoSemaine4 As String
Dim NoSemaine5 As String
Dim NoSemaine6 As String
Dim NoSemaine7 As String
Dim NoSemaine8 As String
Dim NoSemaine9 As String
Dim NoSemaine10 As String
Dim NoSemaine11 As String


Dim Coeff1 As String
Dim Coeff2 As String
Dim Coeff3 As String
Dim Coeff4 As String
Dim Coeff5 As String
Dim Coeff6 As String
Dim Coeff7 As String
Dim Coeff8 As String
Dim Coeff9 As String
Dim Coeff10 As String
Dim Coeff11 As String



Coeff1 = Sheets("Feuil3").Range("W20").Value
Coeff2 = Sheets("Feuil3").Range("W22").Value
Coeff3 = Sheets("Feuil3").Range("W24").Value
Coeff4 = Sheets("Feuil3").Range("W26").Value
Coeff5 = Sheets("Feuil3").Range("W28").Value
Coeff6 = Sheets("Feuil3").Range("W30").Value
Coeff7 = Sheets("Feuil3").Range("W32").Value
Coeff8 = Sheets("Feuil3").Range("W34").Value
Coeff9 = Sheets("Feuil3").Range("W36").Value
Coeff10 = Sheets("Feuil3").Range("W38").Value
Coeff11 = Sheets("Feuil3").Range("W40").Value

NoSemaine1 = Sheets("Feuil3").Range("A20").Value
NoSemaine2 = Sheets("Feuil3").Range("A22").Value
NoSemaine3 = Sheets("Feuil3").Range("A24").Value
NoSemaine4 = Sheets("Feuil3").Range("A26").Value
NoSemaine5 = Sheets("Feuil3").Range("A28").Value
NoSemaine6 = Sheets("Feuil3").Range("A30").Value
NoSemaine7 = Sheets("Feuil3").Range("A32").Value
NoSemaine8 = Sheets("Feuil3").Range("A34").Value
NoSemaine9 = Sheets("Feuil3").Range("A36").Value
NoSemaine10 = Sheets("Feuil3").Range("A38").Value
NoSemaine11 = Sheets("Feuil3").Range("A40").Value


    Sheets("Coller Data").Select
    Range("A1:I1").Select
    Selection.AutoFilter
    

    
    Selection.AutoFilter Field:=2, Criteria1:=NoSemaine1
    Range("a1").Select
    Set MaPlage = ActiveCell.CurrentRegion
    nblignes2 = MaPlage.Rows.Count
    
    
Range("J2").Select
        For i = 2 To nblignes2
            ActiveCell.Formula = "=RC[-2]* & Coeff1 & "
    ActiveCell.Offset(1, 0).Select
    Next i

' ensuite j'avais l'intention de refaire 11 fois ce code avec les 10 autres variables.

End Sub
 

tototiti2008

XLDnaute Barbatruc
Re : Variable please help

Bonjour Ken,

Huggy les bons tuyaux à la rescousse :)

Tu devrais utiliser un Tableau en VBA :
Code:
Dim Coeff(1 to 11) as String, NoSemaine(1 to 11) as String, j as long
For j = 1 to 11
Coeff(j) = Sheets("Feuil3").Range("W" & 18 + j*2).Value
NoSemaine(j)=Sheets("Feuil3").Range("A" & 18 + j*2).Value
next j
    Sheets("Coller Data").Select
    Range("A1:I1").Select
    Selection.AutoFilter
    

For j = 1 to 11    
    Selection.AutoFilter Field:=2, Criteria1:=NoSemaine(j)
    Range("a1").Select
    Set MaPlage = ActiveCell.CurrentRegion
    nblignes2 = MaPlage.Rows.Count
    
    
Range("J2").Select
        For i = 2 To nblignes2
            ActiveCell.Formula = "=RC[-2]*" & Coeff(j)
    ActiveCell.Offset(1, 0).Select
    Next i
next j

pas testé, évidement :)
 

Ken Hutchinson

XLDnaute Occasionnel
Re : Variable please help

Merci Huggy !!

Bon je ne maitrise pas les tableaux en vba. mais je veux bien m'y mettre.

Déjà mes Coeff sont des nombre avec des virgules. Je suppose que je dois mettre Variant à la place de string ?

Car la comme cela ça ne fonctionne pas...
 

tototiti2008

XLDnaute Barbatruc
Re : Variable please help

Bonjour Staple,

Ouais, moi je suis déçu par Ken Hutchinson... J'ai toujours préféré Starsky de toute façon ;)

Trève de plaisanterie, c'est vrai qu'on aime bien savoir si une solution proposée fonctionne, et si c'est le cas, on aprécie un petit merci :)
 

Ken Hutchinson

XLDnaute Occasionnel
Re : Variable please help

Oui je viens d'ajouter mes remerciements et mes excuses. Comme je l'ai dit on me met la pression sur ce sujet et j'en oublie le principal.
En plus c'est le genre d'attitude qui me blesse...

Vraiment désolé d'avoir oublié de remercier et d'avertir. D'autant plus que je n'ai jamais été déçu par les aides du forum : toujours rapide et efficace !
 

tototiti2008

XLDnaute Barbatruc
Re : Variable please help

Comme tes Coeff sont des nombres à virgules, il vaut mieux faire un tableau de type Double
Comme tes n°semaine sont des entiers, il vaut mieux les déclarer en Long

je me doute bien qu'il y a un truc au niveau de

Range("J2").Select

qui doit pas marcher, mais comme je ne sais pas où tu veux mettre tes formules...

si ça ne fonctionne pas, dit ce qui se passe... ça plante ?
 

Ken Hutchinson

XLDnaute Occasionnel
Re : Variable please help

Et voilà l'exemple épuré. les données à mettre en variable sur feuil3 et les données à corriger sur Feuil1.

Mais je me demande si je ne suis pas sur la fausse piste dans la mesure où RowCounts compte aussi les cellules filtrées...

Ne devrais-je pas plutot essayer de faire un truc du style :

Si le numero de semaine = NoSemaine1 alors multiplier H par Coeff1 ...

Qu'en pensez vous ?
 

Pièces jointes

  • Exemple.zip
    16 KB · Affichages: 25
  • Exemple.zip
    16 KB · Affichages: 25
  • Exemple.zip
    16 KB · Affichages: 22

tototiti2008

XLDnaute Barbatruc
Re : Variable please help

Bon, moi je ne peux pas ouvrir les zip mais si j'ai bien compris, teste ça :

Code:
Sub CreeFormule()
Dim Coeff(1 To 11) As Double, NoSemaine(1 To 11) As Long, j As Long, i As Long
        For j = 1 To 11
            Coeff(j) = Sheets("Feuil3").Range("W" & 18 + j * 2).Value
            NoSemaine(j) = Sheets("Feuil3").Range("A" & 18 + j * 2).Value
        Next j
    nblignes2 = Sheets("Coller Data").Range("A1").CurrentRegion.Rows.Count
        For i = 2 To nblignes2
            j = 0
                Do
                    j = j + 1
                Loop Until Sheets("Coller Data").Range("B" & i).Value = NoSemaine(j)
            Sheets("Coller Data").Range("J" & i).FormulaR1C1 = "=RC[-2]*" & Coeff(j)
        Next i
End Sub
 

Ken Hutchinson

XLDnaute Occasionnel
Re : Variable please help

ça plante sur cette ligne :

Code:
            Sheets("Coller Data").Range("J" & i).FormulaR1C1 = "=RC[-2]*" & Coeff(j)

et ça dit ERREUR D'EXECUTION 1004 / ERREUR DEFINIE PAR L'APPLICATION OU PAR L'OBJET

mais en tout cas ça déclare bien les variables
 

Discussions similaires

Statistiques des forums

Discussions
312 677
Messages
2 090 819
Membres
104 676
dernier inscrit
akram1619