IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Macro pour manipuler le contenu d'une cellule [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2012
    Messages : 33
    Points : 29
    Points
    29
    Par défaut Macro pour manipuler le contenu d'une cellule
    Bonjour à tous,
    Je vais d'abord commencer par vous souhaiter mes meilleurs voeux pour 2013, il est encore temps

    Ensuite voilà où j'aurai besoin de vos conseils :

    J'ai 1 cellule qui contient des chiffres et du texte que je souhaiterai manipuler en 3 cellules distinctes. Voilà un exemple plus parlant :

    Colonne A ------------------------ B ---- C ---- D
    1 pomme + 2 poires + 1 peches ---- 1 ---- 2 ---- 3
    1 pomme ------------------------- 1 ---- 0 ---- 0
    3 pommes + 5 peches ------------- 3 ---- 0 ---- 5
    10 poires + 4 peches --------------0 ---- 10 ---- 4
    1 poire --------------------------- 0 ---- 1 ---- 0
    rien ------------------------------ 0 ---- 0 ---- 0

    etc... Je pense que vous avez compris la philosophie du problème.
    La colonne A étant mon panier, la B = pomme, C = poire et D = peche évidemment.
    Je peux ne rien avoir dans le panier, ou juste un fruit, voire 2 ou bien 3.
    Mais les fruits sont toujours donnés dans le même ordre "Pomme + Poire + Peche".

    Comment, à l'aide d'une macro, puis faire en sorte que la cellule de la colonne A puisse se spliter en cellules qui ne contiennent que la valeur de chaque fruit svp ?


    Merci beaucoup pour votre aide.

    - Henri

  2. #2
    Membre expérimenté
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Points : 1 580
    Points
    1 580
    Par défaut
    Bonjour,
    Je te propose cette fonction publique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Public Function Panier(strType As String, objCell As Range) As Integer
    Dim intPos As Integer
    Dim strReponse As String
     
        Application.Volatile
     
        intPos = InStr(objCell.Value, strType)
        If intPos = 0 Then
            strReponse = "0"
        Else
            strReponse = Mid(objCell.Value, 1, intPos - 2)
            intPos = InStrRev(strReponse, " ")
            If intPos = 0 Then
            Else
                strReponse = Mid(strReponse, intPos + 1)
            End If
        End If
        Panier = CInt(strReponse)
    End Function
    Il faut ensuite l'appeler par exemple en B1 avec la formule

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2012
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Bonjour tedo01,

    Je serai ravi d'essayer ta proposition mais j'avoue ne pas bien comprendre. Désolé.
    Je copie/colle ton code (merci ) mais je ne saisis pas quand tu me dis que pour l'appeller je fais

    Que dois-je faire pour lancer la macro que tu me proposes ? Merci encore

  4. #4
    Membre expérimenté
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Points : 1 580
    Points
    1 580
    Par défaut
    Re-bonjour,
    Il s'agit d'une fonction, ça veut dire qu'une fois mise dans un module, elle apparaît dans la feuille Excel dans la liste des fonctions disponible.
    La formule que je te propose de mettre dans la cellule B1 permet d'appeler le code et d'afficher le résultat dans la cellule où elle se trouve.

  5. #5
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 696
    Points
    6 696
    Par défaut
    Bonjour,

    le souci que tu devras gérer sera le contrôle des noms entrés

    Sinon, pour éviter du code inutile, j'ai exploité le fait que l'on peut attribuer plusieurs noms à une plage (cf image), les noms n'étant pas sensibles à la casse, restait les pluriels, en mettant 2 noms par en-tête masculin + pluriel, on est bons.

    Nom : Ormonth-Data.jpg
Affichages : 70
Taille : 43,1 Ko

    dans un module ordinaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Option Explicit
     
    Sub gogo()
     
    Dim tbo As Variant
    Dim cell As Range
    Dim I As Long
    ' Pour ne pas être gêné par les noms au pluriel ou par leur casse, voir le nommage de cellules d'en-têtes spécifique
    'on initialise la plage à 0
    Range(Cells(2, 2), Cells(Columns(1).Find("*", , , , , xlPrevious).Row, 4)).Value = 0
    For Each cell In Range(Range("A2"), Cells(Columns(1).Find("*", , , , , xlPrevious).Row, 1))
        tbo = Split(cell.Value) 'séparateur par défaut = " "
        For I = 0 To UBound(tbo)
            If IsNumeric(tbo(I)) = True Then
                Cells(cell.Row, Range(tbo(I + 1)).Column).Value = tbo(I)
            End If
        Next I
    Next cell
    End Sub
    cordialement,

    Didier
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2012
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    C'est formidable les gars.

    Je suis + partisan d'utiliser uniquement un module ordinaire proposé par Didier, mais sache tedo01 que tu m'as permis de comprendre le principe de créer cette nouvelle fonction. Merci

    Vous faites parfaitement ce qui je voulais. Maintenant faut encore que je trouve le moyen de prendre en considération que parfois au lieu d'avoir "1 pomme + 2 poires + 1 peches", c'est "TN pomme + poire" (TN = Trop Nombreux).

    Parce que oui, en réalité ce ne sont pas des pommes, des poires et des peches mais des microorganismes dans des boites de pétri qui sont comptés. Et je me suis dit que des fruits c'est + agréable à lire pour vous que des mots latin .

    N'hésitez pas à réagir si vous avez une solution pour le "TN".
    En tout cas, votre aide me sert déjà bien.

    Merci
    - Henri

    PS: Dois-je ouvrir une nouvelle discussion pour cette nouvelle question puisque ma question initiale est très bien répondue ? ou Pouvons-nous poursuivre ici avec ma question sur le "TN" ?

  7. #7
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 696
    Points
    6 696
    Par défaut
    Bonjour,

    Tu ne donnes pas assez d'éléments pour éviter que ceci se transforme en question à tiroirs

    Donc s'il y a TN c'est pour tout ou on peut avoir

    "TN pomme + 20 poire"
    "TN pomme + TN poire" etc...

    Savoir aussi s'il n'y a qu'un TN s'il se trouve toujours en début de chaîne => soluce = analyser les 2 premiers caractères de la chaîne etc...

    Et le TN, on en fait quoi ? Il va en lieu et place des chiffres... dans toutes les colonnes, dans les colonnes dont seuls les noms sont cités ? etc...

    Bref, même sans locution y faisant référence, il y a de quoi perdre son latin

    cordialement,

    Didier
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

  8. #8
    Membre expérimenté
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Points : 1 580
    Points
    1 580
    Par défaut
    Re-bonjour,
    Je n'ai pas regardé le code de Didier mais pour ma proposition, il est très simple de traiter n'importe quelle chaîne de caractères (sans espace) à la place des nombres (par exemple le "TN").
    Il suffit de remplacer le type retourné de Integer à String, ce qui ne modifie que 2 lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Function Panier(strType As String, objCell As Range) As String
    ...
        Panier = strReponse
    ...

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2012
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Ok ok.
    Merci beaucoup pour vos conseils!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] Macro pour copier le contenu d'une cellule d'un fichier excel et coller dans une form
    Par wizishop dans le forum VBA PowerPoint
    Réponses: 3
    Dernier message: 16/10/2015, 12h05
  2. [XL-2003] Créer une macro pour vider le contenu de certaines cellules
    Par lolonico1974 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/06/2010, 09h24
  3. [VBA-EXCEL] Gestion des erreurs et manipulation du contenu d'une cellule
    Par Froggy007 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/09/2008, 20h42
  4. [Formule]Macro pour masquer des formules dans une cellule
    Par Hellx dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/04/2007, 08h21
  5. [VBA-E] Lancement d'une macro en fonction du contenu d'une cellule
    Par Zak Blayde dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/01/2007, 15h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo