edouard_berth
Messages postés17Date d'inscriptionlundi 4 juillet 2005StatutMembreDernière intervention 8 août 2005
-
7 juil. 2005 à 19:08
edouard_berth
Messages postés17Date d'inscriptionlundi 4 juillet 2005StatutMembreDernière intervention 8 août 2005
-
8 juil. 2005 à 14:33
Bonjour,
Je débute en vba, et je voulais savoir comment créer une plage intitulée "x" regroupant toutes les cellules de col.A dont la valeur est "auteur".
Une fois cette plage nommée, j'aimerais pouvoir sélectionner toutes les cellules comprises entre la première et la seconde cellule de cette plage.
J'y ai passé la journée et commence à désespérer...
Merci
cs_wape
Messages postés262Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention19 décembre 201011 7 juil. 2005 à 23:58
Bonsoir,
Essaye qqch du genre :
Dim MaTable() As String
Dim MaPlage As Range
Dim Cellule As Range
'Parcourir les cellules de la colonne A
For Each Cellule In ActiveSheet.Range("A1:A" & ActiveSheet.Range("A65536").End(xlUp).Row)
If Cellule.Value = "auteur" Then
If MaPlage Is Nothing Then
Set MaPlage = Cellule
Else
Set MaPlage = Union(MaPlage, Cellule)
End If
End If
Next
'Créer la plage nommée
ActiveSheet.Names.Add "X", MaPlage
'Récupérer les adresses des cellules de la plage
MaTable = Split(MaPlage.Address, ",")
'Sélectionner la plage comprise entre la 1ère et la 2ème cellule
ActiveSheet.Range(MaTable(0) & ":" & MaTable(1)).Select
edouard_berth
Messages postés17Date d'inscriptionlundi 4 juillet 2005StatutMembreDernière intervention 8 août 2005 8 juil. 2005 à 10:07
Merci pour cette réponse, mais je ne parviens pas à faire fonctionner le code dont l'exécution s'arrète au moment de nommer la plage...
Je cherche une explication mais si tu as une idée, n'hésite pas...
Merci encore
cs_wape
Messages postés262Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention19 décembre 201011 8 juil. 2005 à 10:33
Bonjour,
S'agit-il du message ?
Erreur d'exécution 1004:
Erreur définie par l'application ou par l'objet
Si oui, cela signifie qu'aucune cellule de la colonne A ne contient le mot "auteur". Dans ce cas, essaye de modifier le code comme suit :
'Créer la plage nommée
If MaPlage Is Nothing Then
MsgBox "Aucune cellule ne contient le mot 'auteur' !", vbCritical
Exit Sub
Else
ActiveSheet.Names.Add "X", MaPlage
End If
wape
Vous n’avez pas trouvé la réponse que vous recherchez ?
edouard_berth
Messages postés17Date d'inscriptionlundi 4 juillet 2005StatutMembreDernière intervention 8 août 2005 8 juil. 2005 à 11:13
Merci, infiniment. C'était effectivement le problème. En fait auteur était écrit avec une majuscule dans la colonne A.
Au risque d'abuser de ta patience et de tes compétences, je me demandais comment je pourrais non pas sélectionner les cellules du premier auteur au second, mais de la cellule de la colonne B à côté du premier auteur, jusqu'à la cellule de la colonne B juste au dessus du second auteur (bon ça je reconnais que je devrais être en mesure de m'en sortir). Par contre, je voudrais pouvoir créer ue boucle qui, une fois ma première sélection traitée me permettrait de passer à la sélection suivante (entre le second et le troisième auteur etc...),
et là, ça me semble plus compliqué...
Merci encore
cs_wape
Messages postés262Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention19 décembre 201011 8 juil. 2005 à 13:37
Re,
Pour la boucle de sélection des plages, essaye ceci :
'Sélectionner les plages l'une à la suite de l'autre
For i = 0 To UBound(MaTable)
If i = UBound(MaTable) Then
ActiveSheet.Range(Range(MaTable(i)).Offset(0, 1).Address & ":" & Range("A65536").End(xlUp).Offset(0, 1).Address).Select
Else
ActiveSheet.Range(Range(MaTable(i)).Offset(0, 1).Address & ":" & Range(MaTable(i + 1)).Offset(-1, 1).Address).Select
End If
MsgBox "La plage no " & i + 1 & " a été sélectionnée."
Next i