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 !
Comment remplir des lignes bordées en haut et en bas ?
C'est à dire que je vais copier des lignes mais qui vont s'insérer dans un tableau.
End(XlUp) et End(XlDown) me font buter.. Je ne trouve pas l'astuce.
Je vais chercher des données dans une feuille, et les coller dans une autre. Ici de la feuille 1 à la 2.
Le tableau de la feuille 1 comporte 1000 lignes.
A priori, je sais faire pour la copie :
VB:
Sub Commandes()
Dim cel As Range
For Each cel In Range("E11:E2000")
If cel <> "" And IsNumeric(cel) Then
Feuil31.[c100].End(xlUp).Rows(2) = cel.Offset(, -4)
End If
Next
End Sub
Enfin presque car je n'arrive pas à commencer à la ligne 14 mais à la 13, et surtout, mon tableau est normalement rempli à partir de C70. Donc là ça s'inscrit forcément dessous. Et avec XlDown je n'y arrive pas.
Sub Commandes()
Dim cel As Range, Lg As Integer
Lg = Application.Max(14, Feuil2.Range("C" & Rows.Count).End(xlUp).Row + 1)
For Each cel In Range("E10:E" & Rows.Count).SpecialCells(xlCellTypeConstants, 1)
Feuil2.Range("C" & Lg) = cel.Offset(, -4)
Lg = Lg + 1
Next
End Sub
La variable Lg prend la valeur maxi entre End(xlUp).Row + 1 et 14, ce qui permet de démarrer en ligne 14 si le tableau est vide.
La boucle scrute uniquement les cellules contenant une valeur numérique (xlCellTypeConstants, 1).
Merci Papounet, ainsi que pour les commentaires qui me sont très utiles.
Reste deux petits problèmes.
Le plus important, c'est que l'écriture ne s'arrête pas après la ligne 70. Or c'est impératif car j'ai des données dessous. J'aimerais bien mettre un msgbox disant que je suis arrivé à la fin de la zone et qu'il faut une nouvelle feuille par exemple.
Le second, c'est de pouvoir réécrire par dessus, ou en tout cas être invité à le faire. Cad que le lancement de la macro doit recommencer à la ligne 14 à chaque fois.
Au lancement de la macro, un message te demande si tu veux écraser le tableau. Si tu réponds Oui, Lg sera initialisé à 14.
Si tu es arrivé en fin de tableau sur Feuil2, un message t'avertit. Mais que faire dans ce cas, faut-il créer une nouvelle feuille sur le modèle de la précédente et continuer à écrire la suite dedans?
Sub Commandes()
Dim cel As Range, Lg As Integer
Lg = 14
For Each cel In Range("E10:E" & Rows.Count).SpecialCells(xlCellTypeConstants, 1)
Feuil2.Range("C" & Lg) = cel.Offset(, -4)
Lg = Lg + 1
If Lg = 70 Then
MsgBox ("Attention, fin de zone")
Exit Sub
End If
Next
End Sub
Pourras tu me dire si cela est correct ?
En tout cas ça fonctionne.
Merci
EDIT : Je vois que tu m'as répondu entre temps. Content de voir qu'il fallait bien démarrer à 14. Je commence à piger Vba ! 🙂
Je vais de ce pas examiner ton code.
Merci et bonne nuit.
- 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