Sélection de la ligne

  • Initiateur de la discussion Initiateur de la discussion Fab117
  • Date de début Date de début

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 !

Fab117

XLDnaute Impliqué
Salut,
Je souhaite copier la ligne d'un onglet donner dans un autre.
Dans l'onglet de destination, je lui fait scanner les lignes jusqu'à en trouver une vide et là, je ne sais pas comment lui dire de la selectionner afin qu'il y colle la ligne provenant du premier onglet.
Extrait de mon code :

' copier la première ligne de l'onglet et le coller où il y a de la place sur la feuille ATTENTION
Sheets("ATTENTION").Select
' Recherche d'une ligne vide
For m = 3 To 25
' Test de la cellule selectionnée
Range("B" & m).Select
If (Range("B" & m) = "") And (Range("C" & m) = "") Then
Sheets(Onglet).Select
ActiveWindow.Panes(1).Activate
Rows("1:1").Select
Selection.Copy
Sheets("ATTENTION").Select
' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx il n'accepte pas le code ci-dessous
Rows(m:m).Select
ActiveSheet.Paste
Sheets(Onglet).Select
Exit For
End If
Next m
' Fin de copie de l'entête de l'onglet

Merci d'avance.

Fab
 
Re : Sélection de la ligne

Salut à tous
Code:
Sheets("ATTENTION").Select
    ' Recherche d'une ligne vide
For m = 3 To 25
    ' Test de la cellule selectionnée
If (Range("B" & m) = "") And (Range("C" & m) = "") Then
'Sheets(Onglet).Select
'ActiveWindow.Panes(1).Activate
Sheets(Onglet).Rows(1).Copy destination := Sheets("ATTENTION").Rows(m)
Exit For
End If
Next m
' Fin de copie de l'entête de l'onglet
But de la ligne
'ActiveWindow.Panes(1).Activate
dans ton code ?
 
Re : Sélection de la ligne

Merci pour vos réponses.

Ca marche parfaitement avec :
Rows(m).Select

Concernant la ligne :
'ActiveWindow.Panes(1).Activate
Pour être honète, elle était là parceque j'ai enregistré la macro et que quand j'ai regardé le code généré, elle y était et ne connaissant pas son rôle, je l'ai laissé (mes macros contiennent beaucoup de lignes inutiles).

Par contre, j'ai une nouvelle difficulté :
Dans l'onglet "Attention", une fois qu'il a rapporté tout ce qu'il devait (notamment dans la colonne E les dates butoires), il va scanner les dates butoires et avertir (en mettant la ligne en rouge) pour celles qui sont proches de l'échéance.
Donc jusqu'à maintenant, il prenait toutes les valeurs de la colone E (dès la 3ème ligne) et comparait la date à celle du jour.
Avec ce que je viens de rajouter, certaines lignes n'ont plus un format date, mais texte => la macro plante.
Est-il possible dans le déroulement suivant de lui dire que si le contenu de la cellule n'est pas une date de continuer directement sa boucle sans faire l'opération ?

Sheets("ATTENTION").Select

' Colore en Rouge les délais négatifs

For k = 3 To 25
' Test de la cellule selectionnée
Range("E" & k).Select
DateLimite = Range("E" & k).Value
DelaiLimite = (DateLimite - Date)
If (DelaiLimite < 3) And (DelaiLimite > -1500) Then
Range("E" & k).Select
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
With Selection.Font
.Shadow = True
.ColorIndex = 27
End With
Else
Blanc = 0
End If
Next k

Merci

Fab
 
Re : Sélection de la ligne

Salut à tous
Concernant la ligne :
'ActiveWindow.Panes(1).Activate
C'est pour "figer les volets". me doutais un peu de la réponse 😉.
Quand j'ai du code bizarre comme ça, je le mets en commentaire et je réessaies la macro


Sheets("ATTENTION").Select

' Colore en Rouge les délais négatifs

For k = 3 To 25
' Test de la cellule selectionnée

if isdate(Range("E" & k)) then

DateLimite = Range("E" & k)
DelaiLimite = (DateLimite - Date)
If (-1500 < DelaiLimite) And (DelaiLimite < 3) Then
With Range("E" & k).Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
With Range("E" & k).Font
.Shadow = True
.ColorIndex = 27
End With
Else
Blanc = 0
End If
end if
Next k

Blanc=0 ?

Comme je connais pas ton fichier, je peux pas dire grand chose, mais ta macro, une fois qu'elle a colorié, elle ne remet pas les couleurs à zéro

A+
 
Re : Sélection de la ligne

Salut Gorfael,
Merci pour ta réponse.

Toutefois, avec
If IsDate(Range("E" & k)) Then
pour lui, il n'y a plus de date, il passe directement au Else

Je précise que dans ma cellule, le format est : jj.mmm.aa
Est-ce pour ça ?

Fab
 
Re : Sélection de la ligne

Fab117 à dit:
Salut Gorfael,
Merci pour ta réponse.

Toutefois, avec
If IsDate(Range("E" & k)) Then
pour lui, il n'y a plus de date, il passe directement au Else

Je précise que dans ma cellule, le format est : jj.mmm.aa
Est-ce pour ça ?

Fab
Salut
c'est pour ça qu'on demande un bout de fichier : Si ta macro se plante, c'est parce que tu lui demande de convertir un texte quelconque en valeur date et que ton texte ne peut pas être interprêté comme une date, d'où le test en amont.
Les fonction IsDate et Cdate ont les même critères :
Si la première dit VRAI, l'autre convertit
Si la première dit FAUX, l'autre retourne une valeur d'erreur
donc, tu mets en point d'arrêt en début de ta macro, et tu avance en mode Pas-à-pas avec F8
soit tu regardes avec la fenêtre variables locales et les bulles les valeurs, soit tu mets des espions avec la fenêtre adéquate

et en même temps, profites-en pour vérifier que la feuille active est bien la feuille "ATTENTION" et pas la feuille "Onglet"

A+
 
Dernière édition:
Re : Sélection de la ligne

Fab117 à dit:
Salut Gorfael,
Je n'ai pas tout saisi ce que tu m'as expliqué.
Si tu as un moment, je joins mon fichier en document attaché.
Merci.

Fab
Salut
Je me gausse ouaff, ouaff, ouaff
Voilà ce qui arrive quand on utilise des variables à lettre unique en minuscule, un code issu de code automatique et qu'on ne sait pas se servir des outils de debuggage (pourquoi ça me rappelle quelque chose ? Moi, j'ai jamais fait ça, mon code était toujours (presque) parfait).

À force de travailler sur le code, on en oublie ce qu'on cherche à faire. Et comme on ne se sent pas à l'aise sur le code, on pense qu'on a fait une erreur dans la syntaxe du code et pas dans ce que doit faire le code. Ce genre de truc ne m'est jamais arrivé (tu parles 🙂 )..

Comme personne n'est parfait (à part moi), Excel prévoit certaine facilité pour gérer les problèmes de code
Le mode Pas-à-pas (pas toujours accessible suivant les instructions).

Quand tu es en mode Pas-àpas, une action sur la touche F8 fait
Exécuter la ligne en surlignage (jaune par défaut)
enlever le surlignage
pointer la ligne suivant à exécuter, la surligner
Attendre une autre action

Mais quand tu as un bout de code qui fonctionne, tester 1000 lignes par exemple, ça devient vite fastidieux. Tu veux bien le faire une fois, mais t'as pas envie de bouziller ta touche F8 et ton index pour une séquence de code qui fonctionne bien
Donc Excel à prévu des "Points d'arrêt": Quand une instruction est exécutable, si tu cliques sur la barre verticale à gauche de la ligne (Ou menu Derbogage - j'évite F9 pour pas me tromper), un gros point marron apparaît et la ligne passe en surligné marron
Une action sur F5 exécute la macro jusqu'à la sortie ou jusqu'au premier point d'arrêt rencontré : ça permet de "sauter" les parties déjà validées du code.

dans ton code, dans la séquence de coloriage, si t'en mets un sur la ligne
If IsDate(Range("E" & k)) Then
et que tu lances la macro avec F5 le pointeur d'exécution s'arrête dessus
avant de l'exécuter
si tu ballade ton curseur avec la souris sur cette instruction, une bulle va apparaître avec variable = valeur
sur k => k = 4 (par exemple)
sur range => Range("E" & k) = "Produit 25"

Si tu affiches la fenêtre "variables locales", tu peux même suivre l'état à chaque ligne de toutes tes variables

Tu sélectionnes dans cette ligne Range("E" & k) => clic-droit>>ajouter un espion
Tu vérifies que l'instruction est correcte (qu'il ne manque pas une parenthèse par exemple) => ok, une nouvelle fenêtre s'ouvre dans laquelle, il y a une ligne qui te donne la valeur de l'espion

et donc avec Points d'arrêt, F5, F8, tu peux suivre l'évolution des variables du code, avec quelques restrictions :
C'est l'état des variable avant la ligne en surbrillance
L'espion doit être définit cmplêtement si tu ne veux pas qu'il retourne sa veste
(comme on à pas définit la feuille, c'est le range d'Activesheet qui est prise en compte)

Avec tout ça, en 2 minutes tu te rends compte que ton erreur de code n'en est pas une : la date est en colonne H pas E 😛

Je vais quand même regarder ton code et le commenter, puis faire la même macro, mais comme moi je la conçois : si tu regardes les sujets sur le forum, tu verras que pour un même résultat, il y a autant de manière d'y arriver qu'il y a de forumeurs (ou presque, parce que quand on trouve un code meilleur et qui nous convient, on l'adopte).

Le but n'est pas de faire le "meilleur code", mais celui qui te semble le plus adapté, et que tu comprends

A+
 
Re : Sélection de la ligne

Fab117 à dit:
Merci pour ta réponse.
Effectivement, à force de rechercher l'erreur dans le code, on oublie le contenu de la feuille Excel.
Bonne fin de journée.

Fab
Salut
Comme je l'avais promis, ton fichier un p'tit peu remanié
Quand tu auras lu mes remarques sur ce que je n'aime pas dans ton code, tu peux le supprimer. Les macros active sont dans les modules des feuilles

Si t'as des questions, n'hésite pas.

Un code étant avant tout personnel, il est important de comprendre ce qu'on fait. il ne sert à rien d'utiliser un code incompréhensible, même s'il est meilleur, parce que pour le modifier ça sera une galère pas possible. Un code "moins bon" mais complêtement maîtrisé sera maintenable facilement.

n'hésite pas à regarder les fichiers trasmis dès que tu trouves un sujet interessant. Et pas seulement le dernier transmis, comme je dis souvent, même un nul (je sais pas s'il en existe sur ce forum) peut t'apprendre une astuce, ou simplement ce qu'il ne faut pas faire 🙂

A+
 

Pièces jointes

- 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

Discussions similaires

Réponses
43
Affichages
810
Réponses
10
Affichages
791
Retour