> Tous les forums > Forum Bureautique
 Autre pb vba (chiffres dans 1 cellule => mettre dans plusieurs cellules)Sujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
Jumpty
  Posté le 14/01/2022 @ 14:40 
Aller en bas de la page 
Astucien

Hello à tous. et bonne année
on peut encore le faire ...

exercice pour moi ....

je chercher à convertir une cellule qui contient plusieurs nombres séparés par des espaces

et les mettre dans des cellules séparées ..

exemple :

6 12 10 7 8 3 1 11 dans une cellule

devient :

je sais que cela est possible via "Données / Convertir

mais je me pose la question comment le faire en vba ?

c'est un bon exercice pour moi afin d'essayer de comprendre certaines notions.. par rapport à la cellule active ...

le principe serait .. une macro..

je sélectionne une cellule et je clique sur la macro.. et la conversion se fait ..

il faut donc utiliser la cellule "active ou sélectionnée" et non pas une cellule fixe..

merci de votre aide..



Modifié par Jumpty le 16/01/2022 00:32
Publicité
m12
 Posté le 15/01/2022 à 16:23 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour,

Teste ceci, le lancement de la macro convertira en plusieurs cellules à droite de la cellule sélectionnée

Sub convert()

With ActiveCell

Selection.TextToColumns Destination:=ActiveCell.Offset(0, 1), DataType:=xlDelimited, _

TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _

Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _

:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _

Array(7, 1), Array(8, 1)), TrailingMinusNumbers:=True

End With

End Sub

Jumpty
 Posté le 15/01/2022 à 20:39 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Re m12,

et merci de m'apporter une aide

1) j'ai placé ton code dans la fenêtre de saisie => aussitôt une partie du texte a pris la couleur rouge.. ?? surement une erreur de syntaxe ?

1) puis, j'ai sélectionné au préalable une cellule remplie avec 6 12 10 7 8 3 1 11 dans une seule cellule

3) et j'ai lancé le code.

Erreur de compilation .. pb de syntaxe ?

Voir cette capture :



Modifié par Jumpty le 15/01/2022 21:10
Jumpty
 Posté le 15/01/2022 à 21:08 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Info ....

(Suis sous Excel 2003)

Lorsque j'utilise "Données / Convertir"

on me propose "Délimité ou Largeur Fixe"

Perso je prends "Délimité" avec séparateur espace et non pas "largeur Fixe"

car parfois, avec largeur fixe cela passe mal parfois.. (même avec une cellule)

-

j'ai remarqué aussi que si je prends 2 cellules dont les nombres n'ont pas le même nombre de chiffre

1° Ligne : 11(2 chiffres) 9(1 chiffre) 10(2 chiffres) 7(1 chiffre) 8(1 chiffre) 5(1 chiffre) 6(1 chiffre) : Nb de chiffre au total 2+1+2+1+1+1+1 = 9 chiffres

2° Ligne : 11(2 chiffres) 12(2 chiffres) 5(1 chiffre) 15(2 chiffres) 7(1 chiffre) 10(2 chiffres) 8(1 chiffre) : Nb de chiffre au total 2+2+1+2+1+2 = 11 chiffres

si je prends "Largeur Fixe" cela passe mal .., le transfert se fait mal...

je ne sais pas si cela a de l'importance mais préfère le préciser ...

Il faut donc bien prendre "Délimité" avec séparateur "espace"

Jumpty
 Posté le 18/01/2022 à 11:36 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Personne n'a d'idée ?

corinthien
 Posté le 18/01/2022 à 14:53 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

tlm, il faut juste supprimer le retour chariot entre chaque ligne rouge ou

ce code

Sub convert()
Dim colonne() As String
colonne = Split(Selection, " ")
For i = LBound(colonne) To UBound(colonne)
Selection.Offset(0, 0 + i) = colonne(i)
Next i
End Sub



Modifié par corinthien le 18/01/2022 15:50
Jumpty
 Posté le 19/01/2022 à 11:56 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Re corinthien,

Ok, Vu, Merci de ta remarque.

pour le code de "m12", en effet, ce sont bien les retours chariots qui gênait..

je pensais que ce caractère "_" permettait de faire "une continuité dans le code."

sans ce caractère cela fonctionne .

simplement cela place le 1° chiffre sur la cellule "à coté de la cellule source"

je souhaitais commencer sur la cellule "source"

PS : il n'y a pas de caractère dans le code VBA qui permet de faire une continuité quand le code est trop long ?

Ton code lui convient parfaitement.

Super Merci

Quelques infos si possible.

instructions que je ne connais pas ..

"FieldInfo :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1)"

C'est quoi cet Array(x,y)

Tableau ?

pourtant il n'est pas déclaré ?

Aussi ..

Dans ton Code .

Sub convert()
Dim colonne() As String
colonne = Split(Selection, " ")
For i = LBound(colonne) To UBound(colonne)
Selection.Offset(0, 0 + i) = colonne(i)
Next i
End Sub

je ne connais pas ces 2 instructions.
Pourrais tu m'expliquer si possible..

Split(Selection, " ")

et

Selection.Offset(0, 0 + i)

Merci de ton aide.

-

Merci aussi à m12,

sauf que ce code ne prend pas en compte si il y a plus de 8 nombres dans la cellule.

mais avec l'exemple que j'avais donné cela fonctionne.

-

Le Code de corinthien prend en compte le nb de chiffres qu'il y a dans la cellule source et adapte en fonction .

Merci encore à vous deux

-

Et merci à corinthien, si tu peux m'expliquer les 2 instructions Split(Selection, " ") et Selection.Offset(0, 0 + i)

serait sympa.



Modifié par Jumpty le 19/01/2022 12:01
apolinaire
 Posté le 19/01/2022 à 12:22 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour,

Jumpty a écrit :

je pensais que ce caractère "_" permettait de faire "une continuité dans le code.

Oui, c'est tout à fait ça. Mais quand on tape le code, il ne faut faire qu'une seule fois la touche Entrée après l'underscore. Ce qui donne pour le code de m12 :

Sub convert()

With ActiveCell

Selection.TextToColumns Destination:=ActiveCell.Offset(0, 1), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
Array(7, 1), Array(8, 1)), TrailingMinusNumbers:=True

End With

End Sub

.

Jumpty a écrit :

si tu peux m'expliquer les 2 instructions Split(Selection, " ") et Selection.Offset(0, 0 + i)

Ouvre la page de ton code VBA dans Excel, clique sur le mot Split ou sur le mot Offset pour y placer le curseur et tape F1 au clavier. A condition d'être connecté à internet, tu sauras tout sur ces commandes, expliquées en français par Microsoft.

apolinaire
 Posté le 19/01/2022 à 12:28 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Au passage, bravo corinthien pour ton code. Je ne pense pas qu'on puisse faire plus concis ! J'ai bien aimé.

corinthien
 Posté le 19/01/2022 à 13:23 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

tlm

Merci apolinaire.

Jumpty, dans le code de m12, il suffit re remplacer Destination:=ActiveCell.Offset(0, 1) par Destination:=ActiveCell.Offset(0, 0)

et comme te l'a écrit apolinaire, taper F1 sur le mot

corinthien
 Posté le 19/01/2022 à 20:19 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

@apolinaire, on peut faire plus court…

Sub convert()
Dim colonne() As String
colonne = Split(Selection, " ")

Range(Selection, Cells(Selection.Row, Selection.Column + UBound(colonne))) = colonne

End Sub

mais donne un avertissement



Modifié par corinthien le 19/01/2022 20:49
Jumpty
 Posté le 24/01/2022 à 17:49 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

La solution fonctionne et merci de votre aide.

PS

cela marche avec une cellule Ok.

pourriez vous me dire quel code ajouter si par exemple on sélectionne 2 cellules ou plus ... (l'une au dessus de l'autre)

et que l'on souhaite faire idem avec les 2 cellules ?

Début :

Fin :

le 6 dans la 1° colonne de la 1° Ligne puis la suite dans les colonnes qui suivent

le 12 dans la 1° colonne de la 2° Ligne puis la suite dans les colonnes qui suivent

Merci ecore de votre aide à tous

corinthien
 Posté le 24/01/2022 à 22:42 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

tlm

2 cellules ou plus ... (l'une au dessus de l'autre)

l'une à côté de l'autre, ça risque d'être délicat...

Dim colonne() As String
If TypeOf Selection Is Range Then
For Each Cellule In Selection
If VarType(Cellule.Value) = vbString Then
colonne = Split(Cellule, " ")
For i = LBound(colonne) To UBound(colonne)
Cellule.Offset(0, i) = colonne(i)
Next i
End If
Next Cellule
End If



Modifié par corinthien le 24/01/2022 22:48
Jumpty
 Posté le 14/02/2022 à 15:51 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Avec un peu de retard,

Merci à tous.

galopin01
 Posté le 14/02/2022 à 16:52 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonjour,

Exemple en téléchargement

A+

corinthien
 Posté le 14/02/2022 à 19:07 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

@galopin01, est-tu sur de ton code ?

Sub Convert()
Dim Arr, i%, o As Range
For Each o In Selection
Arr = Split(ActiveCell.Value)
For i = 0 To UBound(Arr)
Cells(o.Row, i + 2) = Arr(i)
Next
Next
End Sub



Modifié par corinthien le 14/02/2022 19:12
Jumpty
 Posté le 14/02/2022 à 19:08 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Re Galopin,

galopin01 a écrit :

Bonjour,

Exemple en téléchargement

A+

Merci pour le téléchargement,

Mais ... est-il possible de me mettre le fichier au format Excel 2003 (.xls) ?

Ma version ne le prend pas et le convertisseur parfois ne passe pas bien..

Merci d'avance.



Modifié par Jumpty le 14/02/2022 19:11
Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
16,99 €Terminal de paiement SumUp Air à 16,99 €
Valable jusqu'au 26 Mai

RueDuCommerce fait une belle promotion sur le terminal de paiement SumUp Air sans fil qui passe à 16,99 € au lieu de 29,99 €. Avec lui et votre smartphone (application SumUP à installer), vous allez pouvoir accepter simplement des paiements par cartes bancaires. Oubliez les frais mensuels et les obligations contractuelles : Vous ne payez qu'une commission de 1,75% par transaction. Pas de frais supplémentaires. Les fonds sont directement transférés sur votre compte bancaire.

Pratique pour les petits commerçants, les marchés, les vides greniers, etc.


> Voir l'offre
17,99 €SSD PNY CS900 120 Go à 17,99 €
Valable jusqu'au 26 Mai

Amazon fait une promotion sur le SSD PNY CS900 120 Go qui passe à 17,99 €. Ce SSD offre des vitesses d'écriture de 515 Mo/s et de lecture à 550 Mo/s. Il est garanti 3 ans. De quoi donner une seconde jeunesse à un ordinateur un peu ancien.


> Voir l'offre
GratuitJeu PC Borderlands 3 gratuit
Valable jusqu'au 31 Mai

Epic Game Store offre actuellement le jeu PC Borderlands 3. Le jeu de tir de référence est de retour avec ses trilliards de flingues pour une aventure démente ! Découvrez de nouveaux mondes et affrontez vos ennemis avec l'un des quatre Chasseurs de l'Arche proposés, des héros en quête de trésors avec chacun leurs propres compétences et options de personnalisation. Jouez en solo ou en coop pour sauver la galaxie d'une secte et de ses leaders sans pitié. Jeu en français. Pegi 18


> Voir l'offre

Sujets relatifs
VBA remplir tableau avec données d'une autre feuille
VBA-Excel - Importées données d'un classeur à l'autre
VBA copier une feuille dans un autre classeur
remplacer mot par un autre en vba
Macro VBa copier /coller dans autre feuille a modifier ??
Vba Trouver Nom Prénom sur autre fichier (reformulé)
vba Comment Recopier lignes non vides vers autre feuille
Passer plusieurs variables dans une autre macro excel VBA
VBA et autre application
Coller une image dans une autre feuille en VBA
Plus de sujets relatifs à Autre pb vba (chiffres dans 1 cellule => mettre dans plusieurs cellules)
 > Tous les forums > Forum Bureautique