Rechercher : dans
Par :

Récupérer adresse cellule pour sélection

Dernière réponse le 15 nov 2004 à 14:47:24 bibi_fricotin, le 12 nov 2004 à 17:21:24 
 Signaler ce message aux modérateurs

Bonjour,
je voudrais séléctionner une plage de cellules qui contient le même nom, en partant de la cellule A10, la colonne A contenant les noms (ex A10=MARTIN; A11=BIBI;A12=BIBI;A13=DUPONT;etc.), pour les encadrer (donc pouvoir bien identifier chaque nom).
ça bloque après ELSE

Range("A10").Select

While ActiveCell.Value <> ""
Dim nom As String
Dim refnom As Range

If ActiveCell.Value = nom Then
Range(ActiveCell + 1).Select
Else
Range(Cells(refnom.Row, 1), Cells(ActiveCell.Row, 6)).Select

Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone

End If

Wend


Quelqu'un aurait-il une solution ?
Merci.

Meilleures réponses pour « récupérer adresse cellule pour sélection » dans :
[RegExp] Récupérer une adresse IP VoirFinalité Mise en œuvre Explications Interprétation du motif Récupérer une adresse IP Finalité Pour récupérer une IP dans un fichier texte, fichiers journaux, pages web, etc. Mise en œuvre L'expression régulière suivante combinée à la...
[PHP] Comment afficher l'adresse IP d'un visiteur ? VoirPour afficher l'adresse IP d'un visiteur sur votre site, insérez ce code dans la zone où vous voulez qu'elle s'affiche.
Tableur - La sélection des cellules VoirSélection de cellules Le tableur est un formidable outil pour manipuler des données. Ainsi, pour pouvoir manipuler les données il est nécessaire de disposer d'outils permettant de sélectionner rapidement toutes les cellules dont on a...
Sélection de cellules VoirSélection de cellules Un tableur est un formidable outil de manipulation de données. Qu’il s’agisse toutefois de référencer des cellules isolées ou des plages de cellules, que ce soit pour les besoins d’une formule, pour leur attribuer un format de...
Tableur - Les cellules VoirLa notion de cellule On appelle "cellule" l'intersection entre une ligne (horizontale) et une colonne (verticale) de la feuille de calcul. Ainsi le nom de la ligne combiné au nom de la colonne donne les coordonnées d'une cellule (le terme d'adresse...

1

purrofixe, le 12 nov 2004 à 18:05:12

Bonjour bibi_fricotin
Je suppose que c'est Excel VBA ....

Que voulez-vous encadrer exactement ?

Vous dites: ça bloque après ELSE ..mais avec le début de la macro qui manque.....
et en plus dans If ActiveCell.Value = nom Then le "nom" est initialisé ou ...
Merci de préciser.

Salutations
Jean-Pierre

Répondre à purrofixe

2

bibi_fricotin, le 12 nov 2004 à 20:29:05

Pardon oui c'est du VB excel 97
pour le 'nom", on est d'identifier la 1ère cellule pour la comparer à la suivante : si la suivante comporte le même nom, il faut passer à la suivante, etc.
Une fois identifié le groupe de cellules ayant le même nom, il faut l'encadrer d'un trait plein, lui appliqué une mise en forme donc.
ouf! j'espère que c'est assez clair (ce genre de macro était plus simple à faire avec les macros excel4)

Répondre à bibi_fricotin

3

purrofixe, le 12 nov 2004 à 21:01:28

Bonsoir bibi_fricotin,
Merci pour les précisions c'est parfait.
Pour pouvoir vous répondre correctement j'ai besoin de voir
toute la fonction (Sub Macro1()...... à.....End sub),
car j'ai déjà découvert quelque élément bizarre..
Faite donc un copier / coller; Merci.

Salutations
Jean-Pierre

Répondre à purrofixe

4

bibi_fricotin, le 12 nov 2004 à 21:33:29

Voilà la bête, avec une boucle qui ouvrent tous les fichiers d'un répertoire (merci à http://vlohr.free.fr )

Sub Boucle_sur_fichier()
'Application.ScreenUpdating = False
Dim Cherche As Variant
Dim Boucle As Variant
Set Cherche = Application.FileSearch
With Cherche
.LookIn = "C:\data\g8_\fdp\"
.FileName = "*.xls"
If .Execute > 0 Then
For Boucle = 1 To .FoundFiles.Count
Workbooks.OpenText FileName:=.FoundFiles(Boucle), Origin:=xlMSDOS, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
Array(3, 1), Array(4, 2), Array(5, 1), Array(6, 1))

With ActiveSheet.PageSetup
.PrintTitleRows = "$1:$9"
.PrintTitleColumns = ""
End With
ActiveSheet.PageSetup.PrintArea = ""
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = "&P/&N"
.RightFooter = "&F &D"
.LeftMargin = Application.InchesToPoints(0.196850393700787)
.RightMargin = Application.InchesToPoints(0.196850393700787)
.TopMargin = Application.InchesToPoints(0.393700787401575)
.BottomMargin = Application.InchesToPoints(0.590551181102362)
.HeaderMargin = Application.InchesToPoints(0.511811023622047)
.FooterMargin = Application.InchesToPoints(0.31496062992126)
.PrintHeadings = False
.PrintGridlines = True
.PrintComments = xlPrintNoComments
.CenterHorizontally = True
.CenterVertically = False
.Orientation = xlPortrait
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = 100
End With
Columns("A:A").Select
Selection.ColumnWidth = 30
Columns("B:B").Select
Selection.ColumnWidth = 7
Columns("C:C").Select
Selection.ColumnWidth = 5
Columns("D:D").Select
Selection.ColumnWidth = 10
Columns("E:E").Select
Selection.ColumnWidth = 12
Columns("F:F").Select
Selection.ColumnWidth = 55
Cells.Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.ShrinkToFit = False
.MergeCells = False
End With
With Selection.Font
.Name = "Arial"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
With Selection.Font
.Name = "Arial"
.Size = 8
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
Range("A8").Select
Selection.Font.Bold = True
Rows("9:9").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.ShrinkToFit = False
.MergeCells = False
End With
Selection.Font.Bold = True
Rows("10:200").Select
Selection.RowHeight = 30
Range("A9").Select
If a10 <> "" Then
Selection.Sort Key1:=Range("B10"), Order1:=xlDescending, Key2:=Range( _
"A10"), Order2:=xlAscending, Key3:=Range("D10"), Order3:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:= _
xlTopToBottom
Else
End If



Range("A10").Select

While ActiveCell.Value <> ""
Dim nom As String
Dim refnom As Range

If ActiveCell.Value = nom Then
Range(ActiveCell + 1).Select
Else
Range(Cells(refnom.Row, 1), Cells(ActiveCell.Row, 6)).Select

Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone

End If

Wend




Range("B2").Select
Selection.ClearContents
Range("A1").Select

Next Boucle
End If
End With
End Sub

Répondre à bibi_fricotin

5

purrofixe, le 12 nov 2004 à 23:21:37

Bonsoir bibi_fricotin,
Merci. Super votre macro pour ouvrir successivement tous les fichiers d’un répertoire.
Vous voulez donc y insérer une procédure pour encadrer le ou les noms qui se suivent pour chaque fichier.

Les noms commencent toujours dès la cellule « A10 » >> oui-non

Je suis en train de tester la partie qui vous intéresse, soit celle qui correspond à votre premier message.
J’ai juste un problème avec « refnom » car il manque une instruction.
Le résultat pour demain.


Salutations
Jean-Pierre

Répondre à purrofixe

6

purrofixe, le 12 nov 2004 à 23:48:53

Bonsoir bibi_fricotin,
Je suppose que vous avez pensé de d’abord trier les noms (il doivent se suivre alphabétiquement, sinon Xavier une fois au début et aussi à la fin…).
Vous pouvez placer cette macro dans votre module et remplacer la partie correspondante par l’instruction : Application.Run "bibi_fricotin_encadrer"
Si vous la placée directement dans votre procédure vous supprimez les lignes :
Sub bibi_fricotin_encadrer() et End Sub.
Voici ma participation :

Sub bibi_fricotin_encadrer()
'
' Macro enregistrée le 12.11.2004 par Jean-Pierre Purro
'Récupérer la plage des noms et le nombre , début Li 5, dans Col A
    vPlageNom = Range("A5:A" & Range("A5").End(xlDown).Row)
    vNbNom = Range("A5").End(xlDown).Row - (5 - 1)
    vDéNomX = 5
    vFiNomX = 5
    vCount = 1
'Début boucle sur nom
 For Each vNom In vPlageNom
'Nom suivant différent >> encadrer la plage
    If Cells(vDéNomX + vCount, 1).Value <> vNom Then
        Range(Cells(vDéNomX, 1), Cells(vFiNomX, 1)).Select
       With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
       End With
       With Selection.Borders(xlEdgeTop)
       .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
       End With
       With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
       End With
       With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
       End With
'Icrémenter les compteurs début, comptage et fin
        Let vDéNomX = vDéNomX + vCount
        Let vCount = 1
        Let vFiNomX = vDéNomX
    Else
'Incrémenter les compteurs fin et comptage
        Let vCount = vCount + 1
        Let vFiNomX = vFiNomX + 1
    End If
  Next vNom
End Sub

Bonne fin de semaine.


Salutations
Jean-Pierre

Répondre à purrofixe

7

bibi_fricotin, le 13 nov 2004 à 20:27:48

Merci beaucoup purrofixe
j'essaye et te tiens au courant
bon WE

Répondre à bibi_fricotin

8

purrofixe, le 14 nov 2004 à 00:22:40

Merci

Salutations
Jean-Pierre

Répondre à purrofixe

9

bibi_fricotin, le 14 nov 2004 à 21:56:07

J'ai donc essayé ta macro : elle marche super bien
j'ai rajouté une condition au cas où la première cellule serait vide
pour cette ligne : Range(Cells(vDéNomX, 1), Cells(vFiNomX, 1)).Select
comment pourrait-on l'écrire pour sélectionner de la colonne A à une autre colonne ?
merci encore

Répondre à bibi_fricotin

10

purrofixe, le 14 nov 2004 à 22:38:37

Bonsoir bibi_fricotin,
Merci pour le message.
Par principe la première cellule de la plage à encadrer ne doit pas être vide, enfin c’est vous qui savez ou doit commencer le travail.
De toute manière elle serait comprise dans la vPlageNom et de ce fait serait traité comme un nom vide, donc pas de condition en plus.
Si nécessaire vous pouvez me joindre @@ sans problème.
Cette demande n’est pas clair (comment pourrait-on l'écrire pour sélectionner de la colonne A à une autre colonne ?)…
Si référence à Range(……), il s’agit de référence L1C1 (L>>ligne et C>> colonne)
Dans se cas pour la colonne « H » c’est la valeur 8 ; (Range(Cells(vDéNomX, 8), Cells(vFiNomX, 8)).Select).


Salutations
Jean-Pierre

Répondre à purrofixe

11

bibi_fricotin, le 14 nov 2004 à 23:19:50

Bonsoir purrofixe
je voudrais donc séléctionner une plage de cellules :
ex : L10C1 :L11C5
Merci.

Répondre à bibi_fricotin

12

purrofixe, le 14 nov 2004 à 23:57:14

Bonsoir bibi_fricotin,
Simplement:
1- en L1C1 >>> range(Cells(10,1),Cells(11,5); je l'utilise de préférence lorsque j'utilise les valeurs de compteur, c'est plus direct.
ou alors
2- en A1 >>>> Range("A10:E11")

Salutations
Jean-Pierre

Répondre à purrofixe

13

bibi_fricotin, le 15 nov 2004 à 09:33:31

Merci pour ta réponse
en fait, je voulais récupérer le nombre de lignes pour sélectionner une plage de cellules
voici la macro finie (ou presque, je vais rajouter un autorun et des messages dans la barre d'état).
encore merci et bonne journée.

'si A10 est vide passe au fichier suivant

Range("A10").Select
If ActiveCell.Value <> "" Then
Range("A9").Select
Selection.Sort Key1:=Range("B10"), Order1:=xlDescending, Key2:=Range("A10"), Order2:=xlAscending, Key3:=Range("D10"), Order3:=xlAscending, Header _
:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

Range("A10").Select
'Récupérer la plage des noms et le nombre , début Li 6, dans Col A
vPlageNom = Range("A10:A" & Range("A10").End(xlDown).Row)
vNbNom = Range("A10").End(xlDown).Row - (10 - 1)
vDéNomX = 10
vFiNomX = 10
vCount = 1
'Début boucle sur nom
For Each vNom In vPlageNom
'Nom suivant différent >> encadrer la plage
If Cells(vDéNomX + vCount, 1).Value <> vNom Then

Range(Cells(vDéNomX, 1), Cells(vFiNomX, 6)).Select

With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
'Icrémenter les compteurs début, comptage et fin
Let vDéNomX = vDéNomX + vCount
Let vCount = 1
Let vFiNomX = vDéNomX
Else
'Incrémenter les compteurs fin et comptage
Let vCount = vCount + 1
Let vFiNomX = vFiNomX + 1
End If
Next vNom

Else
End If

Répondre à bibi_fricotin

14

 purrofixe, le 15 nov 2004 à 14:47:24

Bonsoir bibi_fricotin,
Merci pour le message.
Par curiosité j’ai contrôlé votre ajout et voici mon commentaire :
1.-
La plage à travailler est récupéré (les noms et par définition son nombre) directement dans l’instruction : vPlageNom = Range(« A10……………….) et vNbNom = Range(…….), a noté que vNbNom n’est pas utilisé dans cette procédure et peut être supprimer.
2.-
La base de départ est fixé comme suit : la plage des noms, début Li 10, dans Col A, de ce fait la deuxième instruction (Range("A10").Select), juste devant 'Récupérer la plage….. , est inutile.
3.-
Votre instruction : If ActiveCell.Value <> "" Then, fait terminer la procédure si la cellule est vide >>> donc pas d’encadrement pour les noms qui suivent !!!!!
A mon avis, cette instruction est parfaitement inutile, car s’il s’agit ensuite de faire un tri, il suffit de le prévoir sur une plage sans titre de colonne.
4.-
Pour effectuer un tri, il faut sélectionné une plage de cellule (avec ou sans titre de colonne) et ensuite vous pouvez donné l’instruction : Selection.Sort Key1:=Range("B10")……., dans votre cas vous recevez une erreur d’exécution ‘1004’ >> Référence de tri non valide.
A vous de contrôler ce problème car je ne connais pas la structure de votre base de données.

Au cas ou, vous savez ou me joindre @ si nécessaire.
Bonne semaine

Salutations
Jean-Pierre

Répondre à purrofixe