Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1962 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  MACRO rechercher la valeur max dans une colonne ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

MACRO rechercher la valeur max dans une colonne ?

n°1511920
lasapinier​e
Posté le 07-02-2007 à 17:59:38  profilanswer
 

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,

mood
Publicité
Posté le 07-02-2007 à 17:59:38  profilanswer
 

n°1511923
seniorpapo​u
Posté le 07-02-2007 à 18:06:55  profilanswer
 

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

n°1512072
lasapinier​e
Posté le 08-02-2007 à 08:57:43  profilanswer
 

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,
 
 

n°1512152
seniorpapo​u
Posté le 08-02-2007 à 12:14:30  profilanswer
 

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

n°1512160
lasapinier​e
Posté le 08-02-2007 à 12:41:56  profilanswer
 

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,

n°1512193
seniorpapo​u
Posté le 08-02-2007 à 13:58:52  profilanswer
 

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

n°1512273
lasapinier​e
Posté le 08-02-2007 à 15:45:29  profilanswer
 

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

n°1512284
seniorpapo​u
Posté le 08-02-2007 à 15:58:32  profilanswer
 

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.
@+

n°1512304
lasapinier​e
Posté le 08-02-2007 à 16:53:10  profilanswer
 


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,

n°1512305
seniorpapo​u
Posté le 08-02-2007 à 16:59:16  profilanswer
 

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

mood
Publicité
Posté le 08-02-2007 à 16:59:16  profilanswer
 

n°1512326
lasapinier​e
Posté le 08-02-2007 à 17:48:26  profilanswer
 

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,

n°1512330
seniorpapo​u
Posté le 08-02-2007 à 18:01:42  profilanswer
 


 
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
 

n°1512346
seniorpapo​u
Posté le 08-02-2007 à 19:12:15  profilanswer
 

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?  
 

n°1512356
lasapinier​e
Posté le 08-02-2007 à 20:04:59  profilanswer
 

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,
 

n°1512374
ingenieurc​esi
Posté le 08-02-2007 à 20:40:41  profilanswer
 

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

n°1512401
seniorpapo​u
Posté le 08-02-2007 à 22:15:32  profilanswer
 

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?

n°1512422
lasapinier​e
Posté le 08-02-2007 à 23:50:31  profilanswer
 

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

n°1512423
ingenieurc​esi
Posté le 08-02-2007 à 23:54:08  profilanswer
 

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

n°1512424
ingenieurc​esi
Posté le 08-02-2007 à 23:54:57  profilanswer
 

cette valeur est elle contenu dans une variable?

n°1512432
seniorpapo​u
Posté le 09-02-2007 à 07:56:01  profilanswer
 

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
n°1512467
lasapinier​e
Posté le 09-02-2007 à 10:05:56  profilanswer
 

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
 

n°1512608
seniorpapo​u
Posté le 09-02-2007 à 15:02:08  profilanswer
 

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
n°1512669
ingenieurc​esi
Posté le 09-02-2007 à 15:57:15  profilanswer
 

o final c'est bien un filtre ?!

n°1512693
seniorpapo​u
Posté le 09-02-2007 à 16:18:04  profilanswer
 

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

n°1512697
lasapinier​e
Posté le 09-02-2007 à 16:27:07  profilanswer
 

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,

n°1512707
ingenieurc​esi
Posté le 09-02-2007 à 16:36:08  profilanswer
 

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 ) ?

n°1512722
ingenieurc​esi
Posté le 09-02-2007 à 16:45:15  profilanswer
 

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 ?

n°1512725
ingenieurc​esi
Posté le 09-02-2007 à 16:46:15  profilanswer
 

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

n°1512732
seniorpapo​u
Posté le 09-02-2007 à 17:05:13  profilanswer
 

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
n°1512771
ingenieurc​esi
Posté le 09-02-2007 à 17:33:26  profilanswer
 

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.
 
 

n°1512794
seniorpapo​u
Posté le 09-02-2007 à 18:01:58  profilanswer
 

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

n°1512795
ingenieurc​esi
Posté le 09-02-2007 à 18:04:50  profilanswer
 

effectivement et oui j'etais rester sur le +1

n°1514057
lasapinier​e
Posté le 13-02-2007 à 13:06:30  profilanswer
 

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,  

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  MACRO rechercher la valeur max dans une colonne ?

 

Sujets relatifs
rechercher un morceau de nom de fichierRécupérer valeur formules (colage spéciale valeur)
valeur de la selection d'une liste déroulante dans une variable[word] incompatibilité macro et formulaire
xsl/xml la feuille de style n'affiche pas la valeur souhaitérecupérer derniere valeur enregister
pbleme pour recuperer valeur d'un champcomparer des valeur dans un tableau
Recherhce d'une valeur dan un fichier texteHelp !! Erreur de syntaxe sur macro Catia V5R16
Plus de sujets relatifs à : MACRO rechercher la valeur max dans une colonne ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR