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
++
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
Ma page perso DVP
Dernier et SeulTutoriel : VBA & Internet Explorer
Dernière contribution : Lien Tableau Structuré et UserForm
L'utilisation de l’éditeur de message
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:.
Mais ton problème ne saurait se résoudre sans définir Lig
Code : Sélectionner tout - Visualiser dans une fenêtre à part For iCol = 2 To .Cells(1, .Columns.Count).End(xlToLeft).Column
MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
Ma page perso DVP
Dernier et SeulTutoriel : VBA & Internet Explorer
Dernière contribution : Lien Tableau Structuré et UserForm
L'utilisation de l’éditeur de message
Je le définis à ce moment la le ligne().
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.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 : Sélectionner tout - Visualiser dans une fenêtre à part For iCol = 2 To .Cells(1, .Columns.Count).End(xlToLeft).Rows
Voici mon code complet:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
Ma page perso DVP
Dernier et SeulTutoriel : VBA & Internet Explorer
Dernière contribution : Lien Tableau Structuré et UserForm
L'utilisation de l’éditeur de message
Partager