Récupérer adresse cellule pour sélection

bibi_fricotin Messages postés 201 Statut Membre -  
purrofixe Messages postés 490 Date d'inscription   Statut Membre Dernière intervention   -
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.
A voir également:

14 réponses

bibi_fricotin Messages postés 201 Statut Membre 23
 
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)
1
purrofixe Messages postés 490 Date d'inscription   Statut Membre Dernière intervention   95
 
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
0
purrofixe Messages postés 490 Date d'inscription   Statut Membre Dernière intervention   95
 
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
0
purrofixe Messages postés 490 Date d'inscription   Statut Membre Dernière intervention   95
 
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
purrofixe Messages postés 490 Date d'inscription   Statut Membre Dernière intervention   95
 
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
0
bibi_fricotin Messages postés 201 Statut Membre 23
 
merci beaucoup purrofixe
j'essaye et te tiens au courant
bon WE
0
purrofixe Messages postés 490 Date d'inscription   Statut Membre Dernière intervention   95
 
Merci

Salutations
Jean-Pierre
0
bibi_fricotin Messages postés 201 Statut Membre 23
 
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
0
purrofixe Messages postés 490 Date d'inscription   Statut Membre Dernière intervention   95
 
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
0
bibi_fricotin Messages postés 201 Statut Membre 23
 
bonsoir purrofixe
je voudrais donc séléctionner une plage de cellules :
ex : L10C1 :L11C5
Merci.
0
purrofixe Messages postés 490 Date d'inscription   Statut Membre Dernière intervention   95
 
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
0
purrofixe Messages postés 490 Date d'inscription   Statut Membre Dernière intervention   95
 
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
0
bibi_fricotin Messages postés 201 Statut Membre 23
 
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
-1
bibi_fricotin Messages postés 201 Statut Membre 23
 
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
-1