Convertir différentes données / formats en un seul

Bonjour à tous,

Tout d'abord je tiens à souligner que je suis que très peu familier avec VBA, mais étant curieux de nature, il s'agit d'un langage qui m'intéresse particulièrement et que je souhaiterai un jour maitriser.

J'en viens donc à mon problème du jour, les dates !

Je reçois souvent des fichiers de différentes personnes et je dois consolider le tout dans un seul et même fichier. Evidemment, chacun y ajoute des dates avec un format différent. Parmi toutes ces dates, on trouve les formats suivants (pour le mois de juillet par exemple):

  • 04.07.2017
  • 20170704
  • 04/07
  • 04.07.17
  • 07/04
  • 04/07/17

et pour couronner le tout, certaines de ces cellules sont en format dates et d'autres en format texte. mon but étant d'avoir un code VBA qui permettrait de tout convertir au premier format : 04.07.2017. Pour l'instant je me contente de faire toute cette manœuvre manuellement, ce qui prend plus de temps qu'il n'en faudrait avec un code.

Je me suis déjà renseigné avec différentes possibilités, notamment avec RegEx sur le forum de stackflow:

Ou encore la fonction replace, mais je pense qu'elle est moins adaptée ici.

j'ai essayé de reprendre ces codes et de les réutiliser mais sans succès.

J'espérais aussi réutiliser ce code pour d'autres usages, notamment en remplaçant les données par une seule qui serait l'équivalent. Par exemple dans une colonne "Titre" avec des entrées comme :

  • Mr.
  • MR
  • Mister
  • M.

L'idée serait de remplacer toutes les variantes par "Mr." seulement.

Si quelqu'un pouvait m'éclairer sur le sujet qu'il n'hésite pas

Merci beaucoup !

Bonjour,

Pour ton histoire de date, je pense qu'il faut que tu fasses une boucle, tout comme pour ton deuxième problème.

Pour ton deuxième problème, tu peux envisager quelque chose dans ce style :

DernLigne = Sheets("NOM_DE_LA_FEUILLE").Range("LETTRE_DE_LA_COLONNE_CONCERNEE" & Rows.Count).End(xlUp).Row

For i = 1 To DernLigne '(ou numéro de ligne s'il ne change jamais)
     cells(i,N°Col).Value = "Mr."
Next

J'ai testé ce code, il indique "Mr." dans toutes les cellules de ma colonne A

Hello merci pour ta réponse.

J'ai oublié de préciser que la colonne "title" peut contenir d'autres genres. Je m'explique. Disons que la colonne contienne les titres suivants :

  • Miss
  • Mister
  • Mr.
  • Ms.
  • Mrs.
  • MRS
  • MR
  • Mr

parmi toutes ces données, MR, Mr, Mister devraient être converti par "Mr.". Pour ce qui est de Ms ou Ms. ils devraient être converti par "Miss". Enfin pour MRS il devrait être remplacé par "Mrs.".

D'où l'idée d'un registre où il va piocher les valeur..un genre de Vlookup du futur

Alors dans ce cas :

DernLigne = Sheets("NOM_DE_LA_FEUILLE").Range("LETTRE_DE_LA_COLONNE_CONCERNEE" & Rows.Count).End(xlUp).Row

For i = 1 To DernLigne '(ou numéro de ligne s'il ne change jamais)
     If cells(i,N°Col).Value ="MR" Or if cells(i,N°Col).Value="Mr" Or if cells(i,N°Col).Value="Mister" Then
     cells(i,N°Col).Value = "Mr."
Next

For i = 1 To DernLigne '(ou numéro de ligne s'il ne change jamais)
     If cells(i,N°Col).Value ="Ms" Or if cells(i,N°Col).Value="Ms." Then
     cells(i,N°Col).Value = "Miss."
Next

For i = 1 To DernLigne '(ou numéro de ligne s'il ne change jamais)
     If cells(i,N°Col).Value ="MRS" Then
     cells(i,N°Col).Value = "Mrs."
Next

Tu sauvegardes ce code dans un fichier Excel ".xlsm" et quand tu reçois ton fichier, tu ouvres celui avec le code et tu lances le code sur le fichier reçu.

Cool ! merci beaucoup, je vais essayer ça

Bon eh bien j'ai déjà un petit soucis avant même de pouvoir tester le code. Une soit disant erreur de compilation (voir capture d'écran en pièce jointe). Faut vraiment que je prenne des cours de VBA.

capture

Il faut que tu reviennes à la ligne après "Then".

Remplace également "N°Col" par le vrai numéro de colonne : A=1, B=2, C=3.....

Et il faut placer ton code dans un Module.

Il doit commencer par Sub... et finir par End Sub

Sub Remplct_Titre()

[b][i]Code[/i][/b]

End Sub

J'ai tout essayé, rien n'y fait, ça me met encore la même erreur.

J'ai essayé avec cet exemple, avec Elseif au lieu de "or if":

If LRegion ="N" Then
   LRegionName = "North"

ElseIf LRegion = "S" Then
   LRegionName = "South"

ElseIf LRegion = "E" Then
   LRegionName = "East"

ElseIf LRegion = "W" Then
   LRegionName = "West"

End If

mais toujours rien. Voilà le code j'ai mis.

Option_Explicit

Sub Remplct_Titre()

DernLigne = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row

For i = 1 To DernLigne '(ou numéro de ligne s'il ne change jamais)
    If cells(i,1).Value ="MR" Or if cells(i,1).Value="Mr" Or if cells(i,1).Value="Mister" Then
    cells(i,1).Value = "Mr."

Next

For i = 1 To DernLigne '(ou numéro de ligne s'il ne change jamais)
    If cells(i,1).Value ="Ms" Or if cells(i,1).Value="Ms." Then
     cells(i,1).Value = "Miss."
Next

For i = 1 To DernLigne '(ou numéro de ligne s'il ne change jamais)
    If cells(i,1).Value ="MRS" Then
     cells(i,1).Value = "Mrs."
Next

End Sub

Désolé, jsuis vraiment débutant au dernier degré

Bonjour rhj94, bonjour le fil, bonjour le forum,

Quand on commence un IF, il faut avoir un End If (dans la plus part des cas)

(Exception : si tout est sur la même ligne ... if Cells(i, 1).Value = "MR" then Cells(i, 1).Value = "Mr." )

Essai ceci :

Sub Remplct_Titre()

DernLigne = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row

For i = 1 To DernLigne '(ou numéro de ligne s'il ne change jamais)
    If Cells(i, 1).Value = "MR" Or Cells(i, 1).Value = "Mr" Or Cells(i, 1).Value = "Mister" Then
        Cells(i, 1).Value = "Mr."
    End If
Next

For i = 1 To DernLigne '(ou numéro de ligne s'il ne change jamais)
    If Cells(i, 1).Value = "Ms" Or Cells(i, 1).Value = "Ms." Then
        Cells(i, 1).Value = "Miss."
    End If
Next

For i = 1 To DernLigne '(ou numéro de ligne s'il ne change jamais)
    If Cells(i, 1).Value = "MRS" Then
        Cells(i, 1).Value = "Mrs."
    End If
Next

End Sub

Joseph

Hello Joseph,

Ca fait quelques heures que je lis dessus, j'avais aussi ajouté End If dans le code, mais j'ai toujours le même problème...Je commence à croire que le problème vient d'Excel

Salut,

C'est bizarre que ça ne fonctionne pas, j'ai tenté sur un fichier test avec le code ci-dessus ça a fonctionné ..

Tu as le fichier d'origine ? Si tu peux le transmettre ça permettrai de voir les soucis.

Bonjour rhj94, bonjour le fil, bonjour le forum,

Le code que j'ai proposé fonctionne correctement si la feuille se nomme "Feuil1" et que les données à convertir sont dans la colonne "A". Sinon, il faut adapter.

Exemple en fichier joint.

Joseph

13convertir.xlsm (19.00 Ko)

Bizarrement chez moi les "IF" sont en rouge, comme la photo que j'avais postée. Avec le fichier envoyé par Joseph ça fonctionne bien

Du coup, au lieu d'avoir un bouton pour exécuter la macro, n'y a t il pas possibilité de l'exécuter à partir de l'onglet Développeur > Macro ? Sachant que je n'aurais pas la place pour afficher un bouton sur mon fichier final.

Merci beaucoup pour votre aide !

Si tout à fait, suffit de sélectionner la bonne macro mais tu peux la lancer à partir de ce menu !

Bizarre cependant que ça ne fonctionne pas sur ton fichier ...

Du coup, pareil, encore un truc bizarre, rien ne s'affiche dans ma fenetre de macro quand je l'ouvre. Meme en ayant changé le Private Sub CommandButton.Click Je me fatigue moi même

Tu l'as bien placée dans un module ?

Yes, il est bien dans un module...Quand je m’entraînais avec des petites macros toutes simples enregistrées dans des modules elles apparaissaient bien dans la liste...mais là non :/ Je me demande si ça a quelque chose à voir avec la version d'Excel, mais j'en doute.

Bonjour rhj94, bonjour le fil, bonjour le forum,

Ne pourrais-tu pas nous faire parvenir un bout de fichier avec le problème ?

Ceci afin de comprendre ce qui se passe ( ou ce qui ne se passe pas )

Joseph

En effet, j'avais oublié "End If".

Il faut aussi que tu déclares ta variable. Essaye en début de code juste après "Sub...()"

Dim DernLigne As Long

Ergotamine a écrit :

Si tout à fait, suffit de sélectionner la bonne macro mais tu peux la lancer à partir de ce menu !

Bizarre cependant que ça ne fonctionne pas sur ton fichier ...

Tu peux même te mettre un raccourci dans ton ruban Excel, comme ça plus la peine d'aller dans "Développeur".

Hello again !

J'ai bien déplacé le code vers un module dans VBA, et changé le nom du Private Sub CommandButton1_Click() en Private Sub Remplct_Titre(), mais toujours rien d'affiché dans ma liste de macro.

Rechercher des sujets similaires à "convertir differentes donnees formats seul"