Selection, valeur Min, puis copie autre feuille
Résolu/Fermé
padbollevrai
Messages postés
51
Date d'inscription
mercredi 1 avril 2009
Statut
Membre
Dernière intervention
18 mars 2015
-
Modifié par padbollevrai le 6/05/2014 à 17:41
benol3 Messages postés 570 Date d'inscription lundi 29 juillet 2013 Statut Membre Dernière intervention 7 mai 2015 - 7 mai 2014 à 12:37
benol3 Messages postés 570 Date d'inscription lundi 29 juillet 2013 Statut Membre Dernière intervention 7 mai 2015 - 7 mai 2014 à 12:37
A voir également:
- Selection, valeur Min, puis copie autre feuille
- Copie cachée - Guide
- Copie écran samsung - Guide
- Feuille de pointage excel - Télécharger - Tableur
- Copie disque dur - Guide
- Min en maj - Guide
7 réponses
f894009
Messages postés
17241
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 février 2025
1 713
6 mai 2014 à 18:22
6 mai 2014 à 18:22
Bonjour,
Sub Filling_B()
Dim k As Long
Dim LastlineIn As Integer, LastlineOut As Integer
Dim Mini As Integer
Dim Plage As Range
With Worksheets("INPUT")
Lastline = .Range("A" & Rows.Count).End(xlUp).Row 'Compter le nombre de lignes'
For k = 3 To Lastline Step 2 'faire varier de 3 à la dernière ligne'
Set Plage = .Range("B" & k & ":B" & k + 1) 'mettre "Bk" et "Bk+1" dans Range'
Mini = Application.WorksheetFunction.Min(Plage) 'mettre le min de Range dans Min'
LastlineOut = Worksheets("OUTPUT").Range("C" & Rows.Count).End(xlUp).Row + 1
Worksheets("OUTPUT").Range("C" & LastlineOut) = Mini
Next k
End With
End Sub
padbollevrai
Messages postés
51
Date d'inscription
mercredi 1 avril 2009
Statut
Membre
Dernière intervention
18 mars 2015
1
Modifié par padbollevrai le 7/05/2014 à 09:54
Modifié par padbollevrai le 7/05/2014 à 09:54
Merci beaucoup !
Mais il y a un problème, il ne se passe rien sur la feuille. Lors du pas-à-pas, le programme passe directement de "For k = 3 to LastLine Step 2" à Next k, et ce sans effectuer les actions entre les deux... "Plage" = Nothing et toutes les valeurs à 0.
Des idées ?
Merci
EDIT: Trouvé, tu avais mis des " LastLine" alors que tu avais déclaré des "LastLineIn". Le programme tourne correctement, en revanche la fonction MIN ne fonctionne pas parce qu'elle me remplit la colonne C avec des zéro... J'avais exactement ce souci de mon coté, je ne sais pas ce qui cloche !
Mais il y a un problème, il ne se passe rien sur la feuille. Lors du pas-à-pas, le programme passe directement de "For k = 3 to LastLine Step 2" à Next k, et ce sans effectuer les actions entre les deux... "Plage" = Nothing et toutes les valeurs à 0.
Des idées ?
Merci
EDIT: Trouvé, tu avais mis des " LastLine" alors que tu avais déclaré des "LastLineIn". Le programme tourne correctement, en revanche la fonction MIN ne fonctionne pas parce qu'elle me remplit la colonne C avec des zéro... J'avais exactement ce souci de mon coté, je ne sais pas ce qui cloche !
padbollevrai
Messages postés
51
Date d'inscription
mercredi 1 avril 2009
Statut
Membre
Dernière intervention
18 mars 2015
1
7 mai 2014 à 10:25
7 mai 2014 à 10:25
Re-bonjour,
J'ai pas réussi à utiliser la fonction MIN, donc j'essaie autre chose. Vu que je n'ai que 2 valeurs à chaque fois, je pensais à les comparer pour trouver le Mini.
Voici le code:
Le programme tourne mais rien ne se passe, Mini reste toujours à 0 et les variables V1 et V2 ne prennent pas les valeurs Bk et Bk+1. V1 est "" et V2 est "0".
Des idées ?
Merci
J'ai pas réussi à utiliser la fonction MIN, donc j'essaie autre chose. Vu que je n'ai que 2 valeurs à chaque fois, je pensais à les comparer pour trouver le Mini.
Voici le code:
Sub Filling_B_bis()
Dim k As Long
Dim LastlineIn As Integer, LastlineOut As Integer
Dim Min As Integer, V1 As String, V2 As String
Dim Plage As Range
With Worksheets("INPUT")
Lastline = .Range("A" & Rows.Count).End(xlUp).Row
For k = 3 To Lastline Step 2
V1 = Range("B" & k).Value
V2 = Range("B" & k + 1).Value
If V1 < V2 Then V1 = Min Else V2 = Min
LastlineOut = Worksheets("OUTPUT").Range("C" & Rows.Count).End(xlUp).Row + 1
Worksheets("OUTPUT").Range("C" & LastlineOut) = Mini
Next k
End With
End Sub
Le programme tourne mais rien ne se passe, Mini reste toujours à 0 et les variables V1 et V2 ne prennent pas les valeurs Bk et Bk+1. V1 est "" et V2 est "0".
Des idées ?
Merci
benol3
Messages postés
570
Date d'inscription
lundi 29 juillet 2013
Statut
Membre
Dernière intervention
7 mai 2015
87
Modifié par benol3 le 7/05/2014 à 10:33
Modifié par benol3 le 7/05/2014 à 10:33
Remplace cette ligne :
If V1 < V2 Then V1 = Min Else V2 = Min
par "If V1 < V2 Then Mini = V1 Else Mini =V2"
Change le type de k par "integer"
If V1 < V2 Then V1 = Min Else V2 = Min
par "If V1 < V2 Then Mini = V1 Else Mini =V2"
Change le type de k par "integer"
padbollevrai
Messages postés
51
Date d'inscription
mercredi 1 avril 2009
Statut
Membre
Dernière intervention
18 mars 2015
1
7 mai 2014 à 10:43
7 mai 2014 à 10:43
Merci.
J'ai trouvé le problème: Quand la feuille Input de mon classeur est ouverte, les valeurs de V1 et V2 sont correctement entrées, sinon non. Donc le "With Worksheets("Input") ne marche pas.
Aussi, que les valeurs soient prises en compte ou non, rien n'est recopié dans la feuille Output...
J'ai trouvé le problème: Quand la feuille Input de mon classeur est ouverte, les valeurs de V1 et V2 sont correctement entrées, sinon non. Donc le "With Worksheets("Input") ne marche pas.
Aussi, que les valeurs soient prises en compte ou non, rien n'est recopié dans la feuille Output...
benol3
Messages postés
570
Date d'inscription
lundi 29 juillet 2013
Statut
Membre
Dernière intervention
7 mai 2015
87
Modifié par benol3 le 7/05/2014 à 11:10
Modifié par benol3 le 7/05/2014 à 11:10
"Dim Mini As Integer" et non "Dim Min As Integer"
La valeur a affecter est stocker dans mini or mini n'a pas été déclaré...
tu as déclaré V1 et V2 en string pour avoir le minimum, il faut qu'ils soient en integer
fais attention c'est LastlineIn qui a été déclaré et non Lastline donc modife le nom de tes variables
La valeur a affecter est stocker dans mini or mini n'a pas été déclaré...
tu as déclaré V1 et V2 en string pour avoir le minimum, il faut qu'ils soient en integer
fais attention c'est LastlineIn qui a été déclaré et non Lastline donc modife le nom de tes variables
benol3
Messages postés
570
Date d'inscription
lundi 29 juillet 2013
Statut
Membre
Dernière intervention
7 mai 2015
87
7 mai 2014 à 11:11
7 mai 2014 à 11:11
padbollevrai
Messages postés
51
Date d'inscription
mercredi 1 avril 2009
Statut
Membre
Dernière intervention
18 mars 2015
1
7 mai 2014 à 11:17
7 mai 2014 à 11:17
Merci Benol, mais les restrictions d'accès de mon entreprise m'empêchent d'ouvrir ce type de liens.
Bon, j'ai enfin un truc qui marche !
Par contre, il faut impérativement que je me trouve dans la bonne page du classeur, c'est à dire la page INPUT, pour que les valeurs soient prises.
J'ai mis des ActiveWorkbook.Sheets("INPUT") partout, mais rien n'y fait !
Des idées ?
Merci
Bon, j'ai enfin un truc qui marche !
Sub Filling_B_bis()
Dim K As Integer
Dim Lastline As Integer
Dim Min As String
Dim V1 As String, V2 As String
Set shJT = ActiveWorkbook.Sheets("INPUT")
Lastline = Range("A" & Rows.Count).End(xlUp).Row
For K = 3 To Lastline Step 2
Set shJT = ActiveWorkbook.Sheets("INPUT")
V1 = Range("B" & K).Value
V2 = Range("B" & K + 1).Value
If V1 < V2 Then Min = V1 Else Min = V2
Set shJT = ActiveWorkbook.Sheets("OUTPUT")
LastlineOut = Worksheets("OUTPUT").Range("C" & Rows.Count).End(xlUp).Row + 1
Worksheets("OUTPUT").Range("C" & LastlineOut) = Min
Next K
End Sub
Par contre, il faut impérativement que je me trouve dans la bonne page du classeur, c'est à dire la page INPUT, pour que les valeurs soient prises.
J'ai mis des ActiveWorkbook.Sheets("INPUT") partout, mais rien n'y fait !
Des idées ?
Merci
benol3
Messages postés
570
Date d'inscription
lundi 29 juillet 2013
Statut
Membre
Dernière intervention
7 mai 2015
87
Modifié par benol3 le 7/05/2014 à 11:38
Modifié par benol3 le 7/05/2014 à 11:38
Fais attention, tu as toujours V1 et V2 en type STRING
Enlève tes "ActiveWorkbook.Sheets("INPUT") " et rajoute juste "sheets("Input").select" juste après ta ligne : for..
Ainsi que "sheets("Output").select" juste avant ta ligne : LastlineOut=...
Ps : ton instruction commence par : "Set shJT =" par conséquent excel interprète shJT comme un objet or il n'est pas déclaré. Je te conseille de rajouter : "option explicit" dasn tous tes modules VBA. Excel va te signale ce genre d'erreurs...
Enlève tes "ActiveWorkbook.Sheets("INPUT") " et rajoute juste "sheets("Input").select" juste après ta ligne : for..
Ainsi que "sheets("Output").select" juste avant ta ligne : LastlineOut=...
Ps : ton instruction commence par : "Set shJT =" par conséquent excel interprète shJT comme un objet or il n'est pas déclaré. Je te conseille de rajouter : "option explicit" dasn tous tes modules VBA. Excel va te signale ce genre d'erreurs...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
padbollevrai
Messages postés
51
Date d'inscription
mercredi 1 avril 2009
Statut
Membre
Dernière intervention
18 mars 2015
1
Modifié par padbollevrai le 7/05/2014 à 11:55
Modifié par padbollevrai le 7/05/2014 à 11:55
Effectivement, cette commande est plus efficace.
Ca marche nikel maintenant, meme avec V1 et V1 en String, pourquoi les changer ?
Une remarque: Avec le passage d'une feuille à l'autre, c'est très saccadé et long, j'ai donc ajouté une commande pour désactiver le rafraichissement de l'affichage le temps de l'exécution.
Voilà !
Ca marche nikel maintenant, meme avec V1 et V1 en String, pourquoi les changer ?
Une remarque: Avec le passage d'une feuille à l'autre, c'est très saccadé et long, j'ai donc ajouté une commande pour désactiver le rafraichissement de l'affichage le temps de l'exécution.
Sub Filling_B_Min()
Dim K As Integer
Dim Lastline As Integer
Dim Min As String
Dim V1 As String, V2 As String
Application.ScreenUpdating = False
Sheets("INPUT").Select
Lastline = Range("A" & Rows.Count).End(xlUp).Row
For K = 3 To Lastline Step 2
Sheets("INPUT").Select
V1 = Range("B" & K).Value
V2 = Range("B" & K + 1).Value
If V1 < V2 Then Min = V1 Else Min = V2
Sheets("OUTPUT").Select
LastlineOut = Worksheets("OUTPUT").Range("C" & Rows.Count).End(xlUp).Row + 1
Worksheets("OUTPUT").Range("C" & LastlineOut) = Min
Next K
Application.ScreenUpdating = True
End Sub
Voilà !
benol3
Messages postés
570
Date d'inscription
lundi 29 juillet 2013
Statut
Membre
Dernière intervention
7 mai 2015
87
7 mai 2014 à 12:01
7 mai 2014 à 12:01
Les string sont des chaines de caractères. Ce n'est pas très cohérents de les comparer avec des opérateurs mathématiques surtout si tes valeurs à comparer ne sont que des valeurs numériques...
padbollevrai
Messages postés
51
Date d'inscription
mercredi 1 avril 2009
Statut
Membre
Dernière intervention
18 mars 2015
1
7 mai 2014 à 12:02
7 mai 2014 à 12:02
Que mettre à la place? ça ne marchait que comme ça donc bon...
benol3
Messages postés
570
Date d'inscription
lundi 29 juillet 2013
Statut
Membre
Dernière intervention
7 mai 2015
87
7 mai 2014 à 12:27
7 mai 2014 à 12:27
De quelle type sont tes valeurs à comparer ? Entiers, Décimaux...?
padbollevrai
Messages postés
51
Date d'inscription
mercredi 1 avril 2009
Statut
Membre
Dernière intervention
18 mars 2015
1
7 mai 2014 à 12:30
7 mai 2014 à 12:30
Ce sont des valeurs décimales négatives.
benol3
Messages postés
570
Date d'inscription
lundi 29 juillet 2013
Statut
Membre
Dernière intervention
7 mai 2015
87
7 mai 2014 à 12:37
7 mai 2014 à 12:37
Alors met comme type : double à la place de string
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 312
7 mai 2014 à 12:30
7 mai 2014 à 12:30
Bonjour
Essaies ce code rapide
maquette de W
https://www.cjoint.com/?3EhmEpkfTFT
Essaies ce code rapide
Option Explicit
Option Base 1
Sub filling_B()
Dim LastlineIn As Integer, T_in(), Nbre As Integer, Idx_in As Integer
Dim T_out(), idx_out As Integer
Application.ScreenUpdating = False 'fige le défilement de l'écran
With Sheets("input")
LastlineIn = .Range("B" & Rows.Count).End(xlUp).Row 'Compter le nombre de lignes'
T_in = Application.Transpose(.Range("B3:B" & LastlineIn))
End With
Nbre = UBound(T_in)
If Nbre Mod 2 <> 0 Then Nbre = Nbre - 1 'ajuste au nombre d'éléments pair
'collecte les mini
ReDim T_out(Nbre / 2) 'dimensionne le tableau des mIn
idx_out = 1
For Idx_in = 1 To Nbre Step 2
T_out(idx_out) = T_in(Idx_in)
If T_in(Idx_in) >= T_in(Idx_in + 1) Then T_out(idx_out) = T_in(Idx_in + 1)
idx_out = idx_out + 1
Next
'restitution
With Sheets("output")
.Range("C1:C18000").Clear
With .Range("C1").Resize(UBound(T_out), 1)
.Value = Application.Transpose(T_out)
.Borders.Weight = xlThin
End With
.Activate
End With
End Sub
maquette de W
https://www.cjoint.com/?3EhmEpkfTFT
padbollevrai
Messages postés
51
Date d'inscription
mercredi 1 avril 2009
Statut
Membre
Dernière intervention
18 mars 2015
1
7 mai 2014 à 12:33
7 mai 2014 à 12:33
Merci beaucoup !
J'ai trouvé un code qui marche mais je garde celui-ci sous le bras pour la suite !
J'ai trouvé un code qui marche mais je garde celui-ci sous le bras pour la suite !