A voir également:
- [vba excel] executer une macro sur un click
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Déplacer une colonne excel - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
- Word et excel gratuit - Guide
11 réponses
Bonjour,
En supposant que la colonne A constitue un index dans la feuille
et que la colonne B contitue la colonne avec la valeur variable à initiliser à "NON" ou a rien !
Il vous faudra adapter !
Lupin
En supposant que la colonne A constitue un index dans la feuille
et que la colonne B contitue la colonne avec la valeur variable à initiliser à "NON" ou a rien !
Private Sub Worksheet_Change(ByVal Target As Range) Dim Region As Range, Position As Long Application.ScreenUpdating = False Position = Range("A1:A65535").End(xlDown).Row Set Region = Application.Intersect(Range("B1:B" & Position), Target) If Region Is Nothing Then 'MsgBox "La cible n'est pas dans la plage visé." Else If (Target.Value = "NON") Then Target.EntireRow.Select Selection.Interior.ColorIndex = 6 'MsgBox "La cible est dans la plage visé." Target.Offset(1, 0).Select End If End If Application.ScreenUpdating = True End Sub '
Il vous faudra adapter !
Lupin
Tu peux aussi y aller avec la fonction de format conditionnel dans l'onglet format de Excel.
tu met la condition = "<>" et tu choisis une couleur pour cette condition.
tu met la condition = "<>" et tu choisis une couleur pour cette condition.
bonjour
Dans Worksheet tu crées :
Private Sub Worksheet_SelectionChange(ByVal sel As Range)
End Sub
et tu intégres ta fonction.
l'adresse de sel donne le range de la cellule modifiée (sel.address)
si tu as besoin de compléments complète la question.
Dans Worksheet tu crées :
Private Sub Worksheet_SelectionChange(ByVal sel As Range)
End Sub
et tu intégres ta fonction.
l'adresse de sel donne le range de la cellule modifiée (sel.address)
si tu as besoin de compléments complète la question.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour !
Merci pour ta réponse.
Mais j'ai oublié de préciser que la cellule à tester n'est pas fixe : c'est une cellule par ligne dont la valeur conditionne le changement de couleur de cette même ligne.
Comment, au lieu de faire un test sur l'adresse de la cellule (sel.adress), faire un test sur sa colonne ?
Merci
Merci pour ta réponse.
Mais j'ai oublié de préciser que la cellule à tester n'est pas fixe : c'est une cellule par ligne dont la valeur conditionne le changement de couleur de cette même ligne.
Comment, au lieu de faire un test sur l'adresse de la cellule (sel.adress), faire un test sur sa colonne ?
Merci
Salut Wilmath
Pourrais s'il te plait me donner la solution je cherche à faire la même chose.
Merci d'avance
Biloue
Pourrais s'il te plait me donner la solution je cherche à faire la même chose.
Merci d'avance
Biloue
bonjour,
ta question correspond exactement à mon problème. J'ai fais la création de la macro.
mais je n'en sais pas plus .
je voudrais qu'elle s'éxécute (pour griser et mettre en forme des cellules) suivant l'information contenue dans une colonne, sur une ligne à priori inconnue (elle peut varier)
merci pour ton aide: je suis coincé par ça.
ta question correspond exactement à mon problème. J'ai fais la création de la macro.
mais je n'en sais pas plus .
je voudrais qu'elle s'éxécute (pour griser et mettre en forme des cellules) suivant l'information contenue dans une colonne, sur une ligne à priori inconnue (elle peut varier)
merci pour ton aide: je suis coincé par ça.
Bonjour, a tous je ne comprend pas pour quoi mon code ci-dessous ne fonctionne pas ou ci que l'envois du mail pas le déclenchement à heure fixe. J'ai tout essayé en ouvrant excel et en le fermer mais c'est mieux ci il est fermé.
merci pour votre aide....
Sub SendPlng()
' lance la macro SendParMail à 09:00:00 heures
Application.OnTime TimeValue("15:51:00"), ("SendParMail"), True
End Sub
Sub SendParMail()
'cette macro envois par mail la feuille excel active
ThisWorkbook.Sheets("Fev").Copy
ActiveWorkbook.SendMail ("dardeviIIe.msn.com@free.fr")
ActiveSheet.Copy
End Sub
merci pour votre aide....
Sub SendPlng()
' lance la macro SendParMail à 09:00:00 heures
Application.OnTime TimeValue("15:51:00"), ("SendParMail"), True
End Sub
Sub SendParMail()
'cette macro envois par mail la feuille excel active
ThisWorkbook.Sheets("Fev").Copy
ActiveWorkbook.SendMail ("dardeviIIe.msn.com@free.fr")
ActiveSheet.Copy
End Sub
je m'inspire de ton code pour une de mes applications.
Mais le problème, c'est que cela fonctionne quand on quitte une cellule de la colonne B, et pas sans partir de la cellule.
Pour être plus claire, dans mon cas, je voudrais que quand le user écrit quelquechose en colonne B, un userform s'affiche avec une zone de texte. Il complète la zone de texte qui doit agrémenter la colonne C, soit un ActiveCell.Offset(0,1).Select.
Mais si par exemple il saisie en cellule B2, si en quittant la cellule, il utilise la flèche du haut, il est en B1, le userform s'affiche, il saisie son blabla, ActiveCell.Offset(0,1) --> le texte s'affiche en C1, alors que je le voulais en C2. S'il quitte la cellule B2 en utilisant la flèche du bas, après userform, le texte va arriver en C3...
Or je ne peux pas dans mon code VB lui dire "va dans C2", car ce code doit fonctionner pour toute la colonne B (et accesoirement pour les colonnes E, H...).
Alors je me suis dit que j'allais faire une recherche dans la colonne C, et que s'il y avait un nombre dans la colonne B et rien sur la même ligne dans la colonne C, alors c'est ici que le texte doit aller (car je vais interdire une saisie dans B sans blabla dans la colonne C). Ben oui, mais s'il utilise les flèches de gauche ou de droite quand il quitte B2, comment va-t-il deviner dans quelle colonne chercher?
Bref, y-a-t-il une solution? Ai-je un esprit trop tordu?
Merci
Alors voici une solution possible :
Dans un module standard, il te faut déclarer un variable globale
à ton projet de cette façon :
voici le code de détection du changement, légèrement modifié :
et le code qui devra être placé derrière un bouton de validation
de ton [ UserForm ]
Voilà, j'espère avoir bien compris ton dilème !
Lupin
Il te faudra faire attention ici, car les évènements sont désactivés par la ligne :
Application.EnableEvents = False
Si la routine ne s'exécute pas jusqu'a la fin -> Application.EnableEvents = True
Il n'y auras plus d'évènement [ Worksheet_Change ]
Dans un module standard, place cette routine :
Sub ActiveEvenement()
Application.EnableEvents = True
End Sub
Tu pourras ainsi réactiver les évènements du classeur.
De plus cette routine s'accroche sur la colonne A pour déterminer
la plage à surveiller en colonne B, avais-tu compris cette approche ?
Connais tu les points d'arrêts ?, le mode "pas à pas" ?
Lupin
C'était effectivement le fait qu'après un premier plantage, il était resté en
Application.EnableEvents = False.
Je voulais justement te demander par la suite que voulait dire cette commande, ben du coup, c'est déjà fait ;-)
Et à propos, en me renseignant, j'ai découvert que Application.ScreenUpdating = False permet une exécution plus rapide... Dans un fichier j'avais une macro qui durait 20 secondes (pour 100 lignes!), et après ajout de ce code, ben ça dure 0,002 secondes!!!! Lupin, je t'adore!!!!!!!!!
Concernant la notion d'index, j'ai compris que s'il y a quelquechose dans la colonne A et quelquechose dans la colonne B, alors il doit afficher mon userform, ce qui évite qu'il mouline à chercher dans toute la feuille. Dans mon cas, je n'aurais pas vraiment ce fonctionnement, car le nombre de ligne n'est pas infini. Je lui demanderais probablement d'arrêter le traitement à une ligne précise. Mais j'hésite, pourquoi pas une colonne genre index. Il devra chercher dans la ligne 10, puis 11, puis 13, 14, 16, 19..... Mais bon, est-ce plus long de chercher dans 50 lignes, que dans 20 lignes? Je ne pense pas (surtout depuis que j'ai découvert Application.ScreenUpdating = False).
Pour les points d'arrêts et le mode pas à pas, je viens de me renseigner sur ces forums (et je suis tombée sur un de tes messages ;-) ). Je ne m'étais jamais renseignée du pourquoi il y a des gros points marrons quand je clique sur la gauche! !-))))) Excellente découverte! Je vais m'en servir!
Bref, je vais m'endormir moins bête ce soir! (et c'est toujours cela de gagné)
Bonne soirée SUPERLupin, merci pour tout!