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 tout est commenté dans mon code

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 Sub

Quand 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 Sub

Re,

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 Sub

A+

Edit : Salut saboh12617 je pense que cette donnée, est collée également

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 Sub

A+

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 If

Pour 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 Target

Bonjour

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

8maquette-1.xlsm (114.34 Ko)
Rechercher des sujets similaires à "comment automatiser fichier"