Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Bonjour,
La macro placée dans le fichier ne me détecte pas la valeur max de la colonne B comme je le voudrais. Cependant je ne vois pas où est l'erreur.
Merci de me donner votre solution et de m'expliquer mon erreur.
A+
C'est la définition de la plage active en colonne B qui pose problème. Essaye la syntaxe suivante :
Sub Max()
Dim MyRange As Range, Reponse As String
With Sheets("feuil1")
Set MyRange = .Range("B2:B" & .Range("B65536").End(xlUp).Row)
Reponse = Application.WorksheetFunction.Max(MyRange)
MsgBox "la valeur max est " & Reponse
End With
End Sub
Ci dessous le code modifier
Sub test()
Dim myrange As Range
Dim reponse As String
Set myrange = Worksheets("feuil1").Range("b1:b65000")
reponse = Application.WorksheetFunction.Max(myrange)
MsgBox "la valeur max est " & reponse
End Sub
donc en enlevant les "." cela fonctionne (attention, j'ai testé directement sur mon fichier d'origine et pas sur le fichier test ci-joint !).
Sais-tu pourquoi ?
m🙂 : cela fonctionne correctement.
Merci à vous 2 pour vos solutions🙂.
A+
Juste un mini détail : vu que tu travailles sur 2007, tu risque avoir un soucis avec ces codes si tu as plus de 65536 lignes (c'est vrai, c'est plutôt rare...).
Mais pour être sur de ne pas tomber sur cette limitation, je te propose ce code :
VB:
Sub Max()
Dim MyRange As Range, Reponse As String
With Sheets("feuil1")
Set MyRange = .Range("B2:B" & .Range("B" & .Rows.Count).End(xlUp).Row)
End With
Reponse = Application.WorksheetFunction.Max(MyRange)
MsgBox "la valeur max est " & Reponse
End Sub
PS: je l'ai précisé au début, c'est vraiment un mini-détail. Certains appelleront ça de "l'enculage de mouche" 😀
Re
merci à mromain🙂 et à Manu dont les propositions fonctionnent.
mromain : ta proposition fonctionne sur le fichier test mais pas telle quelle sur le fichier original (même remarque qu'à CBernardT dont j'ai testé la macro sur le fichier test et pas de problème😉,, à savoir que je dois enlever des"." pour que cela ne plante pas.
Pour plus de clarté, je vous joins un extrait de mon code original où j'ai dû enlever les "." après
Si la macro fonctionne sur le fichier test et non sur le fichier réel, j'y vois deux erreurs possibles :
1- Une erreur banale de transcription, toujours possible ;
2- Une erreur de syntaxe, plus probable, correspondant à une mauvaise adaptation au fichier réel.
A noter que les "." sont là pour lier la plage à une feuille. Dans le test, la feuille est "Feuil1", peut-être que dans le fichier réel, la désignation est différente ?
David, je dis peut-être une grosse bêtise, mais j'ai l'impression que l'on est en train de se mélanger les pinceaux entre les deux méthodes.
Soit on utilise le With /End with, et dans ce cas là, pas la peine de répéter le nom de l'onglet puisqu'il est défini dans le With, en revanche il faut des points :
Code:
With Sheets("Feuil1")
Set myrange = .Range("B2:B" & .Range("B" & .Rows.Count).End(xlUp).Row)
End With
Soit on n'utilise pas le With/End With, du coup on précise le nom de l'onglet dans l'instruction, il ne faut donc plus de points:
Code:
Set myrange = Sheets("Feuil1").Range("B2:B" & Range("B" & Rows.Count).End(xlUp).Row)
Voilà ce que je comprends, mais je suis avec attention la suite car je ne suis pas sûre.
Donc il est normal que les . devant Range provoque une erreur, ces cellules ne faisant pas partie de ta zone de référence...
Tu pourrais corriger ainsi :
Code:
With Sheets("BD")
With .Range("C65000").End(xlUp).Rows
.Offset(1, 0).PasteSpecial Paste:=xlValue, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
.Offset(1, 12).FormulaR1C1 = Date
End With
'.Offset(1, -1) = Application.WorksheetFunction.Max(Range("B2", Range("B2").End(xlDown)))proposition mth
.Range("C65000").End(xlUp).Rows.Offset(1, -1) = Application.Max(.Range("B2:B" & .Range("B" & .Rows.Count).End(xlUp).Row))
End With
Set myrange = Sheets("Feuil1").Range("B2:B" & Range("B" & Rows.Count).End(xlUp).Row)
Attention, cette syntaxe n'est pas totalement correcte :
La plage est bien définie, elle est liée à une feuille, par contre, la définition de la dernière ligne n'est liée à aucune feuille, chose pouvant entraîner une possible erreur en cas de changement de feuille !
Correction :
Set myrange = Sheets("Feuil1").Range("B2:B" & Sheets("Feuil1").Range("B" & Rows.Count).End(xlUp).Row
Dim DerLig As Long
Sheets("création").Range("E6:E17").Copy
With Sheets("BD")
DerLig = .Range("C65000").End(xlUp).Row + 1
With .Cells(DerLig, 3)
.PasteSpecial Paste:=xlValue, Transpose:=True
.Offset(, 12).Value = Date
End With
.Cells(DerLig, 2) = Application.Max(.Range("B2:B" & .Range("B" & .Rows.Count).End(xlUp).Row))
End With
Bon, du coup j'ai un peu l'impression de squatter le fil de David 🙂o tu m'en veux pas ? ), mais voilà qui m'aide à structurer un peu mes tatonnements empiriques, donc pardon à David, mais un très grand MERCI bhbh et CBernardT pour vos commentaires 🙂
Dim DerLig As Long
Sheets("création").Range("E6:E17").Copy
With Sheets("BD")
DerLig = .Range("C65000").End(xlUp).Row + 1
With .Cells(DerLig, 3)
.PasteSpecial Paste:=xlValue, Transpose:=True
.Offset(, 12).Value = Date
End With
.Cells(DerLig, 2) = Application.Max(.Range("B2:B" & .Range("B" & .Rows.Count).End(xlUp).Row))
End With
Bon, dis-moi si j'ai compris et n'hésite pas à me corriger et à m'apporter des précisions parce qu'il y a des infos que je n'ai pas comprises au niveau de la syntaxe :le fait de placer le "." évite de reprendre le nom de la feuille à laquelle on fait référence. Donc :
Code:
With Sheets("BD")
: la feuille BD est sélectionnée
Code:
DerLig = .Range("C65000").End(xlUp).Row + 1
on définit la 1ère ligne vide de cette feuille
With .Cells(DerLig, 3)
.PasteSpecial Paste:=xlValue, Transpose:=True
.Offset(, 12).Value = Date
End With
Là, tu sors de la référence liée à la 3ème cellule (end with), tu te "rattaches" à nouveau à à la feuille sélectionnée et tu fais référence à la 2ème cellule de la ligne.
Est-ce cela ?
CBernardT
merci pour l'info concernant la syntaxe car je ne le savais pas😉
mth
j'ai un peu l'impression de squatter le fil de David ( tu m'en veux pas ? )
Le deuxième, à la première cellule vide de la colonne C
Tu peux également insérer un autre With complètement indépendant, du style :
Code:
Dim DerLig As Long
Dim DerCol As Integer
Sheets("création").Range("E6:E17").Copy
With Sheets("BD")
DerLig = .Range("C65000").End(xlUp).Row + 1
With .Cells(DerLig, 3)
.PasteSpecial Paste:=xlValue, Transpose:=True
.Offset(, 12).Value = Date
With Sheets("AutreFeuille")
DerCol = .Range("IV1").End(xlToLeft).Column
End With
End With
.Cells(DerLig, 2) = Application.Max(.Range("B2:B" & .Range("B" & .Rows.Count).End(xlUp).Row))
End With
Ici, je calcule la dernière colonne de la feuille "AutreFeuille", le With est complétement indépendant des 2 autres au-dessus...
Pour bien de repérer, que ce soit dans les boucles ou autres, n'oublie pas l'indentation, comme dans mon code, cela te permet de lire facilement tes codes (comme s'il y avait des tabulations...)
Bon courage dans ton apprentissage...(mais tu sais où trouver de l'aide...😀)
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD