Mise en forme conditionnelle avec formule

C@thy

XLDnaute Barbatruc
Re : Mise en forme conditionnelle avec formule

Hihi vous êtes de joyeux lurons tous les deux.

Marcel ou Jacky, je ne peux pas ouvrir ton fichier, peux-tu le mettre en pièce jointe?

Donc, je reprends, Gérard tu as fait un super boulot, j'adore ton replace. Marcel ou Jacky, tu as sans doute fait du bon boulot aussi, mais je ne peux pas le vérifier.

Merci à vous deux.

C@thy
 

C@thy

XLDnaute Barbatruc
Re : Mise en forme conditionnelle avec formule

Ca marche très bien, Marcel-Jacky:)
j'ai combiné avec les espaces de job75 alias Gérard (ou l'inverse!) :
dest(, 3 + i) = s(i)
dest(, 3 + i) = InsertEspace(dest(, 3 + i))

Le résultat est là...

Un grand MERCI à vous deux pour cette... usine à gaz:)... qui fonctionne.

Youpiiiiiiiii!

C'est super, merci beaucoup.

Bises à vous deux et bonne soirée

C@thy
 

job75

XLDnaute Barbatruc
Re : Mise en forme conditionnelle avec formule

Bonjour C@thy, hello Jacky,

Je reviens sur ce fil malgré l'usine à gaz pour t'éviter de faire des bêtises :rolleyes:

Si tu utilises le code de Marcel32 il ne faut pas utiliser mon code car le sien insère des espaces.

Par ailleurs ce code est peut-être plus "limpide" :

Code:
Function Traitement(t As String)
Dim a, L As Integer, i As Integer
t = Trim(t) 'supprime les espaces à gauche et à droite
Select Case Mid(t, 7, 1)
  Case 1
    a = Array(7, 8, 9, 13, 15, 17)
    t = Nombre(t) 'traitement du nombre
  Case 2: a = Array(7, 8) 'et non pas 7, 8, 9...
  Case Else: Traitement = t: Exit Function
End Select
'---insertion d'espaces---
L = Len(t)
For i = UBound(a) To 0 Step -1
  If a(i) <= L Then t = Application.Replace(t, a(i), 0, " ") 'fonction REMPLACER
Next
Traitement = t
End Function

Function Nombre(t As String)
Dim n As Variant, c As Byte
n = Val(Right(t, 8)) / 10
c = Asc(Right(t, 1))
Select Case c
 Case 233, 123: n = Format(n, "+0.0") & 0 'é ou {
 Case 232, 125: n = Format(n, "-0.0") & 0 'è ou }
 Case 65 To 73: n = Format(n, "+0.0") & Chr(c - 16) 'A à I
 Case 74 To 82: n = Format(n, "-0.0") & Chr(c - 25) 'J à R
 Case Else: Nombre = t: Exit Function
End Select
Nombre = Left(t, Len(t) - 8) & n
End Function
Deux remarques :

- le traitement des nombres n'a lieu que pour le cas "1"

- pour le cas "2" l'insertion d'espaces n'a lieu que pour 7, 8 et non pas pour 7, 8, 9.

Fichier (3).

A+
 

Fichiers joints

Marcel32

XLDnaute Accro
Re : Mise en forme conditionnelle avec formule

Je viens de voir que j'avais fait un copier/coller et oublié de modifier une valeur dans mon bout de code...

Du coup les résultats sont erronés pour les lettres allant de J à R, pour lesquelles il fallait en fait mettre :
Valeur = "-" & Left(Valeur, 7) & Chr(Asc(Rcode) - 29)
 

job75

XLDnaute Barbatruc
Re : Mise en forme conditionnelle avec formule

Hello jacky,

Pourquoi 29 :confused: Asc("J") - Asc("1") donne 25.

C'est ce nombre que j'utilise au post #86.

A+
 

Marcel32

XLDnaute Accro
Re : Mise en forme conditionnelle avec formule

Oui, c'est bien 25 et non 29 comme je l'ai écrit dans mon post précédent, mais surtout ce n'est pas 16 comme écrit dans le code. ;)

Ou, de façon plus simple pour être sûr de ne pas se tromper de A à R :
Valeur = "-" & Left(Valeur, 7) & Chr(48 + (Asc(Rcode) - 1) Mod 9)
 
Dernière édition:

C@thy

XLDnaute Barbatruc
Re : Mise en forme conditionnelle avec formule

Merci les amis! Deux usines à gaz pour le prix d'une!

Je vous dois une fière chandelle ça marche d'enfer!

Mille bises

C@thy
 

C@thy

XLDnaute Barbatruc
Re : Mise en forme conditionnelle avec formule

Y'a juste un tout petit truc : maintenant avec mon import, grâce à Jacky:) je ne mets plus DOS avant le n° de fichier, je l'importe en texte, mais du coup je suis obligée de rajouter un format texte à la colonne A sinon j'ai la notation scientifique...
J'en ai profité pour rajouter aussi la largeur de colonne autofit

Un très très grand MERCI

Bises et bonne journée

C@thy
 

C@thy

XLDnaute Barbatruc
Re : Mise en forme conditionnelle avec formule

Une petite observation :
la macro de Job75 (Gérard) fonctionne mieux que celle de Marcel32 (Jacky) pour les nombres négatifs car au lieu d'un chiffre dans les négatifs comme dernier caractère je récupère un @ ou > ou < ou = enfin des trucs comme ça...

Du coup celle de Gérard est adoptée... mais sans Jacky on ne serait peut-être pas allé aussi loin...

P.S. la macro de Gérard supprime aussi les 0 non significatifs des montants, et les espaces à la fin, mais ça, c'est un plus qui n'était pas obligatoire...

Donc, encore une fois, un immense Merciiii à tous les deux

C@thy
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Mise en forme conditionnelle avec formule

Bonjour C@thy, Jacky, le forum,

Y'a juste un tout petit truc : maintenant avec mon import, grâce à Jacky:) je ne mets plus DOS avant le n° de fichier, je l'importe en texte, mais du coup je suis obligée de rajouter un format texte à la colonne A sinon j'ai la notation scientifique...
Je ne comprends pas trop ce que tu fais avec ton fichier texte.

Si tu fais une extraction à partir d'un fichier .txt dont la 2ème colonne est toujours constituée de 17 chiffres, le format "Texte" ne va pas.

Il faut le format "00000000000000000" avec ce code :

Code:
Sub Extraction()
'-------------
'---données--
source = ThisWorkbook.Path & "\Source.txt" 'à adapter
Set F1 = Workbooks.Open(source).Sheets(1) 'ouverture du fichier source
Set F2 = Feuil2 'CodeName
F2.[A:A].NumberFormat = String(17, "0") 'le format Text "@" ne va pas
Extrais les fichiers zippés joints dans le même répertoire, par exemple le bureau.

A+
 

Fichiers joints

C@thy

XLDnaute Barbatruc
Re : Mise en forme conditionnelle avec formule

OK Merci Gérard, mais en fait texte ou nombre pour moi, peu importe, c'est un code dossier.

OK je rectifie selon ce que tu proposes

C@thy
 

C@thy

XLDnaute Barbatruc
Re : Mise en forme conditionnelle avec formule

Hello,

sur les vraies données, l'import se fait avec la notation scientifique, du coup le format avec 17 0 ne peut plus rien faire
du coup, voici ma macro d'import :
Code:
Dim F1 As Worksheet, F2 As Worksheet, code$
Dim Pnom%, Lnom%, Pgrade%, Lgrade%, P As Range, x$, lig&
Dim c As Range, dest As Range, dossier$, s, i%, y$, c1 As Range
Dim Fichier As Variant
Dim Ka As Workbook, Extract As Workbook
 '---données--
Set Extract = ThisWorkbook
Set F1 = Feuil1 'CodeName
Set F2 = Feuil2 'CodeName
'récupération des données du .txt
 Fichier = Application.GetOpenFilename _
 (Title:="Ouvrir", _
  filefilter:="Text (*.txt),*.txt")

 If Fichier = False Then
    MsgBox "Pas de fichier sélectionné.", , "Microsoft"
    Exit Sub
 Else
        Workbooks.OpenText Filename:=Fichier, _
        Origin:=xlMSDOS, StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array( _
        Array(0, 1), Array(3, 2), Array(20, 1), Array(28, 1), Array(30, 1)), _
        TrailingMinusNumbers:=True
With ActiveWorkbook
   If LCase(Right(.Name, 4)) = ".txt" Then 'sécurité
     Application.DisplayAlerts = False 'si le fichier .xlsx existe déjà
     .SaveAs Left(.Name, Len(.Name) - 4), 51 '51 => format .xlsx
   End If
 End With
 Set Ka = ActiveWorkbook
 Range("A1:E" & Range("A" & Rows.Count).End(xlUp).Row).Select
      Selection.Copy
  Extract.Activate
  F1.Activate
  Range("A1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Ka.Close
 End If
End Sub
C@thy
 

Marcel32

XLDnaute Accro
Re : Mise en forme conditionnelle avec formule

la macro de Job75 (Gérard) fonctionne mieux que celle de Marcel32 (Jacky) pour les nombres négatifs car au lieu d'un chiffre dans les négatifs comme dernier caractère je récupère un @ ou > ou < ou = enfin des trucs comme ça...
Oui, c'est ce que j'ai expliqué dans mes deux posts précédents, où je donnais aussi le correctif (pour les lettres J à R, mettre 25 au lieu de 19). ;)



mais sans Jacky on ne serait peut-être pas allé aussi loin...
C'est gentil, mais ce n'est pas la réalité.
Job75 est mille fois plus fort que moi !



P.S. la macro de Gérard supprime aussi les 0 non significatifs des montants, et les espaces à la fin, mais ça, c'est un plus qui n'était pas obligatoire...
J'avais même cru comprendre qu'il ne fallait surtout pas changer le nombre de caractères (à part ajouter des espaces).



Donc, encore une fois, un immense Merciiii à tous les deux
De rien. ;)


@+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Mise en forme conditionnelle avec formule

Re,

En fait ce que j'ai présenté au post #93 ne va pas.

Avec des nombres en 2ème colonne du fichier source, on ne peut pas récupérer les 16ème et 17ème chiffres.

Ces chiffres seront toujours zéro après extraction, car Excel conserve au maximum 15 chiffres significatifs.

Regarde le numéro de dossier de MACHIN SOPHIE.

A+
 

job75

XLDnaute Barbatruc
Re : Mise en forme conditionnelle avec formule

Re,

En conséquence de ce qui précède, il faut "DOS" devant les numéros des dossiers dans le fichier source.

Ce fichier est copié tel quel en 1ère feuille.

Dans la 2ème feuille il est facile de supprimer "DOS" :
Code:
'-----------
    dest = Mid(dossier, 4) 'suppression de "DOS"
Fichiers (4).

A+
 

Fichiers joints

Marcel32

XLDnaute Accro
Re : Mise en forme conditionnelle avec formule

Y'a juste un tout petit truc : maintenant avec mon import, grâce à Jacky:) je ne mets plus DOS avant le n° de fichier, je l'importe en texte, mais du coup je suis obligée de rajouter un format texte à la colonne A sinon j'ai la notation scientifique...
Déjà c'est bizarre car ça devrait être la colonne B et non la colonne A.

En suite, si tu fais comme je t'ai expliqué les deux fois précédentes où le problème du format des données de la deuxième colonne a été abordé, alors comme je l'ai dit ces deux fois tu n'as pas besoin de formater la colonne puisque c'est lors de l'importation du fichier que tu précises que cette colonne est du texte.

Il serait peut-être bien de tout remettre à plat :
- Quel est le format exact du fichier texte à importer ? Autrement dit, qu'est-ce qui fait que tu obtiens 5 colonnes après importation dudit fichier ? Y a-t-il un séparateur particulier (genre tabulation ou espace) dans le fichier texte, ou est-ce toi qui délimite les colonnes en fonction du nombre de caractères de chacune ???
- As-tu différentes possibilités d'exportation des données vers le fichier texte ?
- As-tu un exemple de fichier texte à proposer ?
- Veux-tu que l'importation du fichier texte se fasse par macro ?

Je pose ces questions simplement parce qu'au départ tu ne voulais pas de macros je crois mais juste une MFC, et tu finis par te retrouver avec une petite usine à gaz qui fait tout par macro. ;)

Allez, courage, je suis sûr que tu n'es plus très loin du but. :cool:
 

job75

XLDnaute Barbatruc
Re : Mise en forme conditionnelle avec formule

Bonjour C@thy, Jacky,

Déjà c'est bizarre car ça devrait être la colonne B et non la colonne A.
Même si l'on met la colonne B de la 1ère feuille au format texte ça ne change rien.

Le simple fait d'ouvrir (en VBA) le fichier source fait perdre les 16ème et 17ème chiffres des numéros des dossiers.

C'est ce que j'ai expliqué au post #97.

Bonne journée.
 

Discussions similaires


Haut Bas