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 "Control nom capteurs" [XL-2019]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Mai 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Mai 2023
    Messages : 3
    Par défaut Macro "Control nom capteurs"
    Bonjour,

    Je vous solicite car j'ai cette problématique (Photo en pièce jointe):

    une colonne A comprenant des noms d'outils EL1, EL2 et EL3
    une colonne B comprenant le(s) capteur(s) de l'outil
    En principe, le capteur comprend le nom de l'outil présent à sa gauche (ex:l'outil EL3 dispose de 4 capteurs BR_EL, CR_EL3, ZAC_EL3 & ZA_EL3)

    J'ai surligné en jaune 3 capteurs n'ayant pas de nom adéquat. Il me faudrait une macro qui indique en colonne C si le nom est OK où NOK.

    Pourriez-vous m'aider ? J'espère avoir été le plus clair possible.

    Merci d'avance.

    Nom : 2023-05-02.png
Affichages : 143
Taille : 7,5 Ko

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Salut, voici une macro qui fait le job:

    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
    Sub Verification()
        Dim lastRow As Long
        lastRow = Cells(Rows.Count, "A").End(xlUp).Row ' Trouver la dernière ligne de la colonne A
        Dim i As Long
        For i = 2 To lastRow ' Boucler sur toutes les lignes de la colonne A à partir de la ligne 2
            If Not IsEmpty(Cells(i, "A")) Then ' Vérifier que la cellule en colonne A n'est pas vide
                Dim valeur As String
                valeur = Cells(i, "A").Value ' Récupérer la valeur de la cellule en colonne A
                Dim j As Long
                For j = 0 To 3 ' Boucler sur les 4 cellules en colonne B à côté de la cellule en colonne A
                    Dim cell As Range
                    Set cell = Cells(i + j, "B")
                    If cell.Value Like "*" & valeur Then ' Vérifier si la valeur de la cellule en colonne B se termine par la valeur de la cellule en colonne A
                        cell.Offset(0, 1).Value = "OK" ' Afficher "OK" dans la cellule en colonne C à côté de la cellule en colonne B
                    Else
                        cell.Offset(0, 1).Value = "NOK" ' Afficher "NOK" dans la cellule en colonne C à côté de la cellule en colonne B
                    End If
                Next j
            End If
        Next i
    End Sub

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    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 : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Vous avez oublié de préciser si les cellules de la colonne A étaient fusionnées ou si certaines étaient vides ce qui change complètement la manière d'aborder le code
    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

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 248
    Par défaut
    Hello,
    A noter qu'en VBA on peut avoir la valeur d'une cellule fusionnée en utilisant MergeArea.Cells(1,1) qui va chercher la valeur dans la première cellule des cellules fusionnées.
    Ainsi le code de Franc peut se réduire à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Verification2()
        Dim i As Long, lastRow As Long
        Dim NomOutil As String, CapteurOutil As String
        lastRow = Cells(Rows.Count, "B").End(xlUp).row
        For i = 2 To lastRow
            NomOutil = Range("A" & CStr(i)).MergeArea.Cells(1, 1).Value
            CapteurOutil = Range("B" & CStr(i)).Value
            If CapteurOutil Like "*" & NomOutil Then
               Range("C" & CStr(i)).Value = "OK"
            Else
               Range("C" & CStr(i)).Value = "NOK"
            End If
        Next i
    End Sub
    A noter que je vais chercher la dernière ligne dans la colonne B car dans la colonne A avec les cellules fusionnées elle est fausse.
    L'utilisation de cellules fusionnées n'est pas une bonne chose car elle peut empêcher l'emploi de formules qui aurait pu être dans le cas présent quelque chose comme :
    =ESTNUM(CHERCHE(A2;B2;NBCAR(B2)-NBCAR(A2)+1))
    Ami calmant, J.P

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    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 : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Personnellement, j'utilise la propriété CurrentRegion pour connaître la plage de cellules à traiter
    Mon approche était celle-ci au cas où l'une des cellules de la colonne A ne serait pas fusionnée contrairement aux autres.
    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
    Sub T()
      Dim rng As Range
      Dim r As Long
      Dim v1 As String, v2 As String
      Set rng = ActiveSheet.Range("A1").CurrentRegion
      With rng
        For r = 2 To .Rows.Count
         If .Cells(r, 1).MergeCells Then
            v1 = .Cells(r, 1).MergeArea.Cells(1, 1).Value
          Else
            v1 = .Cells(r, 1).Value
         End If
          v2 = .Cells(r, 2).Value
         .Cells(r, 3).Value = IIf(Right(v2, Len(v1)) <> v1, "NOK", "OK")
        Next
        Set rng = Nothing
      End With
    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

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Mai 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Mai 2023
    Messages : 3
    Par défaut
    Bonjour à tous,

    Tout d'abord, merci pour votre aide

    J'ai utilisé la solution de Franc.

    Les cellules de la colonnes A étaient bien fusionnées.

    Bonne journée à tous

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 248
    Par défaut
    Citation Envoyé par Max-du-56 Voir le message
    J'ai utilisé la solution de Franc.
    Attention la solution de Franc ne fonctionne pas si il n'y pas exactement 4 lignes capteur par outil.

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

Discussions similaires

  1. problème de macro-quoting
    Par jlp65 dans le forum Macro
    Réponses: 3
    Dernier message: 08/02/2018, 14h48
  2. Execution macro quoting
    Par lhonolulu dans le forum Macro
    Réponses: 1
    Dernier message: 11/03/2014, 15h28
  3. problème de macro quoting
    Par RemiBousquet dans le forum Macro
    Réponses: 2
    Dernier message: 10/02/2010, 08h40
  4. [OpenOffice] [Macro OOBasic] controle Tree dans dialogue & DOM Parser.
    Par azerr dans le forum OpenOffice & LibreOffice
    Réponses: 0
    Dernier message: 21/11/2007, 09h13
  5. macro prédéfinie pour nom de fonction
    Par deb75 dans le forum C
    Réponses: 14
    Dernier message: 09/02/2007, 23h57

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