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

Excel Discussion :

Macro : écrire texte si colonne contient [XL-2016]


Sujet :

Excel

  1. #1
    Membre du Club
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 156
    Points : 51
    Points
    51
    Par défaut Macro : écrire texte si colonne contient
    Bonjour à toutes et tous,

    Je souhaite une macro qui balaye ma colonne A. Si dans ma colonne A la macro trouve des cellules qui contiennent le mot "*AVIS*" alors dans les cellules en face à droite (en colonne C), ça doit écrire OK, sinon PAS OK.

    J'espère être claire

    Merci beaucoup pour votre aide !

    J'ai pourtant fait pas mal de macro, votre site m'a beaucoup aidé, mais là, je ne sais pas pourquoi, je bug lol

    Merci encore

    Mél.

  2. #2
    Membre émérite
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 055
    Points : 2 518
    Points
    2 518
    Par défaut
    Bonjour

    pourquoi une macro, une formule suffit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ESTNUM(CHERCHE("AVIS";A2));"OK";"Pas OK")
    Stéphane

  3. #3
    Membre du Club
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 156
    Points : 51
    Points
    51
    Par défaut
    Bonjour,

    Merci beaucoup pour votre réponse et votre intérêt à mon soucis

    Je ne souhaite pas une formule car ce n'est pas valable pour toutes les lignes. Il y a des valeurs en colonne C qui sont introduites déjà par d'autres procédures VB.
    (je précise que c'est dans le cadre professionnel)

    La macro que je souhaite réaliser serait à inscrire en fin de procédure existante pour remplacer les valeurs précédemment introduites.

    J'espère est compréhensible :/

    Merci

  4. #4
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 951
    Points : 9 280
    Points
    9 280
    Par défaut
    Hello,
    Citation Envoyé par Mél3790 Voir le message
    Je ne souhaite pas une formule car ce n'est pas valable pour toutes les lignes. Il y a des valeurs en colonne C qui sont introduites déjà par d'autres procédures VB.
    Si on fait ce que tu nous décris , en colonne C il ne devrait plus y avoir que des OK ou des PAS OK donc les valeurs introduites en C sont alors écrasées ?

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #5
    Membre du Club
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 156
    Points : 51
    Points
    51
    Par défaut
    Par ma première procédure il y a écrit 'À valider'
    Donc la macro doit écraser ce mot et écrire OK ou Pas OK en fonction des valeurs en colonne A

  6. #6
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 951
    Points : 9 280
    Points
    9 280
    Par défaut
    Hello,
    voici une macro qui devrait faire l'affaire.
    Le principe :
    On récupère les valeurs de la colonne A (utilisation de la plage nommée Data) dans un tableau
    On crée un second tableau de la taille du premier tableau
    On balaie les valeurs du premier tableau en les comparant avec l'opérateur Like à "*AVIS*"
    L'opérateur logique LIKE est un opérateur d'égalité strictement réservé aux chaines de type texte. Sa particularité est de pouvoir comparer des valeurs à un masque composé de caractères de substitution. Cet opérateur peut être utilisé avec SQL, VBA ou encore dans des expressions."
    Si il y a égalité on met OK dans le deuxième tableau sinon PAS OK.
    Quand on a fini le balayage on transfert le deuxième tableau dans une plage de même taille que Data mais en colonne C ( Offset(0,2) ) .
    le code :
    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
    Sub ChercheAvis()
    Dim myArr As Variant, elem As Variant, x As Integer
    myArr = Sheets("Feuille1").Range("Data")
    ReDim arrayData(1 To UBound(myArr), 1 To 1) As Variant
    x = 1
    For Each elem In myArr
        If UCase(elem) Like "*AVIS*" Then
             arrayData(x, 1) = "OK"
        Else
             arrayData(x, 1) = "PAS OK"
        End If
        x = x + 1
    Next elem
    Sheets("Feuille1").Range("Data").Offset(0, 2).Value = arrayData 'Offset(0,2) -> colonne C
    End Sub
    Le résultat :
    Nom : ChercheAvis.gif
Affichages : 43
Taille : 118,5 Ko

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 765
    Points : 28 623
    Points
    28 623
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Une autre proposition en écrivant en colonne C, la formule proposée pas Stéphane

    Dans cet exemple la première ligne contient les titres et on suppose que la colonne A est remplie de la première à la dernière ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub t2()
      Const FormulaText = "=IF(ISNUMBER(SEARCH(""AVIS"",A2)),""OK"",""Pas OK"")"
      Dim rng As Range
      Set rng = ActiveSheet.Range("A1").CurrentRegion
      With rng
       With .Offset(1, 2).Resize(.Rows.Count - 1, 1)
       .Formula = FormulaText ' Ecriture de la formule sur l'ensemble de la colonne C
       .Value = .Value        ' Suppression de la formule au profit du résultat
       End With
      End With
      Set rng = Nothing
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Membre du Club
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 156
    Points : 51
    Points
    51
    Par défaut
    Bonjour

    Vos solutions sont parfaites, je vais l'adapter par rapport à ma première procédure, vous êtes géniaux, merci beaucoup beaucoup beaucoup !! Trop fort !!

    A bientôt !!!!!!

    Mél.

  9. #9
    Membre du Club
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 156
    Points : 51
    Points
    51
    Par défaut
    C'est re moi

    Je reviens sur le sujet pour un petit + svp

    Dans ma colonne A si like "*PV*" alors en colonne C ce qui est écrit ne doit pas être écrasé.

    Comment vous feriez en reprenant la macro :

    Sub ChercheAvis()
    Dim myArr As Variant, elem As Variant, x As Integer
    myArr = Sheets("Voiture").Range("Data2")
    ReDim arrayData(1 To UBound(myArr), 1 To 1) As Variant
    x = 1
    For Each elem In myArr
    If UCase(elem) Like "*AVIS*" Then
    arrayData(x, 1) = "OK"
    ElseIf UCase(elem) Like "*BPM*" Then
    arrayData(x, 1) = "PAS OK"
    Else
    End If
    x = x + 1
    Next elem
    Sheets("Voiture").Range("Data2").Offset(0, 2).Value = arrayData
    End Sub

  10. #10
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 951
    Points : 9 280
    Points
    9 280
    Par défaut
    Dans ce cas on ne peut plus passer par la solution plage tableau. Il faut balayer les cellules directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub ChercheAvis()
    Dim cellule As Variant
    Application.ScreenUpdating = False
    For Each cellule In Sheets("Feuille1").Range("Data")
        If UCase(cellule.Value) Like "*AVIS*" Then
             cellule.Offset(0, 2).Value = "OK"
        ElseIf UCase(cellule.Value) Like "*BPM*" Then
             cellule.Offset(0, 2).Value = "PAS OK"
        End If
    Next cellule
    Application.ScreenUpdating = True
    End Sub
    Nom : ChercheAvis2.gif
Affichages : 43
Taille : 21,2 Ko
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  11. #11
    Membre du Club
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 156
    Points : 51
    Points
    51
    Par défaut
    Et bien parfait, ça fonctionne à la perfection, trop balaise !

    merciiiiii !

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 14/09/2018, 17h18
  2. Réponses: 6
    Dernier message: 08/11/2016, 23h34
  3. [XL-2010] VBA comment écrire : colonne contient une valeur
    Par renartichaud dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 08/07/2014, 11h36
  4. [XL-2007] Msgbox avant la fermeture si une colonne contient une valeur texte précise
    Par Thomas.lp dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/02/2013, 12h26
  5. Réponses: 1
    Dernier message: 17/02/2013, 11h16

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