Problème Excel : Macro et plage nommée
Résolu/Fermé
A voir également:
- Nommer une plage de cellule variable vba
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
- Déplacer une colonne excel - Guide
2 réponses
ccm81
Messages postés
10904
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 décembre 2024
2 428
Modifié par ccm81 le 11/08/2011 à 19:07
Modifié par ccm81 le 11/08/2011 à 19:07
bonjour
1. peut être comme ça
La plage nommée est vue comme un tableau, et on accede à ses cellules avec cells(ligne,colonne) et sa première cellule apour coordonnées (1,1)
2. je ne comprends pas pourquoi tu as mis ce code dans Worksheet_Change sans tester Target (la plage ou se produit le changement)
3. le select case avec une seule condition me parait un peu lour (un if suffirait)
bonne suite
1. peut être comme ça
La plage nommée est vue comme un tableau, et on accede à ses cellules avec cells(ligne,colonne) et sa première cellule apour coordonnées (1,1)
Private Sub Worksheet_Change(ByVal Target As Range) For k = 1 To Range("RFI_Received").rows.count Select Case Range("RFI_Received").cells(k,1).value Case "ok" Call boite End Select Next k End Sub
2. je ne comprends pas pourquoi tu as mis ce code dans Worksheet_Change sans tester Target (la plage ou se produit le changement)
3. le select case avec une seule condition me parait un peu lour (un if suffirait)
bonne suite
ccm81
Messages postés
10904
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 décembre 2024
2 428
Modifié par ccm81 le 12/08/2011 à 15:19
Modifié par ccm81 le 12/08/2011 à 15:19
re
RQ1. avec ton code, dès que le contenu d'une cellule change dans la feuille, Worksheet_Change est exécutée
RQ2. si tu veux tester un changement se produisant uniquement dans la plage RFI_Received, il faut tester si Target (la cible) appartient à cette plage (j'ai ajouté la déclaration des variables pour faire plus propre) (explication : si l'intersection de la cible et de la plage n'est pas vide alors ...)
RQ3. avec ce code (et ton ancienne version), l'integralité des lignes de la plage RFI_Received est testé et chaque fois que "ok" est rencontré la procedure "boite" s'exécute.
ça me parait curieux
Si tu veux tester uniquement un changement dans la cellule active, et lorsque celle ci se trouve dans la plage RFI_Received, et exécuter éventuellement la procedure "boite" uniquement pour la ligne de la cellule active
Private Sub Worksheet_Change(ByVal Target As Range)
A toi de voir selon ce que tu veux faire
bonne suite
RQ1. avec ton code, dès que le contenu d'une cellule change dans la feuille, Worksheet_Change est exécutée
RQ2. si tu veux tester un changement se produisant uniquement dans la plage RFI_Received, il faut tester si Target (la cible) appartient à cette plage (j'ai ajouté la déclaration des variables pour faire plus propre) (explication : si l'intersection de la cible et de la plage n'est pas vide alors ...)
Private Sub Worksheet_Change(ByVal Target As Range) Dim nbli As Long, li As Long If Not Intersect(Target, Range("RFI_Received")) Is Nothing Then nbli = Range("RFI_Received").Rows.Count For li = 1 To nbli If Range("RFI_Received").Cells(li, 1).Value = "ok" Then Call boite End If Next li End If End Sub
RQ3. avec ce code (et ton ancienne version), l'integralité des lignes de la plage RFI_Received est testé et chaque fois que "ok" est rencontré la procedure "boite" s'exécute.
ça me parait curieux
Si tu veux tester uniquement un changement dans la cellule active, et lorsque celle ci se trouve dans la plage RFI_Received, et exécuter éventuellement la procedure "boite" uniquement pour la ligne de la cellule active
Private Sub Worksheet_Change(ByVal Target As Range)
Dim li As Long If Not Intersect(Target, Range("RFI_Received")) Is Nothing Then li = Target.Row - Range("RFI_Received").Cells(1, 1).Row + 1 If Range("RFI_Received").Cells(li, 1).Value = "ok" Then Call boite End If End If End Sub
A toi de voir selon ce que tu veux faire
bonne suite
12 août 2011 à 09:27
Merci de ta réponse. Avec ton code, la macro marche.
J'ai également suivi ton conseil et remplacé le Select Case par un If et ça marche toujours.
Pour répondre à ta question n°2, j'ai utilisé Worksheet_Change sans tester Target, tout simplement parce que je "bidouille" juste sur Visual Basic et que j'ai trouvé ce code qui marchait sur un forum... Si t'as une solution plus simple à proposer pour l'action s'execute automatiquement, je suis preneuse.
Mon code est désormais le suivant :
Private Sub Worksheet_Change(ByVal Target As Range)
For k = 1 To Range("RFI_Received").Rows.Count
If Range("RFI_Received").Cells(k, 1).Value = "ok" Then
Call boite
End If
Next k
End Sub