MACRO rechercher la valeur max dans une colonne ?

MACRO rechercher la valeur max dans une colonne ? - VB/VBA/VBS - Programmation

Marsh Posté le 07-02-2007 à 17:59:38    

Bonjour à tous,
 
Je cherche une macro qui sélectionne la cellule contenant la valeur max, sachant que les valeurs des cellules sont de ce type :
 
colonne A
07-01-005
07-01-005
07-01-005
07-02-006A
07-02-006B
07-08-005
07-08-005
07-01-004
07-01-004A
.........
 
merci de votre aide,

Reply

Marsh Posté le 07-02-2007 à 17:59:38   

Reply

Marsh Posté le 07-02-2007 à 18:06:55    

Bonsoir,
Et là, quelle est la valeur max?
peux-tu nous les claser par ordre décroissant pour voir?
Cordialement

Reply

Marsh Posté le 08-02-2007 à 08:57:43    

Bonjour,
 
la valeur max est 07-08-005A
 
ci-dessous la liste trié par ordre décroissant
ce sont des N° de devis 07 = annéée / 08 = mois du devis / 001 = N° du devis du mois /  
lettre correspond à un sous devis d'une même demande
colonne A
07-08-005A
07-08-005
07-02-006B
07-02-006A
07-01-005
07-01-005
07-01-005
07-01-004A
07-01-004
 
merci de ton aide,
 
 

Reply

Marsh Posté le 08-02-2007 à 12:14:30    

Bonjour,
en gros cela??
Sub Macro4()
ligmax = Cells(65000, 1).End(xlUp).Row
monmax = ""
For i = 1 To ligmax
If Cells(i, 1) > monmax Then
monmax = Cells(i, 1)
imax = i
End If
Next i
Cells(imax, 1).Select
 
 
 
End Sub

Reply

Marsh Posté le 08-02-2007 à 12:41:56    

J'ai oublié de te dire que je suis novice en vba (je tatonne doucettement),  
je viens de copier ta macro, mais quand je l'execute je bloc sur  
Cells(imax, 1).Select  
erreur d'éxecution
 
je dois certainement modifier certaines données dans la macro ?
 
 
D'avance merci,

Reply

Marsh Posté le 08-02-2007 à 13:58:52    

Bonjour,
si c'est un ficher de test, peux-tu l'envoyer?
en passant par
http://www.cjoint.com/
Cordialement

Reply

Marsh Posté le 08-02-2007 à 15:45:29    

Ci-dessous fichier,
 
http://cjoint.com/?cipRGHcZBL
 
a ta disposition pour ttes info complémentaire,
 
Merci bcp,

Reply

Marsh Posté le 08-02-2007 à 15:58:32    

Bonsoir,
pourquoi as-tu mis "6" dans monmax?
 
Sub Macro5()
'
' Macro5 Macro
' Macro enregistrée le 08/02/2007 par pinheiro
'
 
'
ligmax = Cells(65000, 1).End(xlUp).Row
monmax = ""
For i = 2 To ligmax
If Cells(i, 1) > monmax Then
monmax = Cells(i, 1)
imax = i
End If
Next i
Cells(imax, 1).Select
End Sub
 
 
 
en supprimant le 6 cela ne plante pas chez moi.
@+

Reply

Marsh Posté le 08-02-2007 à 16:53:10    


mea culpa
 
le 6 c'est moi sui l'ai mis par erreur
 
cela marche très bien (sauf que je suis obligé de retirer mon entête de colonne en a1=N°devis, car la macro sélectionne à chaque fois la cellule A1)
 
encore merci,

Reply

Marsh Posté le 08-02-2007 à 16:59:16    

non, le for i=2 to ligmax   permet de sauter la première ligne

Reply

Marsh Posté le 08-02-2007 à 16:59:16   

Reply

Marsh Posté le 08-02-2007 à 17:48:26    

RE MEA CULPA,  
FORMIDABLE CA FONCTIONNE
je n'avais pas réalisé les tests sur ta dernière version
par contre, pour comprendre :
ligmax = Cells(65000, 1).End(xlUp).Row   (cherche le max à partir de la dernière ligne)
monmax = ""    (max de valeur texte)
For i = 2 To ligmax ( à partir de la ligne 2)
If Cells(i, 1) > monmax Then  ( ? )
monmax = Cells(i, 1)   (adresse de la cellule max)
imax = i         (?)
End If
Next i
Cells(imax, 1).Select   (sélectionne la cellule valeur max)
End Sub
 
merci de compléter ou corriger si tu as du temps à me consacrer (c'est pour mieux comprendre Vba)
 
tu vas peut être dire que j'abuse, mais je suis sur une autre macro :
With Range(IIf([A1] = Range("W1" ), [A1], [A:A].Find(Range("W1" ), [A1])), "B65536" )
Range(.Item(1), .ColumnDifferences(.Item(1))(0)).Select
End With
End Sub
elle fonctionne mais pas vraiment comme je veux
je souhaiterai trouver (toujours pour le même fichier) :
un N° devis bien précis dans la colonne A (car cette macro sélectionne les valeurs commençant par...)
sélectionner uniquement les 7 derniéres lignes contenant cette valeur
les couper et supprimer(pour ne pas laisser de lignes vides dans la base)
pour les coller sur une autre feuille
 
A ta dispo pour tout complément d'info,

Reply

Marsh Posté le 08-02-2007 à 18:01:42    


 
ligmax = Cells(65000, 1).End(xlUp).Row   (cherche la dernière ligne non vide à partir du bas de la colonne)
monmax = ""    (rempli à null au départ contiendra le max de valeur texte)
For i = 2 To ligmax ( à partir de la ligne 2)
If Cells(i, 1) > monmax Then  ( cells(i,1).value pour être plus correct donne le contenu de la cellule placée en ligne i  et colonne 1 ? )
monmax = Cells(i, 1)   (si cells(i,1).value est supérieur à la valeur se trouvant dans monmax, alors c'est provisoirement la plus grande, je la range dans monmax et conserve le numéro de la ligne dans imax)
imax = i         (voir la réponse ligne au dessus)
End If
Next i
Cells(imax, 1).Select   (sélectionne la cellule en ligne imax colonne 1)
End Sub
 

Reply

Marsh Posté le 08-02-2007 à 19:12:15    

Bonsoir,
pas bien compris ce que tu veux faire de ta macro?
sélectionner les sept lignes consécutives?
sélectionner toutes les lignes dispersées dont la colonne 1 est identique?  
 

Reply

Marsh Posté le 08-02-2007 à 20:04:59    

pour être plus claire, je cherche une macro qui :
- sélectionne toutes les lignes contenant dans la colonne A le N° devis rechercher (type 07-01-002A)
- couper (et supprimer pour ne pas laisser des lignes vides) et coller ces lignes sur la feuille 2
 
j'espère être plus claire,
 

Reply

Marsh Posté le 08-02-2007 à 20:40:41    

tu n'as qu'à utiliser le filtre que tu as mis en place

Reply

Marsh Posté le 08-02-2007 à 22:15:32    

tes lignes sont-elles les unes derriére les autres de façon continue?  
le type 07-01-002A inclue-t-il 07-01-002    07-01-002b  etc?

Reply

Marsh Posté le 08-02-2007 à 23:50:31    

oui, les lignes contenant une valeur identique se suivent (mais la liste n'est pas dans un ordre précis coiss ou décroiss).
la macro doit identifier et sélectionner les cellules contenant exactement la même valeur (equiv) 07-01-002A étant une valeur et 07-01-002 en étant une autre

Reply

Marsh Posté le 08-02-2007 à 23:54:08    

en quoi le filtre ne te convient pas ?
c'est pour mieux comprendre ce dont tu as besoin

Reply

Marsh Posté le 08-02-2007 à 23:54:57    

cette valeur est elle contenu dans une variable?

Reply

Marsh Posté le 09-02-2007 à 07:56:01    

Bonjour,
 
premier "jet" à étudier:
 
 
monarticle = "06-12-007"
     
    Range("a1" ).AutoFilter Field:=1, Criteria1:=monarticle
     
    Range(Cells(2, 1), Cells(65527, 1).End(xlUp)).Select
    Selection.EntireRow.Select
    'ici copy dans autre fichier
    Selection.Delete
    ActiveSheet.ShowAllData
 
les coller dans une autre feuille du même classeur?
 
Cordialement


Message édité par seniorpapou le 09-02-2007 à 08:41:02
Reply

Marsh Posté le 09-02-2007 à 10:05:56    

j'ai testé la macro fonctionne, COOOOOL
 
la valeur cherchée se trouve sur autre classeur (clas1), mais parcontre les lignes sélectionnées dans le clas2 doivent être collés sur une autre de feuille de ce clas 2 (infos collés à la suite-dans dernière ligne vide).
Windows("Classeur1" ).Activate
    monarticle = Range("G1" )
    Windows("Classeur2" ).Activate
    Range("a1" ).AutoFilter Field:=1, Criteria1:=monarticle  
    Range(Cells(2, 1), Cells(65527, 1).End(xlUp)).Select
    Selection.EntireRow.Select
    'ici copy dans autre fichier
    Selection.Delete
    ActiveSheet.ShowAllData
End Sub
 
Par contre serait-il possible de sélectionner les 7 1ère lignes filtrées uniquement, je m'explique :
1 devis = 7 lignes maxi (car 7 produit par devis)
Clas1 est ma matrice pour renseigner les devis (j'ai déjà réalisé une macro qui copie les données sur clas2 feuil 1 dernière cellule vide)
Clas2 feuille 1 est ma base active de mes devis (dernière mis à jour)
Clas2 feuille 2 est mon historique des modifications
 

Reply

Marsh Posté le 09-02-2007 à 15:02:08    

Bonjour,
comme d'habitude, à aménager, à tester etc...
 
Application.DisplayAlerts = False
    ligneinser = Sheets("feuil2" ).Cells(65527, 1).End(xlUp).Row + 1
    monarticle = "06-12-005"
     
    Range("a1" ).AutoFilter Field:=1, Criteria1:=monarticle
     
    Range(Cells(2, 1), Cells(65527, 1).End(xlUp)).Select
    Selection.EntireRow.Copy
    ActiveSheet.Paste Destination:=Sheets("feuil2" ).Cells(ligneinser, 1)
     
        Selection.Delete
    ActiveSheet.ShowAllData
    Application.DisplayAlerts = True
 
Cordialement


Message édité par seniorpapou le 09-02-2007 à 16:18:17
Reply

Marsh Posté le 09-02-2007 à 15:57:15    

o final c'est bien un filtre ?!

Reply

Marsh Posté le 09-02-2007 à 16:18:04    

bonsoir, ingenieurcesi,  
 
c'est bien un filtre, mais en macro puisque lasapinière le demande en macro

Reply

Marsh Posté le 09-02-2007 à 16:27:07    

formidable, cela marche,
 
Sauf, je sais j'abuse peu être, serait-il possible de copier uniquement les 7 premières lignes filtrées (qui sont en principe mon devis avant modification) et les lignes restantes (les 7 dernières en principe le devis mis à jour)
 
a ta dispo,

Reply

Marsh Posté le 09-02-2007 à 16:36:08    

bonjour lasapiniere,
 
pour information,
je sais pas si tu connais mais tu peux utiliser l'enregistrement de macro  
en lancant l'enregistrement et en faisant à la suite le filtre tu aurais obtenu une partie du code
 
seniorpapou il sert a quoi ton display alert, tu voulais pas plutot mettre "la mise à jour de l'ecran" ( ce que tu m'avais montré la dernière fois pour améliorer le sudoku ) ?

Reply

Marsh Posté le 09-02-2007 à 16:45:15    

lasapiniere a écrit :

formidable, cela marche,
 
Sauf, je sais j'abuse peu être, serait-il possible de copier uniquement les 7 premières lignes filtrées (qui sont en principe mon devis avant modification) et les lignes restantes (les 7 dernières en principe le devis mis à jour)
 
a ta dispo,


 
Application.DisplayAlerts = False  
    ligneinser = Sheets("feuil1" ).Cells(65527, 1).End(xlUp).Row + 1  
Range(Cells(ligneinser-2, 1), Cells(ligneinser, 1).End(xlUp)).Select  
    Selection.EntireRow.Copy  
    ActiveSheet.Paste Destination:=Sheets("feuil2" ).Cells(2, 1)
    monarticle = "06-12-005"  
     
    Range("a1" ).AutoFilter Field:=1, Criteria1:=monarticle  
     
    Range(Cells(2, 1), Cells(65527, 1).End(xlUp)).Select  
    Selection.EntireRow.Copy  
    ActiveSheet.Paste Destination:=Sheets("feuil2" ).Cells(9, 1)  
     
        Selection.Delete  
    ActiveSheet.ShowAllData  
    Application.DisplayAlerts = True  
 
ca devrait marche
tes données sont bien sur la feuil1 , tu copie les 7 dernières et tu copie celles obtenues par l'enregistrement ?

Reply

Marsh Posté le 09-02-2007 à 16:46:15    

avant ca  
    Range("a1" ).AutoFilter Field:=1, Criteria1:=monarticle
 
rajoute sheets("feuil1" ).select

Reply

Marsh Posté le 09-02-2007 à 17:05:13    

Bonsoir,
pour ingenieurcesi  le :

Citation :

Application.DisplayAlerts = False  


pour éviter d'avoir à répondre à un message de confirmation au moment du delete
 
 
   

Citation :

ligneinser = Sheets("feuil1" ).Cells(65527, 1).End(xlUp).Row + 1
Range(Cells(ligneinser-2, 1), Cells(ligneinser, 1).End(xlUp)).Select  


ne serait-ce pas:    
 
     ligneinser = Sheets("feuil1" ).Cells(65527, 1).End(xlUp).Row  
     Range(Cells(ligneinser-6, 1), Cells(ligneinser, 1).End(xlUp)).Select  
@+


Message édité par seniorpapou le 09-02-2007 à 17:06:31
Reply

Marsh Posté le 09-02-2007 à 17:33:26    

et meme ligneinser-7 pour avoir les 7 dernières
 
par contre ton selection.delete supprime les valeurs selectionnées. je n'ai vu nulle part qu'il voulait les supprimer.
 
 

Reply

Marsh Posté le 09-02-2007 à 18:01:58    

voir son post le 8/2/07 à 20h 04.59
 
meme ligneinser-7 pour avoir les 7 dernières : oui si tu gardes row+1
mais j'ai retiré le +1

Reply

Marsh Posté le 09-02-2007 à 18:04:50    

effectivement et oui j'etais rester sur le +1

Reply

Marsh Posté le 13-02-2007 à 13:06:30    

bonjour,
désolé, j'étais absent quelques temps
j'ai essayé la macro ci-dessous, mais malheureusement cela ne fonctionne pas.
elle ne copie pas les bonnes lignes, sur la feuille 2 ni les supprime de la feuille 1
Windows("Classeur1" ).Activate
monarticle = Range("G1" )
Windows("test macro" ).Activate
Application.DisplayAlerts = False
ligneinser = Sheets("feuil1" ).Cells(65527, 1).End(xlUp).Row
Range(Cells(ligneinser - 6, 1), Cells(ligneinser, 1).End(xlUp)).Select
Selection.EntireRow.Copy
ActiveSheet.Paste Destination:=Sheets("feuil2" ).Cells(2, 1)
monarticle = Range("G1" )
Sheets("feuil1" ).Select
Range("a1" ).AutoFilter Field:=1, Criteria1:=monarticle
Range(Cells(2, 1), Cells(65527, 1).End(xlUp)).Select
Selection.EntireRow.Copy
ActiveSheet.Paste Destination:=Sheets("feuil2" ).Cells(9, 1)
Selection.Delete
ActiveSheet.ShowAllData
Application.DisplayAlerts = True
End Sub

 
un exemple (avec le devis 07-01-003) pour essayer d'être plus claire en ce qui concerne ma demande.
clas 1 = basse de donnée avec mon N° de devis en G1
clas 2 = archives modif / avec feuil 1 et feuil 2
          feuil 1 : dernière maj devis    /  feuil 2 : historique modifs
j'ai réalisé une macro qui : copie les infos du clas 1 dans clas 2 feuil 1 (à partir de la dernière ligne vide), ce qui fait :
clas2 feuil 1
devis
07-01-002 (x7lignes)
07-01-003 (x7lignes)
07-01-004 (x7lignes)
07-01-003 (x7 lignes) infos collées par le biais de ma macro
la macro que l'on cherche doit donner le résultat suivant :
clas2 feuil 1                                      clas 2 feuil 2
devis                                               devis  
07-01-002 (x7lignes)                          07-01-003 (x7lignes)
07-01-004 (x7lignes)
07-01-003 (x7 lignes)
pour le numéro de devis traité, elle recherche dans  
- clas2feuil1 les lignes contenant le n° de devis (filtre) (soit 14 lignes)
- copie / supprime et colle (dans la prmière ligne vide) les 7 premières lignes contenant le N°devis (pas ligne entête bien sur) dans clas2feuil2
 
a votre disposition,  

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed