Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Lire des données(sous un format) dans une feuille.

  • Initiateur de la discussion Initiateur de la discussion controlo
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

controlo

XLDnaute Occasionnel
Bonsoir ,


J'ai le problème suivant à résoudre : j'ai dans une feuille excel des données présentes sous la forme suivante :
caractères - chiffres , caractères - chiffres et je souhaiterais retrouver ces informations dans une autre feuille du classeur présenté sous une autre forme.J'ai fait un petit exemple de ce que j'ai au départ feuil1 et de ce que je veux obtenir en feuil2 .Je souhaiterais que le passage de l'état de la feuil1 à l'état de la feuil2 se face par une macro.Voir fichier joint :exemple 23-3-12
 

Pièces jointes

Re : Lire des données(sous un format) dans une feuille.

Bonsoir controlo,

le temps que je rédige, une solution en Excel sera sans doute proposée, mais pour varier les plaisirs, en voici une autre (sous réserve que la virgule corresponde toujours à un retour à la ligne et le tiret à un décalage à droite)
- copie tes données et colle-les dans un document Word
- appuye sur Ctrl+H
- dans Rechercher, saisis un tiret. Dans Remplacer, indique ^t (accent circonflexe suivi de la lettre t équivaut à une tabulation)
- clique sur Remplacer tout
- on recommence ensuite: Ctrl+H
- Rechercher: virgule suivie d'une espace; Remplacer ^p (correspond à une marque de paragraphe)
- Remplacer tout une fois encore
- Sélectionner l'ensemble, copier et coller dans Excel

Avec la réserve émise ci-dessus, ça pourrait fonctionner ...
 
Re : Lire des données(sous un format) dans une feuille.

Salut Modeste ,


Merci pour ta solution mais elle ne me convient pas car je peut avoir une centaine de données sous ce format et j'aimerais mieux une solution automatique dans excel.


Merci
 
Re : Lire des données(sous un format) dans une feuille.

Bonjour,

Essayer cette sub:
Code:
Sub dispatcher()
Dim xRg As Range, xTo As Range
Dim V, Ligne, Elem, xcell

On Error Resume Next
Set xRg = Nothing
Set xRg = Application.InputBox("Sélectionner la zone source", Type:=8)
If xRg Is Nothing Then Exit Sub

Set xTo = Nothing
Set xTo = Application.InputBox("Sélectionner la cellule cible", Type:=8)
If xTo Is Nothing Then Exit Sub
On Error GoTo 0
Set xTo = xTo.Cells(1, 1)

V = xRg.Value
For Each xcell In V
    Ligne = Split(xcell, ",")
    For Each Elem In Ligne
        xTo = Trim(Split(Elem, "-")(0))
        Set xTo = xTo.Offset(, 1)
        xTo = Trim(Split(Elem, "-")(1))
        Set xTo = xTo.Offset(1, -1)
    Next Elem
Next xcell

End Sub
 

Pièces jointes

Dernière édition:
Re : Lire des données(sous un format) dans une feuille.

Modeste ,


J'ai essayé ton exemple , il plante à la ligne suivante:For Each xcell In V

Peut-être que je l'utilise pas comme il faut ?

Merci
 
Re : Lire des données(sous un format) dans une feuille.

re Bonjour Controlo,

Pour l'utilisation,

1) à la 1ière boîte de dialogue, sélectionner la zone comprenant les lignes à dispatcher (ne fonctionne pas sur une sélection à zones multiples - mais on pourrait le faire aisément)
2) à la 2ième boîte de dialogue, sélectionner une cellule à partir de laquelle on écrira les lignes dispatchées (cette cellule peut se trouver sur n'importe quelle feuille du classeur)
 
Dernière édition:
Re : Lire des données(sous un format) dans une feuille.

Salut ma pomme ,


L'exemple de modeste fonctionne,mais moi sur ma feuil1 mes données se trouve toutes dans une seule cellule,mais en ce qui concerne le résultat en feuil2 il correspond à ce que j'attends.Est ce ce que vous pourriez modifier la macro pour quand partant d'une cellule de la feuille 1 on obtienne le même résultat en feuil2.Jvous est remis l'exemple de modeste avec en feuil1 les données dans une cellule.

Merci.
 

Pièces jointes

Re : Lire des données(sous un format) dans une feuille.

re-Bonjour

Code modifié. Fonctionne à présent pour n'importe quelle zone (une seulle cellule, une zone à plusieurs cellules, des zones multiples).
Code:
Sub dispatcher()
Dim xRg As Range, xTo As Range
Dim V, Ligne, Elem, xcell

On Error Resume Next
Set xRg = Nothing
Set xRg = Application.InputBox("Sélectionner la zone source", Type:=8)
If xRg Is Nothing Then Exit Sub

Set xTo = Nothing
Set xTo = Application.InputBox("Sélectionner la cellule cible", Type:=8)
If xTo Is Nothing Then Exit Sub
On Error GoTo 0
Set xTo = xTo.Cells(1, 1)

For Each xcell In xRg
    Ligne = Split(xcell, ",")
    For Each Elem In Ligne
        xTo = Trim(Split(Elem, "-")(0))
        Set xTo = xTo.Offset(, 1)
        xTo = Trim(Split(Elem, "-")(1))
        Set xTo = xTo.Offset(1, -1)
    Next Elem
Next xcell

xTo.Parent.Activate
End Sub
 

Pièces jointes

Re : Lire des données(sous un format) dans une feuille.

re-Bonjour Controlo,
mais si je peux me permettre d'abuser, peut tu me le commenter s'il te plait.
Abusons! Abusons!

Code:
Sub dispatcher()
Dim xRg As Range, xTo As Range
' les trois variables suivantes sont déclarées sans type (ou plutôt type implicite variant)
' et sans dimension => tout se passera quand on leur affectera un tableau plus tard
' au moyen de la fonction Split
Dim Ligne, Elem, xcell

' Si on annule la boîte de dialogue ou si on clique sur la croix (en haut à droite)
' une erreur se produit et dans ce cas, on continue le programme à l'instruction suivante
On Error Resume Next

' On initialise le range xRg à 'Nothing' pour pouvoir tester
' si l'utilisateur a annulé ou non la boîte de dialogue
Set xRg = Nothing

' Boîte de dialogue de saisie - type=8 indique qu'on saisit une zone.
Set xRg = Application.InputBox("Sélectionner la zone source", Type:=8)

' Si l'utilisateur a annulé la boîte de dialogue, la valeur de xRg n'a pas été modifiée
' et est donc égale à 'Nothing'. Dans ce cas, on quitte dispatcher()
If xRg Is Nothing Then Exit Sub

' on recommence la même mécanique pour la saisie de la cellule cible
Set xTo = Nothing
Set xTo = Application.InputBox("Sélectionner la cellule cible", Type:=8)
If xTo Is Nothing Then Exit Sub
' on rétablit la gestion d'erreur normale
On Error GoTo 0
' si l'utilisateur n'a pas saisi une seule cellule mais une zone, alors on affecte
' au range de la zone cible la première cellule de la zone qui correspond
' à la ligne 1 et colonne 1. S'il n'y a qu'une cellule, ça marche aussi !
Set xTo = xTo.Cells(1, 1)

' on boucle sur chaque cellule du range qui correspond à la zone source (xRg)
' si la zone source est réduite à une seule cellule alors on ne parcourera
' la boucle qu'une seule fois
For Each xcell In xRg
    ' On utilise la fonction 'split' qui à partir d'une valeur (ici le contenu de la cellule qu'on est en train de traiter
    '  dans la boucle => xcell) renvoie un tableau de base 0 (et non 1) qu'on stocke dans la variable Ligne.
    ' Split va décomposer le contenu de xcell en 'mots'. On indique à Split que les mots sont séparés par le
    ' caractère virgule ","
    ' exemple: SPLIT("1FG-7, HF2-100,",") renvoie un tableau Ligne de 2 éléments:
    ' Ligne(0) contient 1FG-7   et Ligne(1) contient HF2-100
    Ligne = Split(xcell, ",")
    
    ' on boucle sur chaque élément du tableau ligne (pour l'exemple on bouclera 2 fois)
    ' s'il n'y a qu'une cellule dans la source mais qui qui contient 100 expressions de type 1FG-7,...,
    ' alors on bouclera 100 fois (car Ligne aura 100 élements)
    For Each Elem In Ligne
        ' On réutilise la fonction 'split' qui à partir d'une valeur (ici le contenu de l'élément de ligne qu'on est
        ' en train de traiter = Elem) renvoie un tableau de base 0 (et non 1)
        ' Split va décomposer le contenu de Elem en 'mots'. On indique à Split que les mots sont séparés par le
        ' caractère tiret "-"
        ' exemple: SPLIT("1FG-7",") renvoie un tableau de 2 items:
        ' le premier item contient 1FG   et le second item contient 7
        
        ' contrairement à plus haut on ne stocke pas ce tableau et on utilise la syntaxe suivante:
        ' pour désigner le 1ier item Split(Elem, "-")(0) =>1FG
        ' pour désigner le 2ième item Split(Elem, "-")(1) =>7
        
        ' il faut aussi savoir où écrire le résultat
        ' on commence par écrire dans  xTo (saisie de l'utilisateur) et on y écrit la 1ière valeur  (1FG)
        xTo = Trim(Split(Elem, "-")(0))
        ' on se déplace d'une cellule à droite
        Set xTo = xTo.Offset(, 1)
        ' on y inscrit la 2ième valeur  (7)
        xTo = Trim(Split(Elem, "-")(1))
        ' on prépare l'inscription suivante - il faut donc descendre d'une ligne (c'est le 1 du Offset)
        ' et revenir une cellule à gauche (c'est le -1 du Offset)
        Set xTo = xTo.Offset(1, -1)
    Next Elem
Next xcell

' on active la feuille où on a dispatché les cellules sources
xTo.Parent.Activate
End Sub
 
Dernière édition:
Re : Lire des données(sous un format) dans une feuille.

Ma pomme,


Pourrais tu s'il te plait me montrer dans le fichier ci-joint , comment je peux faire pour quand rentrant en feuil 2 dans la cellule H2 ,58 (Numéro que j'attribue à la ligne ou sont mes données à trier),mes données apparaissent triées comme dans la feuil2 du fichier.Soit par exemple sur 6 colonnes et sur 6 lignes.Je pense que cela doit se faire avec OFFSET mais je ne suis pas sur et je ne sais pas comment faire lorsque je saisi 58 en H2 de la feuil2et quand je fait entré pour déclencher le lancement de la macro.Je m'en remet à tes connaissances.

Merci
 

Pièces jointes

Re : Lire des données(sous un format) dans une feuille.

Bonsoir,

Est-je bien compris ?

ou bien

Quelle version est la bonne: la 1ière ou la 2ième ou une 3ième... ?
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…