Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/11/2011, 19h43   #1
Invité régulier
 
Inscription : avril 2011
Messages : 19
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 19
Points : 7
Points : 7
Par défaut Dernière cellule non vide d'une ligne

Hello,

J'ai une boucle qui tourne sur une plage de donnée, un tableau de 4 lignes et 5 colonnes (bon en fait c'est bcp plus, mais c'est transposable)

1 2 3 4 5
1 2
1 2 3
1 2 3 4

Je cherche à positionner mon curseur sur la dernière cellule non vide de chaque ligne, j'utilise donc :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
Sub test()
Dim ligne As Byte
Dim col As Byte
 
For ligne = 1 To 4
For col = 1 To 5
 
Cells(ligne, col).End(xlToRight).Columns.Select
 
Next col
Next ligne
End Sub
Donc à chaque tour il selectionen bien respectivement 5, 2, 3 puis 4 (dc la dernière cellule pleine de chaque ligne), mais avt de passer à la ligne suivante le curseur va tout au bout à droite du tableur, colonne "XFD".
Pourtant je spécifie bien mes colonnes de 1 à 5 (for col 1 to 5).

Mauvaise utilisation du xlToRight ?
rapheb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 20h02   #2
Membre émérite
 
Conseil + Formation
Inscription : février 2010
Messages : 594
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Conseil + Formation

Informations forums :
Inscription : février 2010
Messages : 594
Points : 898
Points : 898
Bonjour

Partir de XFD (ou moins loin ) et aller vers la gauche est plus sûr
78chris est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/11/2011, 20h05   #3
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut
La structure de ta boucle est étrange
Avec les 2 boucles For tu pointes ton tableau (5x4), cellule par cellule (donc les 20 cellules)
Ensuite attention End(...) ne permet pas de forcement trouver la dernière cellule non vide, End(...) repère un changement fais des essais avec avec la touche Ctrl de ton clavier et les touches fléchées

Plutôt qu'un long discours alambiqué voila un schéma

++
Qwaz
Images attachées
Type de fichier : jpg 2011-11-28_200314.jpg (75,3 Ko, 8 affichages)
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/11/2011, 20h18   #4
Invité régulier
 
Inscription : avril 2011
Messages : 19
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 19
Points : 7
Points : 7
merci à vous 2 !
J'ai effectué 2 corrections :
- d'abord, ma variable pour les colonnes ne sert strictement à rien, dc suppr.
- et deusio, j'ai remplacé le End(xlToRight).Columns.Select par simplement: End(xlToRight).Select

Code :
1
2
3
4
5
Dim ligne As Long
For ligne = 1 To 4
Cells(ligne, 2).End(xlToRight).Select
Next ligne
End Sub
simpler is better
rapheb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 20h26   #5
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut
Attention si on reprend ton exemple, la ligne 2 va aller à la dernière colonne.
Soit tu parts de la colonne A en etant sûr et certain que la colonne B aura toujours un contenu, soit tu utilises (xltoLeft) comme le dit 78chris, ce qui est le plus couramment utilisé.
La seule raison ici de vouloir utiliser xlToRight serait si un 2ème tableau se trouvait à droite de celui ou tu fais ta recherche, mais là encore, il suffirait de partir de la 1ere colonne de ton 2eme tableau et de revenir vers la gauche pour trouver la dernière colonne utilisée dans ton 1er tableau.

avec XlToLeft

Code :
1
2
3
4
5
Dim ligne As Long
For ligne = 1 To 4
Cells(ligne, columns.count).End(xlToLeft).Select
Next ligne
End Sub
++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 20h28   #6
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 696
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 696
Points : 1 448
Points : 1 448
Bonjour,

Avec ton code, lorsque tu vas passer à la ligne 2, tu vas encore taper dans la butée.
Tu as tout intérêt à coder
Code :
1
2
3
4
5
6
7
Sub test2()
Dim ligne As Byte
Dim col As Byte
    For ligne = 1 To 4
            Cells(ligne, Columns.Count).End(xlToLeft).Select
    Next ligne
End Sub
ou
Code :
1
2
3
4
5
6
7
Sub test1()
Dim ligne As Byte
Dim col As Byte
    For ligne = 1 To 4
            Cells(ligne, 1).End(xlToRight).Select
    Next ligne
End Sub
Cordialement.

EDIT : Désolé Qwazerty. Je n'avais pas vu que tu avais dégainé avant
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 20h34   #7
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut
[Edit]Pas de soucis , mais une petite critique comme tu peux le voir ^^'[/Edit]

Définir des Row et des Colomns avec des Byte est dangereux, y'en a qu'on essayé, ils ont eu des problèmes.
Plus sérieusement, je comprend qu'ici c'est un teste, mais il vaut mieux dire Row -> Long et column->Integer, parfois notre code évolue au gré du temps et paff (surtout pour les lignes 255, c'est vite atteint) .
++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 09h08   #8
Invité régulier
 
Inscription : avril 2011
Messages : 19
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 19
Points : 7
Points : 7
Alors, en effet un second tableau se trouve à droite, donc :
Code :
1
2
3
4
5
6
Sub Tendances()
Dim ligne As Long
For ligne = 12 To 208
Cells(ligne, 17).End(xlToLeft).Select
Next ligne
End Sub
la colonne 17 est la premiere de mon second tableau.

Le probleme c'est que dans mon premier tableau, les cellules vides sont en fait des recherchev qui donnent " " si #n/a.
donc les cellules sont pas vraiment vides mais contiennent des formules...
Comment faire pour considérer ces cellules comme vide dans mon code ?
rapheb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 10h01   #9
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 696
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 696
Points : 1 448
Points : 1 448
Bonjour,

Pour trouver la dernière cellule renseignée, tu peux effectuer la recherche de la première cellule vide.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
Sub Tendances()
Dim ligne As Long
Dim Colonne As Integer
    For ligne = 12 To 208
        For Colonne = 1 To 15
            If Cells(ligne, Colonne).Offset(0, 1) = "" Then
                Cells(ligne, Colonne).Select
                Exit For
            End If
        Next Colonne
    Next ligne
End Sub
Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 06h45   #10
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut
Je pensais que tu faisais juste des essais afin de tester les boucles et les sélections, visiblement ton problème s'inscrit dans une démarche plus global, il serait donc peut-être intéressant de nous dire ce que tu souhaites faire exactement, je doute que le finalité soit de sélectionner l'une après l'autre la dernière cellule de chaque colonne.

++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h15.


 
 
 
 
Partenaires

Hébergement Web