XL 2019 format conditionnel selon texte puis effacer toutes les lettres de la cellule

bluesky12000

XLDnaute Nouveau
Bonjour à tous,

J'ai un gros fichier Excel avec à chaque fois en ligne 21 toutes les 4 colonnes à partir de C et sur tous les onglets une cellule de texte avec plusieurs sortes de valeurs
composées de nombre entiers ou décimaux (dixièmes ou centièmes) avec des lettres g ou ml.

Le problème est que tous les calculs sont faux en C22 puisque les cellules en B21 sont inscrites au format texte.
Je souhaiterais donc à l'aide de VBA lire la cellule en B21, si elle contient un g la mettre sous format personnalisé 0 " g" si elle contient un m la mettre sous format personnalisé 0" mL". Ensuite effacer toutes lettres de la cellule.

Ma seconde requête est comment indiquer en VBA que l'on veut appliquer ce format à toutes les cellules non vides en +4 sur la ligne par rapport à B ou C., puis en +4 par rapport à cette dernière cellule.

Merci beaucoup pour votre aide.

Ligne/colonneB;F;J; ...C;G;K ...
2125 g (format personnalisé 0 " g" ou 0 " mL"Prix pour 1 g ou ml (texte automatique selon le format de la cellule en colonne B,F,J)
2210,00€=B22/B21 (format monétaire 0,00€)
 
Solution
Bonjour,

Dans votre fichier exemple, je ne trouve pas d'item qui ne soit déjà corrigé. Pas moyen de tester.

Pour la recherche d'un caractère dans une chaîne vous avez la fonction InStr qui renvoie la position d'une chaîne dans une autre.
https://docs.microsoft.com/fr-fr/of...tFrameworkMoniker-Office.Version=v16)&rd=true

Exemple :
VB:
If InStr(1, Cells(3, 21), "g", vbTextCompare) > 0 Then
    ' Cells(3,21) contient g ou G
Else
    ' Cells(3,21) ne contient ni g ni G
End if

L'opérateur de comparaison Like peut également vous aider...

bluesky12000

XLDnaute Nouveau
Bonjour Roblochon,

Merci pour votre aide. J'ai réussi à faire la partie mise en forme conditionnelle selon la présence de la lettre g ou non dans la cellule. Il me reste à effacer tout texte de la cellule maintenant et appliquer ce macro sur toute les cellules similaires que ce soit dans cette feuille ou dans les autres toutes les 4 colonnes.

Merci encore.

VB:
Public PrésenceCaractère As String
Option Explicit

Public Sub ChercheCaractère(TexteAnalysé As String, CaractèreRecherché As String)

Dim T As Byte

PrésenceCaractère = ""

For T = 1 To Len(TexteAnalysé)
If Mid(UCase(TexteAnalysé), T, 1) = UCase(CaractèreRecherché) Then
PrésenceCaractère = CaractèreRecherché
End If
Next T

End Sub
Sub Analyse()
Call ChercheCaractère(Cells(3, 21), "g")
If PrésenceCaractère = "g" Then
Selection.NumberFormat = "0"" g"""

Else
Selection.NumberFormat = "0"" mL"""
End If
End Sub
 

Pièces jointes

  • Exemple.xlsm
    18.9 KB · Affichages: 8

Hasco

XLDnaute Barbatruc
Bonjour,

Dans votre fichier exemple, je ne trouve pas d'item qui ne soit déjà corrigé. Pas moyen de tester.

Pour la recherche d'un caractère dans une chaîne vous avez la fonction InStr qui renvoie la position d'une chaîne dans une autre.
https://docs.microsoft.com/fr-fr/of...tFrameworkMoniker-Office.Version=v16)&rd=true

Exemple :
VB:
If InStr(1, Cells(3, 21), "g", vbTextCompare) > 0 Then
    ' Cells(3,21) contient g ou G
Else
    ' Cells(3,21) ne contient ni g ni G
End if

L'opérateur de comparaison Like peut également vous aider.
https://docs.microsoft.com/fr-fr/of...y-language/like-operator-microsoft-access-sql

Pour ce qui est de boucler sur les colonnes par 4, un exemple

Code:
Sub BouclerColonnes()
    Dim Colonne As Long
    With ThisWorkbook.Sheets("Produits 1")
        '
        ' Parcourir les cellules de 4 colonnes en 4 colonnes
        ' de la colonne B (2) au nombre de colonnes comprisent dans l'intersection
        ' de la ligne 22 entière et de la plage de cellules utilisées dans la feuille
        For Colonne = 2 To Intersect(.Rows(22), .UsedRange).Columns.Count Step 4
           ' Affiche la valeur dans la fenêtre d'exécution (CTRL+G pour l'ouvrir)
            Debug.Print .Cells(22, Colonne).Value
        Next

    End With
End Sub

Cordialement
 

Discussions similaires

Haut Bas