Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Saisie automatique par procédure VBA

8 réponses
Avatar
michir
Bonsoir =E0 tous,
Ma question est un peu compliqu=E9e.
Soit une liste de noms en colonne A (des patients). Le nom n'est
affich=E9 qu'une fois pour une visite, les cellules suivantes restent
vierges (facilit=E9 de lecture)
En colonne B une liste d'actes infirmiers
Ces deux colonnes sont li=E9es =E0 des listes de validation de donn=E9es
pour =E9viter la saisie
Voici un exemple:

A B
Henri Martin Toilette
Glyc=E9mie + Insuline
Distribution traitement

Ma question, je souhaiterais par une proc=E9dure VBA automatique,
r=E9p=E9ter le nom Henri Martin dans les 2 cellules inf=E9rieures (le nom
resterai invisible car je mettrais la police de la m=EAme couleur que
les fond ). cela serai facile par une formule, mais elle serait
=E9cras=E9e par la validation des donn=E9es
La raison est que je souhaite exploiter cette base dans un TCD et il
est donc n=E9cessaire d'avoir en colonne A la totalit=E9 des noms, sans
blancs
Merci =E0 tous
Michel

8 réponses

Avatar
michdenis
Bonjour,

Essaie comme ceci, en adaptant le nom de la feuille
pour celle où se trouvent tes données dans la procédure.

'---------------------------------------
Sub test()
Dim Rg As Range, Tblo As Variant
On Error Resume Next
With Worksheets("Feuil1")
Derlig = .Range("A:B").Cells.Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
With .Range("A1:A" & Derlig)
With .SpecialCells(xlCellTypeBlanks)
.Font.Color = .Interior.Color
.Formula = "=" & .Item(1, 1).Offset(-1).Address(0, 0)
End With
Tblo = .Value
.Value = Tblo
End With
End With
End Sub
'---------------------------------------


MichD
--------------------------------------------
"michir" a écrit dans le message de groupe de discussion :


Bonsoir à tous,
Ma question est un peu compliquée.
Soit une liste de noms en colonne A (des patients). Le nom n'est
affiché qu'une fois pour une visite, les cellules suivantes restent
vierges (facilité de lecture)
En colonne B une liste d'actes infirmiers
Ces deux colonnes sont liées à des listes de validation de données
pour éviter la saisie
Voici un exemple:

A B
Henri Martin Toilette
Glycémie + Insuline
Distribution traitement

Ma question, je souhaiterais par une procédure VBA automatique,
répéter le nom Henri Martin dans les 2 cellules inférieures (le nom
resterai invisible car je mettrais la police de la même couleur que
les fond ). cela serai facile par une formule, mais elle serait
écrasée par la validation des données
La raison est que je souhaite exploiter cette base dans un TCD et il
est donc nécessaire d'avoir en colonne A la totalité des noms, sans
blancs
Merci à tous
Michel
Avatar
michir
On 10 fév, 20:20, "michdenis" wrote:
Bonjour,

Essaie comme ceci, en adaptant le nom de la feuille
pour celle o se trouvent tes donn es dans la proc dure.

'---------------------------------------
Sub test()
Dim Rg As Range, Tblo As Variant
On Error Resume Next
With Worksheets("Feuil1")
    Derlig = .Range("A:B").Cells.Find(What:="*", _
                   LookIn:=xlValues, _
                SearchOrder:=xlByRows, _
         SearchDirection:=xlPrevious).Row
    With .Range("A1:A" & Derlig)
        With .SpecialCells(xlCellTypeBlanks)
            .Font.Color = .Interior.Color
            .Formula = "=" & .Item(1, 1).Offset(-1).Addre ss(0, 0)
        End With
        Tblo = .Value
        .Value = Tblo
    End With
End With
End Sub
'---------------------------------------

MichD
--------------------------------------------
"michir"  a crit dans le message de groupe de discussion :


Bonsoir tous,
Ma question est un peu compliqu e.
Soit une liste de noms en colonne A (des patients). Le nom n'est
affich qu'une fois pour une visite, les cellules suivantes restent
vierges (facilit de lecture)
En colonne B une liste d'actes infirmiers
Ces deux colonnes sont li es des listes de validation de donn es
pour viter la saisie
Voici un exemple:

A                                                  B
Henri Martin                             Toil ette
                                            Glyc mie + Insuline
                                            Distribution traitement

Ma question, je souhaiterais par une proc dure VBA automatique,
r p ter le nom Henri Martin dans les 2 cellules inf rieures (le nom
resterai invisible car je mettrais la police de la m me couleur que
les fond ). cela serai facile par une formule, mais elle serait
cras e par la validation des donn es
La raison est que je souhaite exploiter cette base dans un TCD et il
est donc n cessaire d'avoir en colonne A la totalit des noms, sans
blancs
Merci tous
Michel



Re MichD,
J'ai bien copié ta procédure dans un module, mais je n'arrive pas à l a
faire fonctionner
Je joins un extrait de mon fichier
http://cjoint.com/?0cllZnDlsXB
Je ne sais quelle marche j'ai manquée...???
Merci à toi et à tous
Michel
Avatar
michdenis
Dans ton fichier, tu disais avoir 2 colonnes comme ceci :

Colonne A Colonne B
Noms Tâches
Diane Tâche1
Tâche2
Tâche3
Sylvie Tâche1
Tâche2
Tâche3
Isabelle Tâche1
Tâche2
Tâche3

La macro proposée effectue le remplissage de la colonne A
pour faire en sorte qu'à chaque tâche définie en colonne B
le nom du responsable apparaisse colonne A

Si dans ta feuille tu as seulement ceci :

Colonne A Colonne B
Noms Tâches
Diane Tâche1

L'exécution de la macro n'aura aucun effet.

MichD
--------------------------------------------
Avatar
michir
On 11 fév, 12:47, "michdenis" wrote:
Dans ton fichier, tu disais avoir 2 colonnes comme ceci :

Colonne A       Colonne B
Noms               T ches
Diane                T che1
                          T che2
                          T che3
Sylvie                 T che1
                           T che2
                           T che3
Isabelle              T che1
                           T che2
                           T che3

La macro propos e effectue le remplissage de la colonne A
pour faire en sorte qu' chaque t che d finie en colonne B
le nom du responsable apparaisse colonne A

Si dans ta feuille tu as seulement ceci :

Colonne A       Colonne B
Noms               T ches
Diane               T che1

L'ex cution de la macro n'aura aucun effet.

MichD
--------------------------------------------



MichD,

Je suis bien dans le premier schéma. Il suffit avec le dérouleur de
la colonne B, d'afficher des actes successifs.
Et je pensais que la macro répéterai automatiquement, le noms du
patient au droit de chaque soin, dès lors que ce dernier serait
affiché
Le résultat serait alors le suivant:
Noms               T ches
Diane                T che1
Diane                 T che2
Diane                 T che3
Sylvie                 T che1
Sylvie                 T che2
Sylvie                 T che3
Isabelle              T che1
Isabelle              T che2
Isabelle              T che3



Michel
Avatar
michdenis
OK, ta demande est bien différente...

Dans le module feuille où l'action se déroule, colle ceci :

'---------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range
Set Rg = Intersect(Target, Range("B:B"))
If Not Rg Is Nothing Then
Application.EnableEvents = False
For Each c In Rg
If c <> "" Then
If IsEmpty(c.Offset(, -1)) Then
c.Offset(, -1) = c.Offset(, -1).End(xlUp)
End If
Else
c.Offset(, -1) = ""
End If
Next
Application.EnableEvents = True
End If
End Sub
'---------------------------------------

MichD
--------------------------------------------
Avatar
michir
On 11 fév, 14:56, "michdenis" wrote:
OK, ta demande est bien différente...

Dans le module feuille où l'action se déroule, colle ceci :

'---------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range
Set Rg = Intersect(Target, Range("B:B"))
If Not Rg Is Nothing Then
    Application.EnableEvents = False
    For Each c In Rg
        If c <> "" Then
            If IsEmpty(c.Offset(, -1)) Then
                c.Offset(, -1) = c.Offset(, -1).End(xlU p)
            End If
        Else
            c.Offset(, -1) = ""
        End If
    Next
    Application.EnableEvents = True
End If
End Sub
'---------------------------------------

MichD
--------------------------------------------



MichD,
Merci pour ta disponibilité.
Encore une question, et je t'assure que c'est la dernière.
Toujours sur mon exemple, la colonne B est en réalité la colonne E
dans la vraie vie...
Comment puis je corriger la procédure que tu proposes, et qui
fonctionne parfaitement sur 2 colonnes adjacentes, pour tenir compte
de cet écart ?
J'ai essayé de corriger l'argument offset en faisant -4, mais cela ne
fonctionne pas
Merci à toi
Michel
Avatar
michdenis
'------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range
Set Rg = Intersect(Target, Range("E:E"))
If Not Rg Is Nothing Then
Application.EnableEvents = False
For Each c In Rg
If c <> "" Then
If IsEmpty(c.Offset(, -1)) Then
c.Offset(, -4) = c.Offset(, -4).End(xlUp)
If c.Row <> 1 Then
c.Offset(, -4).Font.Color = c.Offset(, -4).Interior.Color
End If
End If
Else
c.Offset(, -4) = ""
c.Offset(, -4).Font.Color = 0
End If
Next
Application.EnableEvents = True
End If
End Sub
'------------------------------------------


MichD
--------------------------------------------
Avatar
michir
On 11 fév, 18:38, "michdenis" wrote:
'------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range
Set Rg = Intersect(Target, Range("E:E"))
If Not Rg Is Nothing Then
    Application.EnableEvents = False
    For Each c In Rg
        If c <> "" Then
            If IsEmpty(c.Offset(, -1)) Then
                c.Offset(, -4) = c.Offset(, -4).End(xlU p)
                If c.Row <> 1 Then
                    c.Offset(, -4).Font.Color = c.O ffset(, -4).Interior.Color
                End If
            End If
        Else
            c.Offset(, -4) = ""
            c.Offset(, -4).Font.Color = 0
        End If
    Next
    Application.EnableEvents = True
End If
End Sub
'------------------------------------------

MichD
--------------------------------------------



MichD,
Super, tout fonctionne parfaitement
Je n'aurais pas su écrire cette macro
Merci à toi
Michel