Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Variable please help

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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 🙂
 
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...
 
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 🙂
 
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 !
 
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 ?
 
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

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
 
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
 
Re : Variable please help

je te conseille

Sheets("Coller Data").Range("J" & i).Value = Sheets("Coller Data").Range("H" & i).Value * Coeff(j)

mais ça doit marcher, même si je ne sais pas du tout pourquoi l'autre ne marchait pas...
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
181
  • Question Question
Microsoft 365 Code VBA
Réponses
10
Affichages
862
Réponses
2
Affichages
465
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…