Affectation d'une variable à un objet Range

  • Initiateur de la discussion Initiateur de la discussion bcesoll
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

B

bcesoll

Guest
bonjour,

je bloque dans une macro EXCEL sur l'affectation d'une variable à un objet Range.

En fait je veux que cet objet se modifie automatiquement en fonction de la macro.

mon code sheets(FEUILLE).range("VARIABLE")

quel code utiliser pour que RANGE face référence à cette VARIABLE.

MERCI
 
Re : Affectation d'une variable à un objet Range

Re,

Code:
Private Sub Worksheet_SelectionChange(ByVal [B]cell[/B] As Range)
donc target est à remplacer par cell dans toute la procédure.
Voir le code corrigé et simplifié.
Veux-tu vraiment passer par la feuille 2 et les cellules nommées ?
 

Pièces jointes

Re : Affectation d'une variable à un objet Range

re,

voici ton code corrigé:
Si tu change Target en 'cell' comme tu l'as fait dans la déclaration de procédure, il faut le changer partout sinon cela ne marche pas.

Dans ton tableau tu as aussi une erreur pour 7 tu l'as écrit SETP et le nom correspondant est SEPT. Choisit l'un ou l'autre mais pas les deux.

Code:
Private Sub Worksheet_SelectionChange(ByVal [SIZE=3][COLOR=red]Target[/COLOR][/SIZE] As Range)
 'Si plus d'une cellule sélectionné-> sortir
    If Target.Cells.Count > 1 Then Exit Sub
    'Si Target est dans "A1:A19" et n'est pasvide
    If Not Intersect(Target, Range("A1:A19")) Is Nothing And Target <> "" Then
        'Si c'est une valeur numérique
        If IsNumeric(ActiveCell) Then
          'Comprise entre 1 et 10 incluse
            If CLng(ActiveCell) >= 1 And CLng(ActiveCell) <= 10 Then
                '10 sélectionner la cellule active'
                MONCHOIX = CLng(ActiveCell)
                '20 reporter le choix sur la feuille 2'
                Sheets("feuil2").Range("MONCHOIX") = MONCHOIX
                Sheets("feuil2").Range("NUMEROLIGNE").FormulaR1C1 = "=VLOOKUP(MONCHOIX, TABLEAU,2,FALSE)"
                '30 seléctionner la ligne en fonction du choix'
                CHOIX_LIGNE = Application.VLookup(MONCHOIX, Sheets("feuil2").Range("TABLEAU"), 2, False)
                '40 afficher la ligne choisie"
                MsgBox (CHOIX_LIGNE)
                '50 vérifier les cellules vides'
                If IsNumeric(ActiveCell) Then
                    If CLng(ActiveCell.Value) >= 1 And CLng(ActiveCell.Value) <= 10 Then
                        '....j'exécute le code
                    End If
                End If
                '60 masquer la ligne choisie
                MONCHOIX = Target
                With Sheets("Feuil2")
                    .Range("NUMEROLIGNE") = CHOIX_LIGNE
                    .Range("MONCHOIX") = MONCHOIX
                End With
                Range(CHOIX_LIGNE).Rows.Hidden = False
            End If
        End If
    End If
End Sub

A+
 
Re : Affectation d'une variable à un objet Range

Re,

@kjin 😉
Code:
With Range(CHOIX_LIGNE)
        If .Rows.Hidden = True Then
            .Rows.Hidden = False
        Else
            .Rows.Hidden = True
        End If
    End With
peut se pemplacer par :
Code:
With Range(CHOIX_LIGNE)
        .Rows.Hidden = Not .Rows.Hidden
    End With
 
Re : Affectation d'une variable à un objet Range

Pour aller plus loin je souhaite mettre une condition à l'affichage de la ligne lorqu'on double click.

ex : vérifier avant d'afficher la ligne 1 (UN) que la cellule (CHAMP1) est non vide.
- si CHAMP1 vide alors afficher "vide" et laisser masqué lign 1 (UN)
- si CHAMP1 renseigné affichée ligne 1 (UN) le contenu de CHAMP1

.......................................................
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("A1:A" & Range("A65000").End(xlUp).Row)) Is Nothing Then
Cancel = True

MONCHOIX = Target

With Sheets("Feuil2")
CHOIX_LIGNE = Application.VLookup(MONCHOIX, .Range("TABLEAU"), 2, False)
CHOIX_CHAMP = Application.VLookup(MONCHOIX, .Range("TABLEAU"), 3, False)

.Range("NUMEROLIGNE") = ""
.Range("MONCHOIX") = MONCHOIX

If IsError(CHOIX_LIGNE) Then Exit Sub
.Range("NUMEROLIGNE") = CHOIX_LIGNE
.Range("NOMCHAMP") = CHOIX_CHAMP
End With

With Range(CHOIX_LIGNE)
.Rows.Hidden = Not .Rows.Hidden
End With

End If

End Sub
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
3
Affichages
258
  • Question Question
Microsoft 365 Fonction SI
Réponses
23
Affichages
442
Retour