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 :

Format nombre avec VBA [XL-2010]


Sujet :

Macros et VBA Excel

  1. #61
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    eriic
    fait tes test tu verra que c'est pas aussi simple
    Testé avant poster. Aucun problème chez moi, les 0 non significatifs y sont.
    Ensuite pour connaitre leur nombre c'est une simple différence de longueur de chaine.

  2. #62
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    et en voila une belle
    peu importe le nombre de caractères dans ta cellule 13,15,17,37,215,etc.....
    tu aura toujours des séries de 2 puis la série de 3 a la fin
    sans doute a améliorer
    'exemple suivant une de tes dernieres reponses
    ' CN000000000000000 ' 17 caracteres dont 2 lettres
    'CN0000000000000 ' 15 caracteres dont 2 lettres
    'O000000000000 '13 caracteres dont 1 lettre
    '0000000000000 ' 13 caracteres tout numeric

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim formatage$, chaine$, Fx#
         If Target.Column = 1 And Target.Cells.Count = 1 Then
            chaine = Target.Value
            If InStr(chaine, " ") = 0 Then
                 Fx = (Len(chaine) / 2) - 1'pour obtenir le nombre de tranches -1 parce que on vire la derniere car elle est de 3
                formatage = Application.Rept("@@ ", Round(Fx)) & "@@@"'creation du pattern(modele de formatage
                Target.Value = Trim(Format(chaine, formatage))'application du formatage 
            End If
        End If
    End Sub
    prévoir dans le cadre d'une amélioration une gestion d'erreur sur le len de la chaine tapée peut etre un test mod 2 sur le len (j'dis ca j'dis rien moi hein)
    Nom : demo.gif
Affichages : 238
Taille : 660,8 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #63
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Super Patrick, ça marche très bien. Je n'aurais jamais trouvé cette solution.
    Désolé d'avoir tardé à répondre, mais je suis en convalescence suite à une grave maladie de ce fait je suis de repos l'après-midi. Je te présente toutes mes excuses.
    Je ne pensais pas au départ que ma question fut aussi compliquée, plutôt la réponse.

    Encore mille mercis à tous pour votre contribution.
    Bonne fin de journée et bon weekend
    Cordialement
    René
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  4. #64
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonsoir,

    J'ai commencé un code en début d'après-midi, mais dont je n'ai pa eu encore le temps de poster,
    Je vois que c'est résolu, je le mettrai quand même dès que j'aurai accès à l'ordinateur.

    PS : Patrick tu ne m'as toujours pas répondu
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  5. #65
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    ton post22 chez moi visiblement ne tourne pas en boucle puisqu'après je peut sélectionner ailleurs mais par contre quand je veux fermer le fichier walouh!!! j'ai le cursor rond de seven qui tourne, qui tourne,, rrrrhhhhrrrhh pfiffff rrrrhhhhh piffff..........

    et ma dernière soluce elle est pas belle hein ??

    je te charge d y mettre une gestion sur un len en mod 2 =0

    Amusez vous bien
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #66
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Re Patrick, RENE14,

    Patrick : en effet ta dernière soluce et pal mal, mais il faudrait y mettre des gardes fous ... :

    PS : tout d'abord, je suis complètement d'accord avec Eric, sur le fait que la colonne incriminée doit être formatée au format Texte

    1 - dans le cas où tu tombes sur une cellule au format standard et que tu as une réf. commençant 0 ou 00 etc ..., ceux-ci vont disparaitre dans le résultat si la réf. est numérique.
    2 - Si tu veux modifier une réf. déjà écrite en sélectionnant la partie à remplacer/incriminer (donc les espaces peuvent être sélectionnés aussi et remplacer par ce que tu écris), ton code ne fonctionne plus pour remettre la réf. corrigée decker
    3 -Si tu supprimes la réf. dans la cellule, tu as une erreur qui survient
    4 - si le nb de lettres/chiffres est inférieur à 3 (pour je ne sais quel raison), ça plante

    Patrick, RENE14 :
    Pour ma part j'ai préféré continuer sur le code que j'avais fait en début d'après-midi et sécuriser les parties ci-dessus
    (dont le formatage se faisant à part dans le cas d'une cellule au format standard - je n'ai pas encore trouvé la solution pour l'intégrer dans un seul évènements)
    PS: en plus de l'avoir essayé sur mon Mac je l'ai testé sur PC aussi Excel 2010 => pas de souci chez moi
    Code Voilà le code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If Target.Column = 1 Then
            Target.NumberFormat = "@"
        End If
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Txt$, NewTxt$, i&, n&
        If Target.Column = 1 And Target.Count = 1 Then
            Txt = Target.Value: If InStr(Txt, " ") Then Txt = Replace(Txt, " ", "")
            n = Len(Txt) - 3
            If n >= 1 Then
                For i = n To 1 Step -2
                    If i = 1 Then NewTxt = Mid(Txt, i, 1) & " " & NewTxt Else NewTxt = Mid(Txt, i - 1, 2) & " " & NewTxt
                Next
                Target = Trim(NewTxt & Mid(Txt, n + 1))
            End If
        End If
    End Sub
    Voilà
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  7. #67
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    oui garde fou et gestion d'erreur je l'ai précisé dans ma réponse
    je n'ai donné qu'un moteur faisant le boulot je te laisse ce soin
    quand aux éventuelles reprises (sélection dans la chaine ca n'a pas été demandé et d'ailleurs ca me parait difficile de l'envisager dynamiquement comme le reste pour la simple et bonne raison qu'il n'existe pas d'évènement selection_sellength_change il faudrait un bouton ou une commande a cliquer ce qui rendrait le reste caduque autant tout faire alors avec cette commande et surtout ca ne correspondrait plus a la demande initiale

    réfléchi avant d'énumérer des possibilités qui n'existe pas ou peuvent pas et qui ne correspondrait pas a la demande
    ses terme ont été clairs
    en gros il tape et ca se fait tout seul le reste n'est pas possible avec une cellule

    il y a quand meme des possibilité qui pourraient s'aprocher de ce resultat pas completement mais pas loin
    c'est l'evenement double clik qui remetrait la chaine sans espaces et qui permettrait de selectionner une partie pour la modifier
    tu y pense maintenant j'y pense depuis le début
    je te laisse plancher sur ce point je te montrerais mon exemple demain
    après il faut être raisonnable c'est une mise en forme pas le programme tout entier
    ajoute déjà le test sur empty ca règlera l'erreur déclenchée

    rené14 attention ce n'est que le moteur ne le prends pas comme une solution finale il faut les gestions d'erreurs
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #68
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Coucou
    C'est bien, de rappeler le message de demande..
    Mais il convient alors de s'en rappeler également ceci, hein ...
    une macro qui modifierait automatiquement le format saisi en format texte
    Alors ? demande erronée (il semble que finalement oui) ?
    ou demande incomplète (il semble que finalement oui) ?
    Voilà voilà ...
    Bonne nuit
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  9. #69
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonsoir jacques
    non perso ca demande est claire maladroitement rédigé du sans doute au fait que rené ne métrise pas l'environnement VBA excel

    j'attends toujours des explications pour ton format(xxxxx,string"0" ,"#") je pensait en avoir compris le sens et le role de chaque argument mais les test avec des lettres me font penser que mon interprétation est erronée
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  10. #70
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    j'attends toujours des explications pour ton format(xxxxx,string"0" ,"#") je pensait en avoir compris le sens et le role de chaque argument mais les test avec des lettres me font penser que mon interprétation est erronée
    Quoi ? Comment aurais-je pu écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    format(xxxxx,string"0" ,"#")
    qui n'a aucun sens !!!!
    Je pense que tu te réfère à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Format(Range("A6").Value, "0" & String(12, "#"))
    Relis donc mon message. Il disait que le reste était facile à deviner.
    Tu n'en as deviné qu'une partie..
    Je ne veux pas alourdir une discussion que j'estime déjà bien trop encombrée pour une futilité.
    Amitiés
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  11. #71
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Patrick,
    sélection dans la chaine ca n'a pas été demandé et d'ailleurs ca me parait difficile de l'envisager dynamiquement
    il y a quand meme des possibilité qui pourraient s'aprocher de ce resultat pas completement mais pas loin
    c'est l'evenement double clik qui remetrait la chaine sans espaces et qui permettrait de selectionner une partie pour la modifier
    que fais ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If InStr(Txt, " ") Then Txt = Replace(Txt, " ", "")
    il initialise le texte déjà formaté après la correction, comme au départ (quand tu écris la 1ère fois) en enlevant tous les espaces, et repasse dans la moulinette pour le re-formater correctement

    as tu essayé de modifié une réf. avec mon dernier code ??

    PS : l'erreur est humaine, lorsque l'on écris dans un post un fichier excel, … etc , on peut se tromper, donc pouvoir corriger ce que l'on fait me parait normal, comme effacer une donnée (au lieu de planter - en plus si tu as plusieurs données à effacer je t'explique pas la galère)

    Edit :
    oui garde fou et gestion d'erreur je l'ai précisé dans ma réponse
    en effet tu la précisé juste au dessus de ta capture, mais ça ne permet pas de faire la correction d'une réf
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  12. #72
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    et voila maintenant la possibilité de corrigé ,supprimer, modifier
    si la chaine a un nombre pair de caractères (ce qui est incompatible avec ce projet) un message t'en averti
    utilisation de l'évènement double clik pour remettre la chaine sans espaces
    l'erreur du len( chaine)=0 et du cells.count a été corrigé aussi

    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
    20
    21
     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Column = 1 And Target.Cells.Count = 1 And Target.Value <> "" Then
            Application.EnableEvents = False
            Target.Value = Replace(Target.Value, " ", "")
        End If
        Application.EnableEvents = True
    End Sub
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim formatage$, chaine$, Fx#
        If Target.Cells.Count > 1 Then Exit Sub
        If Target.Column = 1 And Len(Target.Value) > 0 Then
            chaine = Target.Value
            If Len(Target.Value) Mod 2 = 0 And InStr(Target.Value, " ") = 0 Then MsgBox " il doit y a voir forcement un nombre impair de caracteres ": Exit Sub
            If InStr(chaine, " ") = 0 And Len(Target.Value) Mod 2 <> 0 Then
                Fx = (Len(chaine) / 2) - 1    'pour obtenir le nombre de tranches -1 parce que on vire la derniere car elle est de 3
                formatage = Application.Rept("@@ ", Round(Fx)) & "@@@"    'creation du pattern(modele de formatage
                Target.Value = Trim(Format(chaine, formatage))    'application du formatage
            End If
        End If
    End Sub
    Nom : demo.gif
Affichages : 217
Taille : 847,9 Ko

    c'est cela que tu voulais ryu
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  13. #73
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour à tous,

    Je vois que ma discussion attire encore des solutions.
    Mes références ne commenceront jamais par un zéro. Il n'y aura jamais moins de 13 caractères. Les références commencent soit par CN suivies de 11 ou 13 caractères numériques, O (O de Orange) suivies de 12 caractères numériques et en dernier une suite de 13 ou 15 caractères numériques, rien d'autres.

    Merci beaucoup pour vos contributions.

    Ps: j'ai modifié le code de Patrick en ajoutant une ligne qui empêche le bug si on efface le contenu de la cellule. J'ai fait plusieurs essais et je ne rencontre plus de soucis. A part si la référence débute par un zéro, mais cela ne risque pas d'arriver car il n'y a pas de référence commençant par zéro.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim formatage$, chaine$, Fx#
        If Target.Column = 1 And Target.Cells.Value = "" Then Exit Sub
         If Target.Column = 1 And Target.Cells.Count = 1 Then
            chaine = Target.Value
            If InStr(chaine, " ") = 0 Then
                 Fx = (Len(chaine) / 2) - 1 'pour obtenir le nombre de tranches -1 parce que on vire la derniere car elle est de 3
                formatage = Application.Rept("@@ ", Round(Fx)) & "@@@" 'creation du pattern(modele de formatage)
                Target.Value = Trim(Format(chaine, formatage)) 'application du formatage
            End If
        End If
    End Sub
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  14. #74
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Dans la zone A4:A178 de mon tableau, j'ai des références saisies, elles sont toutes écrites en format texte. Ces références ont ce format "CN 00 00 00 00 000"; "O0 00 00 00 00 000" et "00 00 00 00 00 000".
    Dans la zone F25:F97, il y a une zone de liste dans chaque cellule, elles font appel aux références saisies dans A4:A178.

    J'aimerai mettre en place, si cela est possible bien entendu, une macro qui modifierait automatiquement le format saisi en format texte.
    Par exemple : je saisie CN01010203004, je souhaite que le format soit en texte CN 01 01 02 03 004 dans la cellule. Idem pour les autres formats (O102030405006 - O1 02 03 04 05 006; 0000000000000 - 00 00 00 00 00 000)
    Mes références ne commenceront jamais par un zéro. Il n'y aura jamais moins de 13 caractères. Les références commencent soit par CN suivies de 11 ou 13 caractères numériques, O (O de Orange) suivies de 12 caractères numériques et en dernier une suite de 13 ou 15 caractères numériques, rien d'autres.
    A part si la référence débute par un zéro, mais cela ne risque pas d'arriver car il n'y a pas de référence commençant par zéro.
    Chercher les causes de perte de temps, donc ...
    Y compris les "efforts" pour passer au format texte (forcément alors imposé automatiquement)
    Combien de pages et de messages, déjà ?
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  15. #75
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    rené la gestion du vide y était déjà dans mon dernier post #72
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Target.Column = 1 And Len(Target.Value) > 0 Then
    j'ai aussi apporté la possibilité de revenir dessus en cas de besoins de modification d'une partie ou une autre

    d'autant plus que ceci me parait pas très catholique dans cet exercice
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    And Target.Cells.Value = "" 
    au mieux j'aurais mis juste après les déclarations de variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if target(1).value="" then exit sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  16. #76
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Je suis désolé si je vous ai fais perdre du temps. Pour celui qui demande, la vision du résultat est probante, mais pas toujours facile à exprimer au prime abord. J'avais commencé il y a quelque temps à me familiariser avec VBA mais de graves ennuis de santé m'ont obligé à revoir ma copie depuis les fondamentaux.

    Je vous remercie encore mille fois et vous réitère mes excuses pour mon manque de clarté dans ma demande initiale.

    René
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  17. #77
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    de rien
    et bon rétablissement
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  18. #78
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Re,

    C'est clair Jacques, avec les infos disséminées sur les 4 pages au lieu de tout avoir sur le 1er post …

    RENE14 : Pas de souci, ça peut arriver, mais au moins tu sais ce que tu devra faire la prochaine fois => donner des explications claires et exhaustives, avec tout les tenants et aboutissants et le but final; et ce, dès le 1er post
    Donc bien prendre le temps de rédiger en se relisant et en se posant les bonnes questions afin de savoir si tout est clair et que rien n'a été omis
    je te souhaite un bon rétablissement

    Patrick,
    désolé pas eu le temps de te répondre (seul avec les enfants)
    j'ai vu qq petits truc sur ton code en post #72 mais bon on va pas pinaillé;
    pour faire court, j'ai fait un mixte de ton code (qui est déjà bien ) avec le mien et les dernières infos (on considère que la colonne est déjà au format texte)
    Code ce qui donne : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim formatage$, chaine$, Fx#
        If Target.Column = 1 And Target.Count = 1 Then
            chaine = Target.Value: If chaine = "" Then Exit Sub Else If InStr(chaine, " ") Then chaine = Replace(chaine, " ", "")
            If Len(chaine) = 13 Or Len(chaine) = 15 Then
                Fx = (Len(chaine) / 2) - 1    'pour obtenir le nombre de tranches -1 parce que on vire la derniere car elle est de 3
                formatage = Application.Rept("@@ ", Round(Fx)) & "@@@"    'creation du pattern(modele de formatage
                Target.Value = Trim(Format(chaine, formatage))    'application du formatage
            Else
                MsgBox "Nombres de caractères/chiffres incorrects": Application.Goto Target: Exit Sub
            End If
        End If
    End Sub
    Je le vois plutôt comme cela et même pour la correction qui est plus simple de cette manière
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  19. #79
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    je n'ai pas testé mais je crois deviner que tu utilise "chaine" pour ne pas avoir le retour de l'évènement change c'est ca
    je suis pas sur que ca fonctionne je vais tester

    et c'est pas 13 ou 15 mais 13,15 ou 17 les 13 pouvant avoir une lettre ou pas
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  20. #80
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    ok j'ai testé ca fonctionne aussi mais j'ai virer le if len 13 ou 15 et rempler par mon code original
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if  len(chaine) mod 2<>0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim formatage$, chaine$, Fx#
        If Target.Column = 1 And Target.Count = 1 Then
            chaine = Target.Value: If chaine = "" Then Exit Sub Else If InStr(chaine, " ") Then chaine = Replace(chaine, " ", "")
            If Len(chaine) Mod 2 <> 0 Then
                Fx = (Len(chaine) / 2) - 1    'pour obtenir le nombre de tranches -1 parce que on vire la derniere car elle est de 3
                formatage = Application.Rept("@@ ", Round(Fx)) & "@@@"    'creation du pattern(modele de formatage
                Target.Value = Trim(Format(chaine, formatage))    'application du formatage
            Else
                MsgBox "Nombres de caractères/chiffres incorrects": Application.Goto Target: Exit Sub
            End If
        End If
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. [SP-2007] Colonne au format "nombre" avec des espaces ?
    Par Faro dans le forum SharePoint
    Réponses: 2
    Dernier message: 15/05/2009, 08h48
  2. [XL-2003] format conditionnel avec vba
    Par didinette56 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 13/05/2009, 15h37
  3. Requête : Format Nombre avec 14 décimales !
    Par PascaLem dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 28/03/2009, 12h06
  4. Problème avec un format nombre en VBA Excel
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/11/2008, 10h44
  5. [Format]nombres avec des 0
    Par zozolh2 dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 01/06/2004, 08h43

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