Faut-il que je le précise dans le code?
Version imprimable
Salut
Ta variable Lig, depuis ta dernière grande modification, elle n'est plus initialisée.
Modifie les CodeNames de tes feuilles, ça permet de les utiliser directement dans le code que ça allège grandement
Pièce jointe 394547
++Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 Sub ZoneTexte1New_Cliquer() Dim iCol As Integer wsInitiale.Range("B2:Z7").Copy wsInitialeOpti.Range("B2") wsActuelle.Range("B2:AA7").Copy wsActuelleOpti.Range("B2") With wsSolution For iCol = 2 To .Cells(1, .Columns.Count).End(xlToLeft).Rows If .Cells(8, iCol) = "Oui" Then If .Cells(6, iCol).Value = "Coût moyen par site initial" Then If .Cells(4, iCol) = "Situation Initiale" Then wsInitialeOpti.Range("B7").Value = .Cells(3, iCol).Value Else wsActuelleOpti.Range("B7").Value = .Cells(3, iCol).Value End If ElseIf .Cells(4, iCol) = "Situation Initiale" Then 'On selectionne le bon onglet où affecter les modifications wsInitialeOpti.Cells(lig, .Cells(5, iCol).Value + 2).Value = wsInitialeOpti.Cells(lig, .Cells(5, iCol).Value + 2).Value + .Cells(7, iCol).Value - .Cells(3, iCol).Value Else wsActuelleOpti.Cells(lig, .Cells(5, iCol).Value + 2).Value = wsActuelleOpti.Cells(lig, .Cells(5, iCol).Value + 2).Value + .Cells(7, iCol).Value - .Cells(3, iCol).Value End If ElseIf Cells(8, iCol) = "Non" Then MsgBox ("La solution " & iCol - 1 & " n'est pas retenue") End If Next iCol End With End Sub
Qwaz
Bonjour Qwaz,
J'ai renommé comme toi les feuilles et j'ai copié-coller ton code.
En revanche, quand je lance le code j'ai le message d'erreur suivant qui apparaît. Est-ce un problème de version Excel: Pièce jointe 394553.
Mais ton problème ne saurait se résoudre sans définir LigCode:For iCol = 2 To .Cells(1, .Columns.Count).End(xlToLeft).Column
Je le définis à ce moment la le ligne().
Code:
1
2
3
4
5
6
7 Function ligne() For i = 2 To 7 ' boucle a modifier si tu rajoute des coût ( ou tu peux parcourir toute ta colonne) If Cells(6, 2).Value = Worksheets("Situation Initiale").Cells(i, 1) Then ligne = i 'ici on récupère la coordonnée du Coût impacté End If Next End Function
Mets un Option Explicit avant ton premier Sub.
Ca t'obligera à déclarer tes variables.
A mon avis, ton erreur vient de lig : à moins que j'ai mal regardé, cette variable n'est ni déclarée, ni renseignée.
De la même façon que la variable iCol.
https://msdn.microsoft.com/fr-fr/VBA.../dim-statement
C'est peu probable.Citation:
Merci d'avance pour cette réponse. Après cela je pense que ce sera bon.
Définir une variable, c'est bien. La renseigner, c'est mieux.
Si lig est déclarée, ça reste une coquille vide qui a peu de chance de convenir comme paramètre de Cells.
J'ai toujours une incompatibilité de type à cette ligne là:
Mais plus de message d'erreur sur le lig.Code:For iCol = 2 To .Cells(1, .Columns.Count).End(xlToLeft).Rows
Voici mon code complet:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 Option Explicit Function ligne() For i = 2 To 7 ' boucle a modifier si tu rajoute des coût ( ou tu peux parcourir toute ta colonne) If Cells(6, 2).Value = Worksheets("Situation Initiale").Cells(i, 1) Then ligne = i 'ici on récupère la coordonnée du Coût impacté End If Next End Function Sub ZoneTexte1_Cliquer() Dim iCol As Integer wsInitiale.Range("B2:Z7").Copy wsInitialeOpti.Range("B2") wsActuell.Range("B2:AA7").Copy wsActuelleOpti.Range("B2") With wsSolution For iCol = 2 To .Cells(1, .Columns.Count).End(xlToLeft).Rows If .Cells(8, iCol) = "Oui" Then If .Cells(6, iCol).Value = "Coût moyen par site initial" Then If .Cells(4, iCol) = "Situation Initiale" Then wsInitialeOpti.Range("B7").Value = .Cells(3, iCol).Value Else wsActuelleOpti.Range("B7").Value = .Cells(3, iCol).Value End If ElseIf .Cells(4, iCol) = "Situation Initiale" Then 'On selectionne le bon onglet où affecter les modifications wsInitialeOpti.Cells(ligne(), .Cells(5, iCol).Value + 2).Value = wsInitialeOpti.Cells(ligne(), .Cells(5, iCol).Value + 2).Value + .Cells(7, iCol).Value - .Cells(3, iCol).Value Else wsActuelleOpti.Cells(ligne(), .Cells(5, iCol).Value + 2).Value = wsActuelleOpti.Cells(ligne(), .Cells(5, iCol).Value + 2).Value + .Cells(7, iCol).Value - .Cells(3, iCol).Value End If ElseIf Cells(8, iCol) = "Non" Then MsgBox ("La solution " & iCol - 1 & " n'est pas retenue") End If Next iCol End With End Sub
Le "s" final.
Rows fait référence à l'ensemble des lignes, pas au numéro de ligne.
En plus, avec une recherche vers la gauche, ce n'est pas du numéro de ligne que tu as besoin mais du n° de colonne.
PS : tu devrais prendre un peu plus que 5 min à chercher par toi-même avant de demander qu'on fasse ton travail.
Parce que perso, ce jeu de ping-pong ne va pas tarder à ma gaver. :?
Salut
Remonte et regarde le message #24, tu y trouveras la ligne corrigée... prend le temps de regarder les messages stp.
++
Qwaz