Range prenant en compte l'ajout de ligne ou de colone (VBA=

Myth

XLDnaute Nouveau
Bonjour,
Celà fait un long moment que je recherche une solution pour que mes macros VBA s'actualisent automatiquement lorsque j'ajoute une colonne.
Par exemple :
Avec un Tableau excel de ce type
A B C D E
1
2 x
3
4
Avec une macro range("B1").select je sélectionne la colonne b1
Mais si j'ajoute une ligne manuellement avant la ligne 2 sur excel , alors
Nouveau tableau excel
A B C D E
1
2
3 x
4

La conséquence est que ma macro ne sélectionne plus la case avec le x mais toujours la case B1 alors que je voudrais que la case B3 soit sélectionnée
Condition : le x étant une variable dont on ne connait pas la valeurs et les autres cases pouvant être remplient.

En gros je recherche un moyen de définir une range qui se metrait automatiquement à jours lorsque l'on ajoute, ou supprime une ligne ou une colonne. Comme le fait excel lorsque l'on y écrit une formule.
 

JNP

XLDnaute Barbatruc
Re : Range prenant en compte l'ajout de ligne ou de colone (VBA=

Bonjour Myth :),
Tu nommes (gestionnaire de nom) ta cellule "MaCellule" par exemple, et dans ton code
Code:
Range("MaCellule").Select
Bon courage :cool:
 

Myth

XLDnaute Nouveau
Re : Range prenant en compte l'ajout de ligne ou de colone (VBA=

Merci pour cette réponse, cependant je ne peus l'appliquer puisque ma formule souhaite sélectionner une plage dynamique
(toutes les lignes entre des case écrite en gras)
je joint mon fichier avec la macro qui fonctionne mais qui ne marche plus lors de l'ajout d'une ligne manuellement


voici le code :
Sub test2()

Dim i As Long
Dim c As Range
Dim d As Range
t = 8
For i = t To 40
Set d = Cells(t, 2)
If Cells(t - 1, 3) = False Then
If Cells(i, 2).Font.Bold = True Then
Set c = Cells(i, 2).Offset(-1, 0)
Range(d, c).Select
Selection.EntireRow.Hidden = False
Exit Sub
End If
End If
If Cells(t - 1, 3) = True Then
If Cells(i, 2).Font.Bold = True Then
Set c = Cells(i, 2).Offset(-1, 0)
Range(d, c).Select
Selection.EntireRow.Hidden = True
Exit Sub
End If
End If
Next i
End Sub
 

Pièces jointes

  • Test.xlsx
    9.8 KB · Affichages: 64
  • Test.xlsx
    9.8 KB · Affichages: 65
  • Test.xlsx
    9.8 KB · Affichages: 66

julberto

XLDnaute Occasionnel
Re : Range prenant en compte l'ajout de ligne ou de colone (VBA=

Bonjour Myth, Bonjour JNP,

Tu pourrais entre autre définir ta variable t comme suit, plutôt que de la figer à 8.
Dim cel As Range
For Each cel In Range("B2:B" & Range("B65000").End(xlUp).Row)
If cel Like "Test*" Then t = cel.Address
Next
Tu pourras ainsi insérer autant de lignes que tu veux là où tu veux.
cordialement
 

JNP

XLDnaute Barbatruc
Re : Range prenant en compte l'ajout de ligne ou de colone (VBA=

Re :),
Merci pour cette réponse, cependant je ne peus l'appliquer puisque ma formule souhaite sélectionner une plage dynamique

Pourtant, ça répondait bien à cette question :mad: :
En gros je recherche un moyen de définir une range qui se metrait automatiquement à jours lorsque l'on ajoute, ou supprime une ligne ou une colonne. Comme le fait excel lorsque l'on y écrit une formule.
Bon, j'ai repris un peu (beaucoup :p...) ton fichier, j'ai changé les contrôles de formulaire en ActiveX (on est en VBA, que diantre :rolleyes:), et l'approche pour cacher/montrer suivant la case à cocher ;)...
Je te laisse découvrir :p.
Bonne soirée :cool:
Ajout : Salut Julberto :)
 

Pièces jointes

  • Test(1).xlsm
    23.1 KB · Affichages: 77
  • Test(1).xlsm
    23.1 KB · Affichages: 84
  • Test(1).xlsm
    23.1 KB · Affichages: 81

Hippolite

XLDnaute Accro
Re : Range prenant en compte l'ajout de ligne ou de colone (VBA=

Bonjour à tous,
ma formule souhaite sélectionner une plage dynamique
(toutes les lignes entre des case écrite en gras)
cette macro sélectionne successivement en colonne B les plages comprises entre des cellules contenant "Test", à adapter en utilisant SearchFormat pour la recherche de gras et .EntireRow pour sélectionner les lignes.
VB:
Public Sub Sandwich()
    Dim c1 As Range, c2 As Range, Plage12 As Range
    Dim firstAddress As String
    With ActiveSheet.Range("B:B")
        Range("B1").Select
        'recherche du premier "Test"
        Set c1 = .Find(What:="Test", After:=ActiveCell, LookIn:=xlFormulas, _
                       lookat:=xlPart, SearchOrder:=xlByColumns, SearchFormat:=False)
        If Not c1 Is Nothing Then
            firstAddress = c1.Address
            Do
                Set c2 = .FindNext(c1)    'recherche du "Test" suivant
                If c2 Is Nothing Or c2.Address = firstAddress Then Exit Do
                'détermination de la plage entre les deux "Test"
                Set Plage12 = Range(c1, c2).Offset(1, 0).Resize(Range(c1, c2).Count - 2, 1)
                
                Plage12.Select 'Plage entre les deux tests
                
                Set c1 = c2    'rebouclage
            Loop While Not c1 Is Nothing And c1.Address <> firstAddress
        End If
    End With
End Sub
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 484
Messages
2 088 796
Membres
103 970
dernier inscrit
pepito59