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

[VBA] Aide - fonction split - séparer les chiffres de leur unité de mesure

7 réponses
Avatar
Anne DeBlois
Bonjour,

J'ai un document Excel qui contient une imposante liste de mesures (2
dimensions, hauteur et largeur). Sur la colonne A, il y a la hauteur
métrique et sa valeur impériale entre parenthèses (exemple: 10m (12')) et
sur la colonne B, la largeur métrique et la valeur impériale entre
parenthèses (exemple: 2m (6')).

Je cherche à séparer les chiffres des unités et à répartir le tout dans les
colonnes voisines, soit, pour la colonne A 4 colonnes, la première récupère
le nombre en format numérique ordinaire, la deuxième récupère l'unité, la
troisième récupère le nombre impérial en format numérique et la dernière
récupère l'unité impériale (ici, l'apostrophe pour dire «pieds»). Idem pour
la colonne B.

En pseudo-code, je donnerais

Pour i=1, i = 65500 (ou le maximum, je ne m'en souviens jamais), i++
Lire la cellule référencée par la valeur «Ai»
' Renvoie, par exemple 2m (6')
>>Séparer en 4 membres (fonction split ou autre ici)
Écrit la première sous-chaîne à la colonne «Ci» // chiffre
Écrit la seconde sous-chaîne à la colonne «Di» // ici, c'est le
m, donc c'est du texte
Saute la parenthèse
Écrit la valeur suivante à la colonne «Ei» // la valeur en pieds
Écrit la valeur suivante à la colonne «Fi»

Fait la même chose à partir de la colone B
Mais utilise les colonne «Gi», «Hi», «Ii» et «Ji»
Suivant

Je sais qu'il y a la fonction Split en VBA qui peut servir, seulement je ne
sais pas trop comment l'utiliser pour cet exemple précis, dans une macro.
Quelqu'un pourrait-il m'aider SVP?

Merci à l'avance,

Anne

7 réponses

Avatar
Trirème
Bonjour Anne
Veux tu nécessairement passer par du VBA ?
Si c'est occasionnel (donc à usage unique ou peu fréquent) ET que les
unités sont toujours <m> et <'> (ça fait beaucoup de supposition), tu
peux passer par :
1) Rechercher-Remplacer les parenthèses ouvrantes et fermantes par 'rien'
2) Données-Convertir et utiliser le caractère <m> comme séparateur puis
recommencer avec le caractère <'> comme séparateur.
3) rajouter où il faut une colonne de <m> et une colonne de <'> (Pas
utile si c'est toujours ces unités là)

Bon... C'est de la maison Bricolo et Bricolette, ça se voit ?
Je ne fais du VBA que sous la contrainte.

Cordialement.
Trirème

Bonjour,

J'ai un document Excel qui contient une imposante liste de mesures (2
dimensions, hauteur et largeur). Sur la colonne A, il y a la hauteur
métrique et sa valeur impériale entre parenthèses (exemple: 10m (12')) et
sur la colonne B, la largeur métrique et la valeur impériale entre
parenthèses (exemple: 2m (6')).

Je cherche à séparer les chiffres des unités et à répartir le tout dans les
colonnes voisines, soit, pour la colonne A 4 colonnes, la première récupère
le nombre en format numérique ordinaire, la deuxième récupère l'unité, la
troisième récupère le nombre impérial en format numérique et la dernière
récupère l'unité impériale (ici, l'apostrophe pour dire «pieds»). Idem pour
la colonne B.

En pseudo-code, je donnerais

Pour i=1, i = 65500 (ou le maximum, je ne m'en souviens jamais), i++
Lire la cellule référencée par la valeur «Ai»
' Renvoie, par exemple 2m (6')
Séparer en 4 membres (fonction split ou autre ici)
Écrit la première sous-chaîne à la colonne «Ci» // chiffre


Écrit la seconde sous-chaîne à la colonne «Di» // ici, c'est le
m, donc c'est du texte
Saute la parenthèse
Écrit la valeur suivante à la colonne «Ei» // la valeur en pieds
Écrit la valeur suivante à la colonne «Fi»

Fait la même chose à partir de la colone B
Mais utilise les colonne «Gi», «Hi», «Ii» et «Ji»
Suivant

Je sais qu'il y a la fonction Split en VBA qui peut servir, seulement je ne
sais pas trop comment l'utiliser pour cet exemple précis, dans une macro.
Quelqu'un pourrait-il m'aider SVP?

Merci à l'avance,

Anne







Avatar
Anne DeBlois
C'est pour un client, et du VBA ferait plus professionnel à mon avis. Et
surtout, ce serait plus rapide.
AD

"Trirème" a écrit dans le message de news:

Bonjour Anne
Veux tu nécessairement passer par du VBA ?
Si c'est occasionnel (donc à usage unique ou peu fréquent) ET que les
unités sont toujours <m> et <'> (ça fait beaucoup de supposition), tu peux
passer par :
1) Rechercher-Remplacer les parenthèses ouvrantes et fermantes par 'rien'
2) Données-Convertir et utiliser le caractère <m> comme séparateur puis
recommencer avec le caractère <'> comme séparateur.
3) rajouter où il faut une colonne de <m> et une colonne de <'> (Pas utile
si c'est toujours ces unités là)

Bon... C'est de la maison Bricolo et Bricolette, ça se voit ?
Je ne fais du VBA que sous la contrainte.

Cordialement.
Trirème

Bonjour,

J'ai un document Excel qui contient une imposante liste de mesures (2
dimensions, hauteur et largeur). Sur la colonne A, il y a la hauteur
métrique et sa valeur impériale entre parenthèses (exemple: 10m (12')) et
sur la colonne B, la largeur métrique et la valeur impériale entre
parenthèses (exemple: 2m (6')).

Je cherche à séparer les chiffres des unités et à répartir le tout dans
les colonnes voisines, soit, pour la colonne A 4 colonnes, la première
récupère le nombre en format numérique ordinaire, la deuxième récupère
l'unité, la troisième récupère le nombre impérial en format numérique et
la dernière récupère l'unité impériale (ici, l'apostrophe pour dire
«pieds»). Idem pour la colonne B.

En pseudo-code, je donnerais

Pour i=1, i = 65500 (ou le maximum, je ne m'en souviens jamais), i++
Lire la cellule référencée par la valeur «Ai»
' Renvoie, par exemple 2m (6')
Séparer en 4 membres (fonction split ou autre ici)
Écrit la première sous-chaîne à la colonne «Ci» // chiffre


Écrit la seconde sous-chaîne à la colonne «Di» // ici, c'est
le m, donc c'est du texte
Saute la parenthèse
Écrit la valeur suivante à la colonne «Ei» // la valeur en
pieds
Écrit la valeur suivante à la colonne «Fi»

Fait la même chose à partir de la colone B
Mais utilise les colonne «Gi», «Hi», «Ii» et «Ji»
Suivant

Je sais qu'il y a la fonction Split en VBA qui peut servir, seulement je
ne sais pas trop comment l'utiliser pour cet exemple précis, dans une
macro. Quelqu'un pourrait-il m'aider SVP?

Merci à l'avance,

Anne







Avatar
Herve78
Pour ta fonction Split, ça donne :

Private Sub Test()
Dim texte, partie1, partie2, partie3, partie4 As String
Dim a, b, c As Integer

texte = "10m(12')"

a = InStr(1, texte, "m") 'm est trouvé en 3éme position.
b = InStr(1, texte, "(")
c = InStr(1, texte, ")")

partie1 = Left$(texte, a - 1) ' = 10
partie2 = Mid$(texte, a, 1) ' = m
partie3 = Mid$(texte, b + 1, Len(texte) - 2) ' = 12
partie4 = Mid$(texte, c - 1, 1) ' = '

End Sub

Pour connaitre la dernière ligne vide :

FinLigne =
Workbooks(NomClasseur).Worksheets(NomFeuillePIF).Range("A65536").End(xlUp).Row


Pour l'insertion des les cellules, je n'ai pas bien compris. Tu parles de
C,D,E,F puis G,H,I,J. Et après ? on revient à C,D,etc ou on continue de 4
colonnes en 4 colonnes.

A+



Bonjour,

J'ai un document Excel qui contient une imposante liste de mesures (2
dimensions, hauteur et largeur). Sur la colonne A, il y a la hauteur
métrique et sa valeur impériale entre parenthèses (exemple: 10m (12')) et
sur la colonne B, la largeur métrique et la valeur impériale entre
parenthèses (exemple: 2m (6')).

Je cherche à séparer les chiffres des unités et à répartir le tout dans les
colonnes voisines, soit, pour la colonne A 4 colonnes, la première récupère
le nombre en format numérique ordinaire, la deuxième récupère l'unité, la
troisième récupère le nombre impérial en format numérique et la dernière
récupère l'unité impériale (ici, l'apostrophe pour dire «pieds»). Idem pour
la colonne B.

En pseudo-code, je donnerais

Pour i=1, i = 65500 (ou le maximum, je ne m'en souviens jamais), i++
Lire la cellule référencée par la valeur «Ai»
' Renvoie, par exemple 2m (6')
Séparer en 4 membres (fonction split ou autre ici)
Écrit la première sous-chaîne à la colonne «Ci» // chiffre


Écrit la seconde sous-chaîne à la colonne «Di» // ici, c'est le
m, donc c'est du texte
Saute la parenthèse
Écrit la valeur suivante à la colonne «Ei» // la valeur en pieds
Écrit la valeur suivante à la colonne «Fi»

Fait la même chose à partir de la colone B
Mais utilise les colonne «Gi», «Hi», «Ii» et «Ji»
Suivant

Je sais qu'il y a la fonction Split en VBA qui peut servir, seulement je ne
sais pas trop comment l'utiliser pour cet exemple précis, dans une macro.
Quelqu'un pourrait-il m'aider SVP?

Merci à l'avance,

Anne








Avatar
Ange Ounis
Pour connaitre la dernière ligne vide :

FinLigne > Workbooks(NomClasseur).Worksheets(NomFeuillePIF).Range("A65536").End(xlUp).Row


Juste une remarque en passant sur cette syntaxe. Excel 12 est annoncé avec une
augmentation significative du nombre de lignes (plus d'un million je crois) et
de colonnes (enfin plus de 256 :) disponibles. Du coup Range("A65536").End(xlUp).Row
ne permettra plus de partir du bas des futures feuilles pour trouver la dernière
cellule occupée en colonne A. Il me parait donc préférable d'anticiper en
utilisant une syntaxe qui ne code pas la dernière ligne en dur, comme :

Cells(Rows.Count,"a").End(xlUp).Row

----------
Ange Ounis
----------

Pour ta fonction Split, ça donne :

Private Sub Test()
Dim texte, partie1, partie2, partie3, partie4 As String
Dim a, b, c As Integer

texte = "10m(12')"

a = InStr(1, texte, "m") 'm est trouvé en 3éme position.
b = InStr(1, texte, "(")
c = InStr(1, texte, ")")

partie1 = Left$(texte, a - 1) ' = 10
partie2 = Mid$(texte, a, 1) ' = m
partie3 = Mid$(texte, b + 1, Len(texte) - 2) ' = 12
partie4 = Mid$(texte, c - 1, 1) ' = '

End Sub

Pour connaitre la dernière ligne vide :

FinLigne =
Workbooks(NomClasseur).Worksheets(NomFeuillePIF).Range("A65536").End(xlUp).Row


Pour l'insertion des les cellules, je n'ai pas bien compris. Tu parles de
C,D,E,F puis G,H,I,J. Et après ? on revient à C,D,etc ou on continue de 4
colonnes en 4 colonnes.

A+




Bonjour,

J'ai un document Excel qui contient une imposante liste de mesures (2
dimensions, hauteur et largeur). Sur la colonne A, il y a la hauteur
métrique et sa valeur impériale entre parenthèses (exemple: 10m (12')) et
sur la colonne B, la largeur métrique et la valeur impériale entre
parenthèses (exemple: 2m (6')).

Je cherche à séparer les chiffres des unités et à répartir le tout dans les
colonnes voisines, soit, pour la colonne A 4 colonnes, la première récupère
le nombre en format numérique ordinaire, la deuxième récupère l'unité, la
troisième récupère le nombre impérial en format numérique et la dernière
récupère l'unité impériale (ici, l'apostrophe pour dire «pieds»). Idem pour
la colonne B.

En pseudo-code, je donnerais

Pour i=1, i = 65500 (ou le maximum, je ne m'en souviens jamais), i++
Lire la cellule référencée par la valeur «Ai»
' Renvoie, par exemple 2m (6')
Séparer en 4 membres (fonction split ou autre ici)
Écrit la première sous-chaîne à la colonne «Ci» // chiffre


Écrit la seconde sous-chaîne à la colonne «Di» // ici, c'est le
m, donc c'est du texte
Saute la parenthèse
Écrit la valeur suivante à la colonne «Ei» // la valeur en pieds
Écrit la valeur suivante à la colonne «Fi»

Fait la même chose à partir de la colone B
Mais utilise les colonne «Gi», «Hi», «Ii» et «Ji»
Suivant

Je sais qu'il y a la fonction Split en VBA qui peut servir, seulement je ne
sais pas trop comment l'utiliser pour cet exemple précis, dans une macro.
Quelqu'un pourrait-il m'aider SVP?

Merci à l'avance,

Anne










Avatar
Anne DeBlois
Merci à vous deux!
"Ange Ounis" a écrit dans le message de news:

Pour connaitre la dernière ligne vide :

FinLigne > > Workbooks(NomClasseur).Worksheets(NomFeuillePIF).Range("A65536").End(xlUp).Row


Juste une remarque en passant sur cette syntaxe. Excel 12 est annoncé avec
une augmentation significative du nombre de lignes (plus d'un million je
crois) et de colonnes (enfin plus de 256 :) disponibles. Du coup
Range("A65536").End(xlUp).Row
ne permettra plus de partir du bas des futures feuilles pour trouver la
dernière cellule occupée en colonne A. Il me parait donc préférable
d'anticiper en utilisant une syntaxe qui ne code pas la dernière ligne en
dur, comme :

Cells(Rows.Count,"a").End(xlUp).Row

----------
Ange Ounis
----------

Pour ta fonction Split, ça donne :

Private Sub Test()
Dim texte, partie1, partie2, partie3, partie4 As String
Dim a, b, c As Integer

texte = "10m(12')"

a = InStr(1, texte, "m") 'm est trouvé en 3éme position.
b = InStr(1, texte, "(")
c = InStr(1, texte, ")")

partie1 = Left$(texte, a - 1) ' = 10
partie2 = Mid$(texte, a, 1) ' = m
partie3 = Mid$(texte, b + 1, Len(texte) - 2) ' = 12
partie4 = Mid$(texte, c - 1, 1) ' = '

End Sub

Pour connaitre la dernière ligne vide :

FinLigne =
Workbooks(NomClasseur).Worksheets(NomFeuillePIF).Range("A65536").End(xlUp).Row


Pour l'insertion des les cellules, je n'ai pas bien compris. Tu parles de
C,D,E,F puis G,H,I,J. Et après ? on revient à C,D,etc ou on continue de 4
colonnes en 4 colonnes.

A+




Bonjour,

J'ai un document Excel qui contient une imposante liste de mesures (2
dimensions, hauteur et largeur). Sur la colonne A, il y a la hauteur
métrique et sa valeur impériale entre parenthèses (exemple: 10m (12')) et
sur la colonne B, la largeur métrique et la valeur impériale entre
parenthèses (exemple: 2m (6')).

Je cherche à séparer les chiffres des unités et à répartir le tout dans
les colonnes voisines, soit, pour la colonne A 4 colonnes, la première
récupère le nombre en format numérique ordinaire, la deuxième récupère
l'unité, la troisième récupère le nombre impérial en format numérique et
la dernière récupère l'unité impériale (ici, l'apostrophe pour dire
«pieds»). Idem pour la colonne B.

En pseudo-code, je donnerais

Pour i=1, i = 65500 (ou le maximum, je ne m'en souviens jamais), i++
Lire la cellule référencée par la valeur «Ai»
' Renvoie, par exemple 2m (6')
Séparer en 4 membres (fonction split ou autre ici)
Écrit la première sous-chaîne à la colonne «Ci» // chiffre


Écrit la seconde sous-chaîne à la colonne «Di» // ici, c'est
le m, donc c'est du texte
Saute la parenthèse
Écrit la valeur suivante à la colonne «Ei» // la valeur en
pieds
Écrit la valeur suivante à la colonne «Fi»

Fait la même chose à partir de la colone B
Mais utilise les colonne «Gi», «Hi», «Ii» et «Ji»
Suivant

Je sais qu'il y a la fonction Split en VBA qui peut servir, seulement je
ne sais pas trop comment l'utiliser pour cet exemple précis, dans une
macro. Quelqu'un pourrait-il m'aider SVP?

Merci à l'avance,

Anne











Avatar
Herve78
La remarque d'Ange est très pertinente.



Pour connaitre la dernière ligne vide :

FinLigne > > Workbooks(NomClasseur).Worksheets(NomFeuillePIF).Range("A65536").End(xlUp).Row


Juste une remarque en passant sur cette syntaxe. Excel 12 est annoncé avec une
augmentation significative du nombre de lignes (plus d'un million je crois) et
de colonnes (enfin plus de 256 :) disponibles. Du coup Range("A65536").End(xlUp).Row
ne permettra plus de partir du bas des futures feuilles pour trouver la dernière
cellule occupée en colonne A. Il me parait donc préférable d'anticiper en
utilisant une syntaxe qui ne code pas la dernière ligne en dur, comme :

Cells(Rows.Count,"a").End(xlUp).Row

----------
Ange Ounis
----------

Pour ta fonction Split, ça donne :

Private Sub Test()
Dim texte, partie1, partie2, partie3, partie4 As String
Dim a, b, c As Integer

texte = "10m(12')"

a = InStr(1, texte, "m") 'm est trouvé en 3éme position.
b = InStr(1, texte, "(")
c = InStr(1, texte, ")")

partie1 = Left$(texte, a - 1) ' = 10
partie2 = Mid$(texte, a, 1) ' = m
partie3 = Mid$(texte, b + 1, Len(texte) - 2) ' = 12
partie4 = Mid$(texte, c - 1, 1) ' = '

End Sub

Pour connaitre la dernière ligne vide :

FinLigne =
Workbooks(NomClasseur).Worksheets(NomFeuillePIF).Range("A65536").End(xlUp).Row


Pour l'insertion des les cellules, je n'ai pas bien compris. Tu parles de
C,D,E,F puis G,H,I,J. Et après ? on revient à C,D,etc ou on continue de 4
colonnes en 4 colonnes.

A+




Bonjour,

J'ai un document Excel qui contient une imposante liste de mesures (2
dimensions, hauteur et largeur). Sur la colonne A, il y a la hauteur
métrique et sa valeur impériale entre parenthèses (exemple: 10m (12')) et
sur la colonne B, la largeur métrique et la valeur impériale entre
parenthèses (exemple: 2m (6')).

Je cherche à séparer les chiffres des unités et à répartir le tout dans les
colonnes voisines, soit, pour la colonne A 4 colonnes, la première récupère
le nombre en format numérique ordinaire, la deuxième récupère l'unité, la
troisième récupère le nombre impérial en format numérique et la dernière
récupère l'unité impériale (ici, l'apostrophe pour dire «pieds»). Idem pour
la colonne B.

En pseudo-code, je donnerais

Pour i=1, i = 65500 (ou le maximum, je ne m'en souviens jamais), i++
Lire la cellule référencée par la valeur «Ai»
' Renvoie, par exemple 2m (6')
Séparer en 4 membres (fonction split ou autre ici)
Écrit la première sous-chaîne à la colonne «Ci» // chiffre


Écrit la seconde sous-chaîne à la colonne «Di» // ici, c'est le
m, donc c'est du texte
Saute la parenthèse
Écrit la valeur suivante à la colonne «Ei» // la valeur en pieds
Écrit la valeur suivante à la colonne «Fi»

Fait la même chose à partir de la colone B
Mais utilise les colonne «Gi», «Hi», «Ii» et «Ji»
Suivant

Je sais qu'il y a la fonction Split en VBA qui peut servir, seulement je ne
sais pas trop comment l'utiliser pour cet exemple précis, dans une macro.
Quelqu'un pourrait-il m'aider SVP?

Merci à l'avance,

Anne













Avatar
AV
Pour connaitre la dernière ligne renseignée




Cells(Rows.Count,"a").End(xlUp).Row

La remarque d'Ange est très pertinente.


Heu...et si (sait-on jamais..) Axx est renseignée ?
--> problème

Je préfére la solution (indépendante du nbre de lignes) :

MsgBox Cells.Find("*", [A1], 1, , 1, 2).Row

AV