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 03/10/2011, 16h03   #1
Membre émérite
 
Avatar de panda31
 
Homme Michaël
Conseil - Consultant en systèmes d'information
Inscription : juin 2003
Messages : 673
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : juin 2003
Messages : 673
Points : 850
Points : 850
Par défaut Range d'une ligne complète avec indice de ligne dynamique

Bonjour,

J'ai beau essayer et chercher sur différents forums, je ne trouve pas solution à mon problème.

Je veux accéder directement aux lignes qui m'intéressent dans une feuille excel et ensuite, itérer sur les cellules jusqu'à la dernière colonne utile.

Donc, j'ai la ligne en integer et je veux me faire un range de la ligne complète restreinte aux colonnes utiles (ne pas aller jusqu'à la colonne IV serait bien)

Je ne sais pas quel algo implémenter.

Fatigue Fatigue !!! (oui je sais, nous ne sommes que lundi...)
Pourriez-vous m'aider svp ?

J'ai pensé à faire un range de la ligne entière et ensuite de tester dans le for si la cellule de la première ligne à la colonne courante est vide ou non.

Code :
1
2
3
 
    For Each Cell In range(ligneCherchee & ":" & ligneCherchee)
        If Cells(1, Cell.Column) <> "" Then
Premier problème, je ne sais pas comment construire mon "For each cell in range(??????)".

Merci d'avance pour votre coup de pouce.
__________________
Michaël Mary
Consultant PLM dans une société de conseil toulousaine
Auditeur CNAM-IPST depuis septembre 2008
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
John F. Woods
mon cv et mon domaine et mon blog
Aucune question technique par MP, svp
panda31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 16h22   #2
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Bonjour,

ça dépend de la structure de ton tableau .

genre base de données ou....

A partir de là on trouve la dernière colonne non vide de ton tableau et ton range va de 1 à cette colonne (pour peu que ça commence en 1).


Sinon :

dernière cellule de la ligne 5 dans fenêtre exécution :
Code :
? Rows(5).Find("*", , , , xlByColumns, xlPrevious).Column
cordialement,

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 16h29   #3
Membre émérite
 
Avatar de panda31
 
Homme Michaël
Conseil - Consultant en systèmes d'information
Inscription : juin 2003
Messages : 673
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : juin 2003
Messages : 673
Points : 850
Points : 850
Je parcours un XLS standard (une feuille avec un header qui m'indique à la dernière colonne), mais mon problème est surtout sur la première ligne - le for each - car je veux passer la ligne à la commande Range par une variable et j'ai une erreur non explicite 'erreur d'exécution 1004'.
__________________
Michaël Mary
Consultant PLM dans une société de conseil toulousaine
Auditeur CNAM-IPST depuis septembre 2008
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
John F. Woods
mon cv et mon domaine et mon blog
Aucune question technique par MP, svp
panda31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 16h38   #4
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Bonjour,

?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Toto3()
Dim cell As Range
Dim lngDerCase As Long
Dim lngLigneCible As Long
 
lngLigneCible = 5
 
lngDerCase = Rows(lngLigneCible).Find("*", , , , xlByColumns, xlPrevious).Column
For Each cell In Range(Cells(lngLigneCible, 1), Cells(lngLigneCible, lngDerCase))
    Mon code
Next cell
 
End Sub
cordialement,

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 16h42   #5
Membre émérite
 
Avatar de panda31
 
Homme Michaël
Conseil - Consultant en systèmes d'information
Inscription : juin 2003
Messages : 673
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : juin 2003
Messages : 673
Points : 850
Points : 850
Comme le montre mon code, ce que je cherche à faire c'est de récupérer la ligne entière (oublions la dernière colonne) et d'itérer dessus. Mais la ligne à trouver est paramétrée par la variable ligneCherchee.

Le range que je fais plante. Une idée de comment construire mon range avec une variable ? J'ai essayé plusieurs choses mais rien n'y fait :
Code :
1
2
3
 
var = ligneCherchee & ":" & ligneCherchee
range(var)
==> FAIL
Code :
1
2
 
range(ligneCherchee & ":" & ligneCherchee)
==> FAIL
__________________
Michaël Mary
Consultant PLM dans une société de conseil toulousaine
Auditeur CNAM-IPST depuis septembre 2008
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
John F. Woods
mon cv et mon domaine et mon blog
Aucune question technique par MP, svp
panda31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 16h46   #6
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Vois la syntaxe du # 4, c'est une question de syntaxe d'écriture en effet..

cordialement,

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 16h51   #7
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Si besoin, passer par une variable objet :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub Toto2()
Dim cell As Range
Dim lngDerCase As Long
Dim lngLigneCible As Long
Dim objMaPlage As Range
 
lngLigneCible = 5
lngDerCase = Rows(lngLigneCible).Find("*", , , , xlByColumns, xlPrevious).Column
Set objMaPlage = Range(Cells(lngLigneCible, 1), Cells(lngLigneCible, lngDerCase))
For Each cell In objMaPlage
   Mon code
Next cell
Set objMaPlage = Nothing
End Sub
cordialement,

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 16h56   #8
Membre émérite
 
Avatar de panda31
 
Homme Michaël
Conseil - Consultant en systèmes d'information
Inscription : juin 2003
Messages : 673
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : juin 2003
Messages : 673
Points : 850
Points : 850
OK merci.

Peux-tu juste me décrypter le code ? J'ai le VBA en horreur là je ne comprends pas tout !

Pour récupérer ma ligne :

Code :
1
2
3
4
5
Sub Toto() 
Dim cell As Range 
Dim lngDerCase As Long 
Dim lngLigneCible As Long
Ligne cible que j'appelle ligneCherche ?
lngDerCase n'est pas utilisé il me semble ?
Code :
1
2
lngDerCase = Rows(5).Find("*", , , , xlByColumns, xlPrevious).Column

Je ne comprends pas l'utilisation du Rows(5).
Code :
1
2
3
4
5

For Each cell In Range(Cells(lngLigneCible, 1), Cells(lngLigneCible, Rows(5).Find("*", , , , xlByColumns, xlPrevious).Column))
     Mon code 
Next cell
End Sub
__________________
Michaël Mary
Consultant PLM dans une société de conseil toulousaine
Auditeur CNAM-IPST depuis septembre 2008
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
John F. Woods
mon cv et mon domaine et mon blog
Aucune question technique par MP, svp
panda31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 17h18   #9
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Citation:
Envoyé par panda31
Peux-tu juste me décrypter le code ? J'ai le VBA en horreur
Ben là ça commence mal... pour moi les deux sont antinomiques

lngLigneCible = le Numéro de la ligne que tu veux parcourir

Citation:
lngDerCase n'est pas utilisé il me semble ?
tu as raison, j'ai mis sa recherche en variable, mais je n'ai pas modifié ensuite (c'est chose faite), donc ça marchait mais la variable était inutile

Citation:
Je ne comprends pas l'utilisation du Rows(5).
Je préfixais la ligne voulue à 5 au départ, mais sur le dernier code je l'ai mise dans la variable lngLigneCible justement pour que tu aies la syntaxe avec tout en variable

cordialement,

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 17h26   #10
Membre émérite
 
Avatar de panda31
 
Homme Michaël
Conseil - Consultant en systèmes d'information
Inscription : juin 2003
Messages : 673
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : juin 2003
Messages : 673
Points : 850
Points : 850
Merci bcp pour le décryptage et l'aide !

Je teste de suite et mets en résolu ASAP.
__________________
Michaël Mary
Consultant PLM dans une société de conseil toulousaine
Auditeur CNAM-IPST depuis septembre 2008
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
John F. Woods
mon cv et mon domaine et mon blog
Aucune question technique par MP, svp
panda31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 17h47   #11
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Dernier truc, si la ligne est vide => plantage sur la recherche de dernière cellule.

mettre un filtre du genre :

Code :
MsgBox WorksheetFunction.CountA(MaLIgne)
PS : attention prend en compte les cellules qui contiennent juste des formules et peuvent afficher "".
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 09h23   #12
Membre émérite
 
Avatar de panda31
 
Homme Michaël
Conseil - Consultant en systèmes d'information
Inscription : juin 2003
Messages : 673
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : juin 2003
Messages : 673
Points : 850
Points : 850
Voilà c'est fait !

Merci encore
__________________
Michaël Mary
Consultant PLM dans une société de conseil toulousaine
Auditeur CNAM-IPST depuis septembre 2008
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
John F. Woods
mon cv et mon domaine et mon blog
Aucune question technique par MP, svp
panda31 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 19h21.


 
 
 
 
Partenaires

Hébergement Web