Récupérer adresse cellule pour sélection

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.

14 réponses

  1. 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
    1. 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
      1. 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
        1. 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
          1. 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
            1. merci beaucoup purrofixe
              j'essaye et te tiens au courant
              bon WE
              0
              1. Merci

                Salutations
                Jean-Pierre
                0
                1. 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
                  1. 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
                    1. bonsoir purrofixe
                      je voudrais donc séléctionner une plage de cellules :
                      ex : L10C1 :L11C5
                      Merci.
                      0
                      1. 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
                        1. 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
                          1. 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
                            1. 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