Comment automatiser un fichier
Bonjour
Actuellement je travaille sur des relevés de décès pour des archives. j'aurais besoin de votre aide pour automatiser ce fichier. En effet, pour me faciliter la saisie je rentre les donnée en minuscule.
- Pouvez-vous transformer la saisie des noms et sexe en majuscule et les prénoms seulement la première lettre.
- Est-il possible de transformer les saisies en majuscule dès que je passe à la colonne suivante ou faut-il un bouton de macro ?
Cordialement
Claude
Salut Claude
Oui, c'est plutôt simple quand on connait
Voici le fichier modifié avec une petite amélioration en plus
A+
Re
J'ai oublié de te demander pour anonyme masculin ou féminin peux-tu mettre en colonne K en rouge Mort né ou Mort née ainsi que anonyme.
J'ai un petit soucis avec ta macro mais ne sachant pas ce qu"elle peut faire, j'ai fait un essai en copiant des données d'un autre fichier :
résultat le nom et prénom ne se mettent pas en majuscule
Merci pour ta macro c'est super
Bonne journée
Claude
Re,
"J'ai un petit soucis avec ta macro mais ne sachant pas ce qu'elle peut faire"
Je pense que tu exagères, non
Alors, je laisse tomber débrouille toi !
Bonjour JexceL2fr,
Ne le prend pas mal mais pour toi c'est un monde que tu domines. Tu maitrises et tu sais comment réagit le logiciel avec ton développement moi non je ne sais comment il agit. J'ai très bien compris les majuscules des noms et des prénoms mais je pensais pas du tout que si je collais des éléments dans les colonnes c'est resterait comme à l'état de copier coller donc pas de majuscules c'est ça mon problème. Quand je dis je ne comprends pas.voilà pourquoi je te relance .........
Merci
Claude
Re,
Tu dis : "Tu maitrises et tu sais comment réagit le logiciel avec ton développement moi non je ne sais comment il agit"
Private Sub Worksheet_Change(ByVal Target As Range)
'
' Saisie dans la colonne I
If Not Intersect(Range("I:I"), Target) Is Nothing Then
' Désactiver les évènements pour la modification (sinon boucle infinie)
Application.EnableEvents = False
' Mettre la cellule en majuscule
Target.Value = UCase(Target.Value)
' Réactiver les évènements pour la suite
Application.EnableEvents = True
End If
'
' Saisie du NOM dans la colonne J, M, O ou Q
If Not Intersect(Range("J:J,M:M,O:O,Q:Q"), Target) Is Nothing Then
' Désactiver les évènements pour la modification (sinon boucle infinie)
Application.EnableEvents = False
' Mettre la cellule en majuscule
Target.Value = UCase(Target.Value)
' Réactiver les évènements pour la suite
Application.EnableEvents = True
End If
'
' Saisie du Prénom dans la colonne K, N, P ou R
If Not Intersect(Range("K:K,N:N,P:P,R:R"), Target) Is Nothing Then
' Désactiver les évènements pour la modification (sinon boucle infinie)
Application.EnableEvents = False
' Mettre les 1ères lettres en majuscule
Target.Value = Application.WorksheetFunction.Proper(Target)
' Réactiver les évènements pour la suite
Application.EnableEvents = True
End If
' Une saisie, on change de cellule
If Target.Column = Range("S1").Column Then
Range("A" & Target.Row + 1).Select
Else
Target.Offset(0, 1).Select
End If
End SubQuand quelqu'un écrit
' Saisie dans la colonne I
Tu comprends quoi ?
Bonjour,
Une proposition de mise à jour du code de JExcelFr pour convertir "mort né" en "Mort né" (majuscule sur la 1e lettre de la phrase) dans la colonne L.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
'
' Saisie dans la colonne I
If Not Intersect(Range("I:I"), Target) Is Nothing Then
' Désactiver les évènements pour la modification (sinon boucle infinie)
Application.EnableEvents = False
' Mettre la cellule en majuscule
Target.Value = UCase(Target.Value)
' Réactiver les évènements pour la suite
Application.EnableEvents = True
End If
'
' Saisie du NOM dans la colonne J, M, O ou Q
If Not Intersect(Range("J:J,M:M,O:O,Q:Q"), Target) Is Nothing Then
' Désactiver les évènements pour la modification (sinon boucle infinie)
Application.EnableEvents = False
' Mettre la cellule en majuscule
Target.Value = UCase(Target.Value)
' Réactiver les évènements pour la suite
Application.EnableEvents = True
End If
'
' Saisie du Prénom dans la colonne K, N, P ou R
If Not Intersect(Range("K:K,N:N,P:P,R:R"), Target) Is Nothing Then
' Désactiver les évènements pour la modification (sinon boucle infinie)
Application.EnableEvents = False
' Mettre les 1ères lettres en majuscule
Target.Value = Application.WorksheetFunction.Proper(Target)
' Réactiver les évènements pour la suite
Application.EnableEvents = True
End If
' saisie date naissance ======================= ADDITION DE CE BLOC
If Not Intersect(Range("L:L"), Target) Is Nothing Then
' Désactiver les évènements pour la modification (sinon boucle infinie)
Application.EnableEvents = False
' detection des entrées "mort né" => ne sont pas des dates valides
If Not IsDate(Target.Value) Then
Target.Value = UCase(Left(Target.Value, 1)) & LCase(Mid(Target.Value, 2))
End If
' Réactiver les évènements pour la suite
Application.EnableEvents = True
End If
' Une saisie, on change de cellule
If Target.Column = Range("S1").Column Then
Range("A" & Target.Row + 1).Select
Else
Target.Offset(0, 1).Select
End If
End SubRe,
Si tu fais surtout du copier/coller de donnée, il faudra utiliser ce code
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cel As Range
' Copier/coller les données, donc modification de plusieurs cellules
' Pour chaque cellule modifiée
For Each Cel In Target
'
' Vérifie si modification dans la colonne I
If Not Intersect(Range("I:I"), Cel) Is Nothing Then
' Désactiver les évènements pour la modification (sinon boucle infinie)
Application.EnableEvents = False
' Mettre la cellule en majuscule
Cel.Value = UCase(Cel.Value)
' Réactiver les évènements pour la suite
Application.EnableEvents = True
End If
'
' Modification du NOM dans la colonne J, M, O ou Q
If Not Intersect(Range("J:J,M:M,O:O,Q:Q"), Cel) Is Nothing Then
' Désactiver les évènements pour la modification (sinon boucle infinie)
Application.EnableEvents = False
' Mettre la cellule en majuscule
Cel.Value = UCase(Cel.Value)
' Réactiver les évènements pour la suite
Application.EnableEvents = True
End If
'
' Modificatin du Prénom dans la colonne K, N, P ou R
If Not Intersect(Range("K:K,N:N,P:P,R:R"), Cel) Is Nothing Then
' Désactiver les évènements pour la modification (sinon boucle infinie)
Application.EnableEvents = False
' Vérifier si il est indiqué "anonyme"
If InStr(1, Cel.Value, "anonyme", vbTextCompare) > 0 Then
' SI OUI, alors mettre le texte de la cellule en gras rouge
With Cel
.Font.Bold = True
.Font.Color = -16776961
End With
With Range("L" & Cel.Row)
.Font.Bold = True
.Font.Color = -16776961
End With
Else
' Mettre les 1ères lettres en majuscule
Cel.Value = Application.WorksheetFunction.Proper(Cel)
End If
' Réactiver les évènements pour la suite
Application.EnableEvents = True
End If
Next Cel
End SubA+
Edit : Salut saboh12617
Oui, à déplacer dans ta boucle si copié/collé.
RE,
En fait je saisis les données mais comme j'avais un tableau rempli pour l'année 1851 je l'ai copié. Maintenant est-il possible de modifier la macro pour prendre en compte les deux méthodes ?
Cdlt
Merci à vous deux pour votre aide car je ne sais pas ce que l'on deviendrait sans vous ........ encore mille merci
Re,
Le dernier code donné prend en compte les 2 méthodes
' Pour chaque cellule modifiée
Re,
j'ai oublié une info, peux-tu copier le nom de la personne cellule NOM " en J" vers la colonne de la cellule en "O" Nom père
Viaud cellule J4 vers cellule O4=VIAUD
Re,
Voici la v3, je n'ai pas repris l'idée se saboh12617 , car non utile à mes yeux
Option Explicit
' https://forum.excel-pratique.com/excel/comment-automatiser-un-fichier-200724
' V1 : https://forum.excel-pratique.com/post/repondre/200724?p=1256266
' V2 : https://forum.excel-pratique.com/post/repondre/200724?p=1256359
' v3 : https://forum.excel-pratique.com/post/repondre/200724?p=1256381
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cel As Range
' Copier/coller les données, donc modification de plusieurs cellules
' Pour chaque cellule modifiée
For Each Cel In Target
'
' Vérifie si modification dans la colonne I
If Not Intersect(Range("I:I"), Cel) Is Nothing Then
' Désactiver les évènements pour la modification (sinon boucle infinie)
Application.EnableEvents = False
' Mettre la cellule en majuscule
Cel.Value = UCase(Cel.Value)
' Réactiver les évènements pour la suite
Application.EnableEvents = True
End If
'
' Modification du NOM dans la colonne J, M, O ou Q
If Not Intersect(Range("J:J,M:M,O:O,Q:Q"), Cel) Is Nothing Then
' Désactiver les évènements pour la modification (sinon boucle infinie)
Application.EnableEvents = False
' Mettre la cellule en majuscule
Cel.Value = UCase(Cel.Value)
' Réactiver les évènements pour la suite
Application.EnableEvents = True
End If
'
' Si saisie en J -> Mettre en O
If Not Intersect(Range("J:J"), Cel) Is Nothing Then
' Désactiver les évènements pour la modification (sinon boucle infinie)
Application.EnableEvents = False
' Ajouter le nom du père en O
Range("O" & Cel.Row).Value = UCase(Cel.Value)
' Réactiver les évènements pour la suite
Application.EnableEvents = True
End If
'
' Modificatin du Prénom dans la colonne K, N, P ou R
If Not Intersect(Range("K:K,N:N,P:P,R:R"), Cel) Is Nothing Then
' Désactiver les évènements pour la modification (sinon boucle infinie)
Application.EnableEvents = False
' Vérifier si il est indiqué "anonyme"
If InStr(1, Cel.Value, "anonyme", vbTextCompare) > 0 Then
' SI OUI, alors mettre le texte de la cellule en gras rouge
With Cel
.Font.Bold = True
.Font.Color = -16776961
End With
With Range("L" & Cel.Row)
.Font.Bold = True
.Font.Color = -16776961
End With
Else
' Mettre les 1ères lettres en majuscule
Cel.Value = Application.WorksheetFunction.Proper(Cel)
End If
' Réactiver les évènements pour la suite
Application.EnableEvents = True
End If
Next Cel
End SubA+
Bonjour
Mille merci avec cette programme, je gagne un temps de dingue.
Cordialement
Claude
Bonjour JExceL2fr
Je reviens vers vous car je souhaiterais un modificatif au visual basic d’aujourd’hui
Après quelques jours de manipulation, dès que j'ai rentrer une date dans la cellule, je me décale au clvier pour atteindre la cellule M/F. Pouvez-vous me modifier le visual basic pour prendre en compte ce besoin suplémentaire ? et une question, si j'ajoute des colonnes cela perturbera le visaul basic ?
Merci
Cordialement
Claude
Bonjour Claude,
Il faut juste comprendre le code qui n'est pas compliqué
If Not Intersect(Range("I:I"), Cel) Is Nothing Then
Veut dire, que si la cellule modifiée est dans la colonne I, alors... on effectue les actions en dessous
Donc pour une saisie de l'année en colonne F, on souhaite passer à la colonne I
' Vérifie si modification dans la colonne I
If Not Intersect(Range("F:F"), Cel) Is Nothing and Cel.Value <> "" Then
Range("I" & Cel.Row).Select
' On ne boucle pas, ne sert à rien dans ce cas, on sort
Exit Sub
End IfPour votre question suivante
si j'ajoute des colonnes cela perturbera le visual basic ?
Alors, cela perturbera l'exécution, OUI !
Il faudra juste modifier les colonnes indiquées dans les INTERSECT()
A+
Bonjour
Bien reçu le message. je colle où le complément en plus je dois changer la lettre en D;D au lieu de F;F car je ne rentre que la date le reste je le préremplis.
Merci
Claude
Re,
Juste après le
For Each Cel In TargetBonjour
merci et bonne journée
Bonjour JExceL2fr
Le tableau avec la macro marche à merveille. Je reviens vers vous car je souhaiterais un modificatif au dernier visual basic qui se déplace vers la cellule en colonne I, le petit défaut c'est dès que j'ai fini de remplir les cellules qui suivent quand je valide le pointeur revient à la cellule de la colonne I, je déplace ensuite au clavier vers la cellule de la colonne D pour continuer ma saisie.
Y a t il moyen :
- que dès que je valide le pointeur se place à la cellule de D pour continuer ma saisie ?
- d'automatiser la saisie sur :
- dès que l'âge est inférieure à 18 ans que le pointeur se place automatiquement dans la cellule Prénom du Père colonne P ?
- Ensuite j'ai du ajouter des infos obligatoires que j'ai placé en colonne "T" Profession , Colonne "U" Né à et en colonne "V" Demeurant
- Comment regrouper les données de la colonne "S" et de la colonne "V" pour les collées en colonnes "W" (voir les 1éreligne du fichier joint)
Pouvez-vous m'aider ?
Cordialement
Claude