Plages variables et multiples regressions
Bonjour à tous,
J'ai un code qui effectue plusieurs régressions linéaires avec des séries dont la longueur est non fixe.
J'ai 18 variables à expliquer (colonne C à U) que je régresse avec 1 variable explicative (colonne B)
Option Explicit
Sub Calcul_régression()
'
' Calcul_régression Macro
'Suprime les données et les bordures des précédentes regressions
'Sélectionne l'ensemble des données non vides d'une colonne
'Calcule l'ensemble des régressions des différents secteurs et enregistre les données dans la feuille "regression taux longs"
'Copie le nom du secteur correspondant à la regession dans la feuille "données" et le colle en face de la cellule "Rapport détaillé" de la feuille Reg_taux_longs
Dim dest As Worksheet
Dim source As Worksheet
Dim dernlig As Long
Set dest = ThisWorkbook.Sheets("Reg_taux_longs")
Set source = ThisWorkbook.Sheets("Données")
dernlig = source.Range("C" & Rows.Count).End(xlUp).Row
dest.Cells.ClearContents
dest.Cells.Borders(xlDiagonalDown).LineStyle = xlNone
dest.Cells.Borders(xlDiagonalUp).LineStyle = xlNone
dest.Cells.Borders(xlEdgeLeft).LineStyle = xlNone
dest.Cells.Borders(xlEdgeTop).LineStyle = xlNone
dest.Cells.Borders(xlEdgeBottom).LineStyle = xlNone
dest.Cells.Borders(xlEdgeRight).LineStyle = xlNone
dest.Cells.Borders(xlInsideVertical).LineStyle = xlNone
dest.Cells.Borders(xlInsideHorizontal).LineStyle = xlNone
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$C$5:$C$" & dernlig), _
source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$1:$I$18"), False, False, False, False, , False
dest.Range("B1").FormulaR1C1 = "=Données!R[3]C[1]"
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$D$5:$D$" & dernlig), _
source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$20:$I$38"), False, False, False, False, , False
dest.Range("B20").FormulaR1C1 = "=Données!R[-16]C[2]"
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$E$5:$E$" & dernlig), _
source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$40:$I$58"), False, False, False, False, , False
dest.Range("B40").FormulaR1C1 = "=Données!R[-36]C[3]"
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$F$5:$F$" & dernlig), _
source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$60:$I$78"), False, False, False, False, , False
dest.Range("B60").FormulaR1C1 = "=Données!R[-56]C[4]"
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$G$5:$G$" & dernlig), _
source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$80:$I$98"), False, False, False, False, , False
dest.Range("B80").FormulaR1C1 = "=Données!R[-76]C[5]"
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$H$5:$H$" & dernlig), _
source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$100:$I$118"), False, False, False, False, , False
dest.Range("B100").FormulaR1C1 = "=Données!R[-96]C[6]"
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$I$5:$I$" & dernlig), _
source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$120:$I$138"), False, False, False, False, , False
dest.Range("B120").FormulaR1C1 = "=Données!R[-116]C[7]"
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$J$5:$J$" & dernlig), _
source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$140:$I$158"), False, False, False, False, , False
dest.Range("B140").Select
ActiveCell.FormulaR1C1 = "=Données!R[-136]C[8]"
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$K$5:$K$" & dernlig), _
source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$160:$I$178"), False, False, False, False, , False
dest.Range("B160").FormulaR1C1 = "=Données!R[-156]C[9]"
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$L$5:$L$" & dernlig), _
source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$180:$I$198"), False, False, False, False, , False
dest.Range("B180").FormulaR1C1 = "=Données!R[-176]C[10]"
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$M$5:$M$" & dernlig), _
source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$200:$I$218"), False, False, False, False, , False
dest.Range("B200").FormulaR1C1 = "=Données!R[-196]C[11]"
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$N$65:$N$" & dernlig), _
source.Range("$B$65:$B$" & dernlig), False, False, , dest.Range("$A$220:$I$238"), False, False, False, False, , False
dest.Range("B220").FormulaR1C1 = "=Données!R[-216]C[12]"
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$O$65:$O$" & dernlig), _
source.Range("$B$65:$B$" & dernlig), False, False, , dest.Range("$A$240:$I$258"), False, False, False, False, , False
dest.Range("B240").FormulaR1C1 = "=Données!R[-236]C[13]"
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$P$173:$P$" & dernlig), _
source.Range("$B$173:$B$" & dernlig), False, False, , dest.Range("$A$260:$I$278"), False, False, False, False, , False
dest.Range("B260").FormulaR1C1 = "=Données!R[-256]C[14]"
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$Q$65:$Q$" & dernlig), _
source.Range("$B$65:$B$" & dernlig), False, False, , dest.Range("$A$280:$I$298"), False, False, False, False, , False
dest.Range("B280").FormulaR1C1 = "=Données!R[-276]C[15]"
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$R$5:$R$" & dernlig), _
source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$300:$I$318"), False, False, False, False, , False
dest.Range("B300").FormulaR1C1 = "=Données!R[-296]C[16]"
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$S$5:$S$" & dernlig), _
source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$320:$I$338"), False, False, False, False, , False
dest.Range("B320").FormulaR1C1 = "=Données!R[-316]C[17]"
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$T$65:$T$" & dernlig), _
source.Range("$B$65:$B$" & dernlig), False, False, , dest.Range("$A$340:$I$358"), False, False, False, False, , False
dest.Range("B340").FormulaR1C1 = "=Données!R[-336]C[18]"
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$U$5:$U$" & dernlig), _
source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$360:$I$378"), False, False, False, False, , False
dest.Range("B360").FormulaR1C1 = "=Données!R[-356]C[19]"
End Sub
Ce code marche, mais je souhaiterais l'optimiser car je répète 18 fois la même actions ...
Je pense avoir trouvé comment passer d'une colonne à l'autre automatiquement.
Option Explicit
Sub Calcul_régression()
'
' Calcul_régression Macro
'Suprime les données et les bordures des précédentes regressions
'Sélectionne l'ensemble des données non vides d'une colonne
'Calcule l'ensemble des régressions des différents secteurs et enregistre les données dans la feuille "regression taux longs"
'Copie le nom du secteur correspondant à la regession dans la feuille "données" et le colle en face de la cellule "Rapport détaillé" de la feuille Reg_taux_longs
Dim dest As Worksheet
Dim source As Worksheet
Dim dernlig As Long
Dim derncol As String
Dim T
Dim a$
a$ = Range("C1").SpecialCells(xlCellTypeLastCell).Address
T = Split(a$, "$", -1)
derncol = T(1)
Set dest = ThisWorkbook.Sheets("Reg_taux_longs")
Set source = ThisWorkbook.Sheets("Données")
dernlig = source.Range("C" & Rows.Count).End(xlUp).Row
derncol = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
dest.Cells.ClearContents
dest.Cells.Borders(xlDiagonalDown).LineStyle = xlNone
dest.Cells.Borders(xlDiagonalUp).LineStyle = xlNone
dest.Cells.Borders(xlEdgeLeft).LineStyle = xlNone
dest.Cells.Borders(xlEdgeTop).LineStyle = xlNone
dest.Cells.Borders(xlEdgeBottom).LineStyle = xlNone
dest.Cells.Borders(xlEdgeRight).LineStyle = xlNone
dest.Cells.Borders(xlInsideVertical).LineStyle = xlNone
dest.Cells.Borders(xlInsideHorizontal).LineStyle = xlNone
For i = C To derncol
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$i$5:$i$" & dernlig), _
source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$1:$G$18"), False, False, False, False, , False
dest.Range("B1").FormulaR1C1 = "=Données!R[3]C[1]"
Next
End Sub
Seulement, j'ai trois problématiques:
- La variable à expliquer i (pour rappel il y en a 18) commence soit à la ligne 5 et soit à la ligne 65 ou 173, comment faire commencer la régression à partir de la première cellule non vide de i. Par exemple, lorsqu'une variable à expliquer i commence à la ligne 65, la variable à expliquer sera source.Range("$B$65:$B$" & dernlig)
- Si le résultat de la première régression doit bien être stocké dans ("$A$1:$G$18"), je souhaiterais stocker les autres résultats dans des plages de 18 lignes et 7 colonnes automatiquement et espacer ces plages avec 1 ligne vide
- Ensuite, je copie colle le nom de la régression (qui est l'entête de la colonne i) à la 1ere ligne et deuxième colonne de la dite plage
Quelqu'un saurait-il comment faire une ou plusieurs de ces opérations?
Merci d'avance!
Bonjour,
Attention à la manière d'écrire. Tu créer une variable i, mais dans le code, quand tu écris "i", elle est lue comme étant le caractère i.
En résumé :
"$i$5:$i$" & dernlig
Est différent de ;
"$" & i & "$5:$" & i & "$" & dernlig
Aussi, ta boucle est mal écrite :
For i = C To derncol
La valeur i est un caractère, et tu vas générer une erreur car VBA ne sait pas incrémenter un format string dans une boucle. C'est comme si tu demandais d'aller de "Fromage" à "Avion de chasse", quelle est la succession logique entre ces 2 valeurs ? Pour faire ce que tu souhaites, je ton conseille d'utiliser la fonction chr(i), qui renvoie le caractère correspondant à un chiffre. Comme ça dans ta boucle i, i est numérique mais converti en caractère par la suite.
J'ai modifié ton code mais sans le tester. Je n'ai pas touché à certaines parties, n'ayant pas cherché à comprendre l'utilité de toutes les instructions.
Sub Calcul_régression2()
'Calcul_régression Macro
'Suprime les données et les bordures des précédentes regressions
'Sélectionne l'ensemble des données non vides d'une colonne
'Calcule l'ensemble des régressions des différents secteurs et enregistre les données dans la feuille "regression taux longs"
'Copie le nom du secteur correspondant à la regession dans la feuille "données" et le colle en face de la cellule "Rapport détaillé" de la feuille Reg_taux_longs
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim dest As Worksheet, source As Worksheet
Dim premlig As Integer, dernlig As Integer
Set dest = ThisWorkbook.Sheets("Reg_taux_longs")
Set source = ThisWorkbook.Sheets("Données")
dernlig = source.Range("C" & Rows.Count).End(xlUp).Row
With dest.Cells
.ClearContents
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
.Borders(xlEdgeLeft).LineStyle = xlNone
.Borders(xlEdgeTop).LineStyle = xlNone
.Borders(xlEdgeBottom).LineStyle = xlNone
.Borders(xlEdgeRight).LineStyle = xlNone
.Borders(xlInsideVertical).LineStyle = xlNone
.Borders(xlInsideHorizontal).LineStyle = xlNone
End With
For i = 3 To 21
premlig = source.Cells(5, i).End(xlUp).Row
If premlig > 180 Then premlig = 5
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$" & Chr(64 + i) & "$" & premlig & ":$" & Chr(64 + i) & "$" & dernlig), _
source.Range("$B$" & premlig & ":$B$" & dernlig), False, False, , dest.Range("$A$1:$G$18"), False, False, False, False, , False
dest.Range("B1").FormulaR1C1 = "=Données!R[3]C[1]"
Next i
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Merci beaucoup pour tes réponses!
J'ai modifié le code de la façons suivantes et j'ai mieux expliquer les différents blocs de code
Option Explicit
Sub Calcul_régression()
'
' Calcul_régression Macro
'Suprime les données et les bordures des précédentes regressions
'Sélectionne l'ensemble des données non vides d'une colonne
'Calcule l'ensemble des régressions des différents secteurs et enregistre les données dans la feuille "regression taux longs"
'Copie le nom du secteur correspondant à la regession dans la feuille "données" et le colle en face de la cellule "Rapport détaillé" de la feuille Reg_taux_longs
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim dest As Worksheet
Dim source As Worksheet
Dim premlig As Long, dernlig As Long, derncol As Long
Dim ad As String
Dim T
Dim a$
'bloc qui efface les précédents résultats
Set dest = ThisWorkbook.Sheets("Reg_taux_longs")
Set source = ThisWorkbook.Sheets("Données")
dernlig = source.Range("C" & Rows.Count).End(xlUp).Row 'la longueur des séries est variables
derncol = source.Cells(1, Cells.Columns.Count).End(xlToLeft).Column 'le nombre de variables explicatives et à expliquer peut varier
dest.Cells.ClearContents
dest.Cells.Borders(xlDiagonalDown).LineStyle = xlNone
dest.Cells.Borders(xlDiagonalUp).LineStyle = xlNone
dest.Cells.Borders(xlEdgeLeft).LineStyle = xlNone
dest.Cells.Borders(xlEdgeTop).LineStyle = xlNone
dest.Cells.Borders(xlEdgeBottom).LineStyle = xlNone
dest.Cells.Borders(xlEdgeRight).LineStyle = xlNone
dest.Cells.Borders(xlInsideVertical).LineStyle = xlNone
dest.Cells.Borders(xlInsideHorizontal).LineStyle = xlNone
' boucles qui effectue autant de régressions qu'il y a de variables à expliquer
For i = 3 To derncol
premlig = source.Cells(5, i).End(xlUp).Row 'Donne le numéro de la première ligne non vide de la colonne i
a$ = premlig.SpecialCells(xlCellTypeLastCell).Address 'adresse de la première ligne
T = Split(a$, "$", -1)
ad = T(1) 'lettre de colonne de la première ligne
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$" & ad & "$premlig:$" & ad & "$" & dernlig), _
source.Range("$B$" & premlig & ":$B$" & dernlig), False, False, , dest.Range("$A$1:$I$18"), False, False, False, False, , False
dest.Range("B1").FormulaR1C1 = "=Données!R[3]C[1]"
Next
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Je ne suis pas sûre de ma ligne de code qui renvoie le numéro de la première ligne non vide d'une colonne i...
J'ai modifié ton code mais sans le tester. Je n'ai pas touché à certaines parties, n'ayant pas cherché à comprendre l'utilité de toutes les instructions.
Sub Calcul_régression2() 'Calcul_régression Macro 'Suprime les données et les bordures des précédentes regressions 'Sélectionne l'ensemble des données non vides d'une colonne 'Calcule l'ensemble des régressions des différents secteurs et enregistre les données dans la feuille "regression taux longs" 'Copie le nom du secteur correspondant à la regession dans la feuille "données" et le colle en face de la cellule "Rapport détaillé" de la feuille Reg_taux_longs Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Dim dest As Worksheet, source As Worksheet Dim premlig As Integer, dernlig As Integer Set dest = ThisWorkbook.Sheets("Reg_taux_longs") Set source = ThisWorkbook.Sheets("Données") dernlig = source.Range("C" & Rows.Count).End(xlUp).Row With dest.Cells .ClearContents .Borders(xlDiagonalDown).LineStyle = xlNone .Borders(xlDiagonalUp).LineStyle = xlNone .Borders(xlEdgeLeft).LineStyle = xlNone .Borders(xlEdgeTop).LineStyle = xlNone .Borders(xlEdgeBottom).LineStyle = xlNone .Borders(xlEdgeRight).LineStyle = xlNone .Borders(xlInsideVertical).LineStyle = xlNone .Borders(xlInsideHorizontal).LineStyle = xlNone End With For i = 3 To 21 premlig = source.Cells(5, i).End(xlUp).Row If premlig > 180 Then premlig = 5 Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$" & Chr(64 + i) & "$" & premlig & ":$" & Chr(64 + i) & "$" & dernlig), _ source.Range("$B$" & premlig & ":$B$" & dernlig), False, False, , dest.Range("$A$1:$G$18"), False, False, False, False, , False dest.Range("B1").FormulaR1C1 = "=Données!R[3]C[1]" Next i Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End Sub
As-tu testé mon code tel que je l'ai envoyé ? Je regarde à ça tout à l'heure, mais tu as rajouté des instructions incorrectes, notamment en lien avec mon premier commentaire sur l'utilisation des chaines de caractères et des variables combinées.
Sub Calcul_régression2()
Application.ScreenUpdating = False 'Désactive l'affichage le temps d'exécuter la macro
Application.Calculation = xlCalculationManual 'Désactive le recalcul automatique des formules Excel à chaque modification
Dim dest As Worksheet, source As Worksheet
Dim premlig As Integer, dernlig As Integer
On Error GoTo Fin
Set dest = ThisWorkbook.Sheets("Reg_taux_longs")
Set source = ThisWorkbook.Sheets("Données")
dernlig = source.Range("C5").End(xlDown).Row '*
'* Il faut choisir entre 2 méthodes :
' --> source.Range("C5").End(xlDown).Row , "xlDown" ici car on se place au début du tableau et on descend chercher la dernière ligne
' --> source.UsedRange.Rows.Count
With dest.Cells 'A privilégier lorsque tu appliques une série d'instruction à un même objet
.ClearContents
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
.Borders(xlEdgeLeft).LineStyle = xlNone
.Borders(xlEdgeTop).LineStyle = xlNone
.Borders(xlEdgeBottom).LineStyle = xlNone
.Borders(xlEdgeRight).LineStyle = xlNone
.Borders(xlInsideVertical).LineStyle = xlNone
.Borders(xlInsideHorizontal).LineStyle = xlNone
End With
For i = 3 To 21 'Boucle sur le n° de colonne (attention, la colonne 21, ou "U" n'est pas la dernière, donc pas de "derncol")
premlig = source.Cells(5, i).End(xlDown).Row
If premlig > 180 Then premlig = 5 'Cas où pas de cellule vide entre en-tête et 1ère donnée
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$" & Chr(64 + i) & "$" & premlig & ":$" & Chr(64 + i) & "$" & dernlig), _
source.Range("$B$" & premlig & ":$B$" & dernlig), False, False, , dest.Range("$A$1:$G$18"), False, False, False, False, , False
dest.Range("B1").FormulaR1C1 = "=Données!R[3]C[1]"
Next i
Fin:
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Bonjour Pedro22,
Merci une fois de plus pour ta réponse et pour les annotations sur ton code qui me permettent de mieux le comprendre. Il y a 2 éléments que je ne comprends pas très bien:
- En ce qui concerne le nombre de colonnes, vu qu'il peut varier n'est-il pas préférable de creer une variable derncol et de faire évoluer la boucle faire For entre i=3 et i=derncol?
- Je ne comprends pas d'où viennent le 180 de la commande if et le 64 de la commande Range
Merci encore pour tes éclairages!
Sub Calcul_régression2() Application.ScreenUpdating = False 'Désactive l'affichage le temps d'exécuter la macro Application.Calculation = xlCalculationManual 'Désactive le recalcul automatique des formules Excel à chaque modification Dim dest As Worksheet, source As Worksheet Dim premlig As Integer, dernlig As Integer On Error GoTo Fin Set dest = ThisWorkbook.Sheets("Reg_taux_longs") Set source = ThisWorkbook.Sheets("Données") dernlig = source.Range("C5").End(xlDown).Row '* '* Il faut choisir entre 2 méthodes : ' --> source.Range("C5").End(xlDown).Row , "xlDown" ici car on se place au début du tableau et on descend chercher la dernière ligne ' --> source.UsedRange.Rows.Count With dest.Cells 'A privilégier lorsque tu appliques une série d'instruction à un même objet .ClearContents .Borders(xlDiagonalDown).LineStyle = xlNone .Borders(xlDiagonalUp).LineStyle = xlNone .Borders(xlEdgeLeft).LineStyle = xlNone .Borders(xlEdgeTop).LineStyle = xlNone .Borders(xlEdgeBottom).LineStyle = xlNone .Borders(xlEdgeRight).LineStyle = xlNone .Borders(xlInsideVertical).LineStyle = xlNone .Borders(xlInsideHorizontal).LineStyle = xlNone End With For i = 3 To 21 'Boucle sur le n° de colonne (attention, la colonne 21, ou "U" n'est pas la dernière, donc pas de "derncol") premlig = source.Cells(5, i).End(xlDown).Row If premlig > 180 Then premlig = 5 'Cas où pas de cellule vide entre en-tête et 1ère donnée Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$" & Chr(64 + i) & "$" & premlig & ":$" & Chr(64 + i) & "$" & dernlig), _ source.Range("$B$" & premlig & ":$B$" & dernlig), False, False, , dest.Range("$A$1:$G$18"), False, False, False, False, , False dest.Range("B1").FormulaR1C1 = "=Données!R[3]C[1]" Next i Fin: Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End Sub
Bonjour,
Je n'avais pas compris que ton nombre de colonnes pouvais varier. Néanmoins, ta dernière variable Y (colonne "U") n'est pas la colonne la plus à droite dans ta feuille, donc difficile d'automatiser sa détection. A moins que cette colonne ait toujours un nom bien défini ou que tu t'arranges pour que ce soit la dernière.
Le cas échéant, une simple commande interrogeant l'utilisateur devrait suffir :
derncol = Application.InputBox("N° de la dernière colonne ?", Type:=1)
Pour les 2 nombres que tu ne comprends pas :
- 180 est définit arbitrairement pour éviter le cas de figure où ta première valeur Y1 est située juste sous l'en-tête de colonne, sans cellule vide. Pour mieux comprendre le soucis, exécute cette petite macro de test.
Sub TestPremlig()
Dim Source As Worksheet, i As Byte
Set source = ThisWorkbook.Sheets("Données")
For i = 3 To 21
premlig = source.Cells(5, i).End(xlDown).Row
MsgBox("La première ligne de la plage de données est " & premlig)
Next i
End Sub
Tu peux aussi remplacer le "> 180" par "= dernlig" pour éviter ce cas de figure.
- 64 correspond à l'index de la fonction "chr(index)" qui renvoi un caractère.
'quand i = 3
Chr(64 + i) = "C"
PS : attention avec cette formule, dans le cas où tu as plus de 26 colonnes. Il faudra rajouter des lignes de codes pour écrire les colonnes de type "AA", "AB"...
C'est beaucoup clair! Merci beaucoup...
Une autre question, penses-tu que si j'utilise la commande suivante
premlig = Columns(i).Find("*", , , , xlByRows, xlNext)
.Row j'aurais toujours besoin de la commande if?
Je ne maîtrise pas cette commande, mais vue comment elle est écrite, elle risque de te donner le n° de ligne de ton en-tête ! La ligne de commande "If" te pose un réel problème ?