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 :

VBA - Comment faire une condition [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Par défaut VBA - Comment faire une condition
    Bonjour,
    je travaille sur un projet permettant de modifier un fichier afin de le rendre plus ergonomique.
    Pour cela je doit faire appel au Macro. Cette Macro doit permettre de créer une ligne supplémentaire et de transférer des donnés sur la ligne précédente dans cette nouvelle ligne sur l'ensemble du document (CF PJ pour mieux comprendre) à condition qu'il y ai un R, un C ou un F en bout de la ligne.

    Après deux jours de travail acharné, je n'ai pas bougé d'un iota.
    Pouvez-vous m'aider SVP ?

    Merci par avance.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour chalou33,

    Hum... pourtant, ce que tu demandes est facilement trouvable sur le net.
    Je te donne le début :
    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
    Option Explicit
     
    Sub chalou33()
    Dim oRng As Range
    Dim i As Integer
     
    With Worksheets("Feuil1")
        Set oRng = .Range("P1")
        For i = 1 To .Columns(16).Find("*", , , , , xlPrevious).Row - 1
            If oRng.Offset(i, 0) = "R" Or oRng.Offset(i, 0) = "C" Or oRng.Offset(i, 0) = "F" Then
                'je fais ce que je veux ! =)
            End If
        Next i
     
    End With
     
    End Sub
    Utilise l'enregistreur de macro. Ca te permettra d'avancer !

    N'hésite pas à revenir vers moi !

    Cordialement,
    Kimy

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Par défaut
    Merci beaucoup. Ce n'est pas trop la mise en forme qui me dérange. C'est plutôt la condition.
    En faisant passer les lignes en dessous si R-C ou F.

    Ca fonctionne avec ce que tu m'as donné ?

  4. #4
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    chalou33,

    Ce n'est pas très clair.
    Ce que je t'ai donné correspond à la condition sur la colonne n°16. Pour chaque cellule, je test la valeur.

    Place un MsgBox oRng.Offset(i, 0) à la place de mon commentaire 'je fais ce que je veux ! =) et regarde ce que ça donne.

    Cordialement,
    Kimy

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Par défaut
    Je ne souhaite pas un message Box mais que ma ligne devienne un bloc à condition qu'il y ai un R-C-F en bout de cette même ligne.
    Comme dans ma pièce jointe.

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Par défaut Encore une fois HELP
    Re-Bonjour,
    je travaille désespérément sur cette macro depuis maintenant plusieurs jours.
    Et la condition ne fonctionne toujours pas. Et je ne sais pas comment appliquer la mise en forme à toutes les cellules concernées lorsqu'il y a réalisation de la condition.

    J'ai identifié différents problèmes comme vous pouvez le voir dans l'analyse de macro en PJ.
    Les informations surlignées en rose sont celles qui bloquent l'application de cette mise en forme si la condition est respectée.
    De plus je ne suis pas sûr que l'insertion soit correctement écrite.
    En effet, je souhaite que la ligne s'intègre en dessous de celle où figure le F-C ou R.
    Idem pour la mise en gras de la cellule.

    Et pour arranger les choses, la conditions bug comme noté dans l'analyse.

    Je suis au fond du gouffre. Et pour achever le tout, on vient de m'annoncer que cela devait fonctionner pour demain soir au plus tard.
    Pouvez-vous m'aider SVP car là je suis complètement bloquée !!??

    Merci par avance.
    Charlène

    Ps : en PJ vous trouverai la macro, le fichier original à transformer et mon analyse.
    Images attachées Images attachées
    Fichiers attachés Fichiers attachés

  7. #7
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour Charlène,

    Bon, en 1), je peux entendre que tu paniques parce que tu as la pression, mais la communauté n'est pas là pour faire ton travail.
    Ainsi, il suffit de réfléchir deux secondes et d'être cohérent.

    Tu m'as envoyé un premier fichier dans lequel la colonne "Relève" se situait en P (colonne 16).

    Dans le nouveau fichier, celle-ci est en colonne N (colonne 14).

    Ainsi, si tu avais pris de temps de comprendre, tu aurais pu déjà faire passer correctement la condition :
    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
    Option Explicit
     
    Sub chalou33()
    Dim oRng As Range
    Dim i As Integer
     
    With Worksheets("Feuil1")
        Set oRng = .Range("N1")
        For i = 1 To .Columns(14).Find("*", , , , , xlPrevious).Row - 1
            If oRng.Offset(i, 0) = "R" Or oRng.Offset(i, 0) = "C" Or oRng.Offset(i, 0) = "F" Then
                MsgBox oRng.Offset(i, 0)
            End If
        Next i
     
    End With
     
    End Sub
    Bref... Voici pour toi.
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    Option Explicit
     
    Sub chalou33()
    Dim oRng As Range
    Dim oCell As Range
     
    'Application.Visible = False
    'Application.Calculation = xlCalculationManual
     
    With Worksheets("Feuil1")
        Set oRng = Union(FindAll("R", .Columns(14), xlFormulas, xlWhole), FindAll("C", .Columns(14), xlFormulas, xlWhole), FindAll("F", .Columns(14), xlFormulas, xlWhole))
        For Each oCell In oRng
            oCell.Offset(1, 0).EntireRow.Insert Shift:=xlDown
            oCell.Offset(1, -8) = oCell.Offset(0, -5)
            oCell.Offset(1, -7) = oCell.Offset(0, -4)
            oCell.Offset(1, -9) = oCell.Offset(0, -3)
        Next oCell
    End With
     
    'Application.Calculation = xlCalculationAutomatic
    'Application.Visible = True
     
    End Sub
     
    Function FindAll(What, Optional SearchWhat As Variant, _
            Optional LookIn, _
            Optional LookAt, _
            Optional SearchOrder, _
            Optional SearchDirection As XlSearchDirection = xlNext, _
            Optional MatchCase As Boolean = False, _
            Optional MatchByte, _
            Optional SearchFormat) As Range
        'LookIn can be xlValues or xlFormulas, _
         LookAt can be xlWhole or xlPart, _
         SearchOrder can be xlByRows or xlByColumns, _
         SearchDirection can be xlNext, xlPrevious, _
         MatchCase, MatchByte, and SearchFormat can be True or False. _
         Before using SearchFormat = True, specify the appropriate settings _
         for the Application.FindFormat object, e.g., _
         Application.FindFormat.NumberFormat = "General;-General;""-"""
        Dim aRng As Range
        If IsMissing(SearchWhat) Then
            On Error Resume Next
            Set aRng = ActiveSheet.UsedRange
            On Error GoTo 0
        ElseIf TypeOf SearchWhat Is Range Then
            If SearchWhat.Cells.Count = 1 Then
                Set aRng = SearchWhat.Parent.UsedRange
            Else
                Set aRng = SearchWhat
                End If
        ElseIf TypeOf SearchWhat Is Worksheet Then
            Set aRng = SearchWhat.UsedRange
        Else
            Exit Function                       '*****
            End If
        If aRng Is Nothing Then Exit Function   '*****
        Dim FirstCell As Range, CurrCell As Range
        With aRng.Areas(aRng.Areas.Count)
        Set FirstCell = .Cells(.Cells.Count)
            'This little 'dance' ensures we get the first matching _
             cell in the range first
            End With
        Set FirstCell = aRng.Find(What:=What, After:=FirstCell, _
            LookIn:=LookIn, LookAt:=LookAt, _
            SearchDirection:=SearchDirection, MatchCase:=MatchCase, _
            MatchByte:=MatchByte, SearchFormat:=SearchFormat)
        If FirstCell Is Nothing Then Exit Function          '*****
        Set CurrCell = FirstCell
        Set FindAll = CurrCell
        Do
            Set FindAll = Application.Union(FindAll, CurrCell)
            'Setting FindAll at the top of the loop ensures _
             the result is arranged in the same sequence as _
             the  matching cells; the duplicate assignment of _
             the first matching cell to FindAll being a small _
             price to pay for the ordered result
            Set CurrCell = aRng.Find(What:=What, After:=CurrCell, _
                LookIn:=LookIn, LookAt:=LookAt, _
                SearchDirection:=SearchDirection, MatchCase:=MatchCase, _
                MatchByte:=MatchByte, SearchFormat:=SearchFormat)
            'FindNext is not reliable because it ignores the FindFormat settings
        Loop Until CurrCell.Address = FirstCell.Address
    End Function
    Je te laisse appliquer la mise en forme.

    Je suis passé par la fonction "FindAll" du Web. Plus pratique.
    Mais tu aurais pu t'en sortir autrement, avec le premier code proposé et un peu de recherche.

    Reviens vers moi si tu rencontres un problème.

    Cordialement,
    Kimy

  8. #8
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Par défaut
    Comment peut-on faire pour que la mise en forme s'applique à une cellule J par exemple si la condition est valide ?
    Tout fonctionne enfin, ma macro et quasiment terminée mais la mise en forme de la condition ne prend pas (zone surlignée en rose dans la PJ".
    Peux-tu m'aider une dernière fois ?

    Merci beaucoup par avance.
    Cordialement
    Charlène

    Ps : pour info, j'ai eu 4h de cours sur VBA et mon entreprise a estimé que j'était apte à faire une macro complète. Je suis donc une novice dans ce domaine. Et je suis un peu dans la même situation qu'un aveugle à qui on demande de voir.
    Images attachées Images attachées

  9. #9
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Je me pense sur un bug quand tu as deux cellules successives répondant à la condition.

    Cordialement,
    Kimy

  10. #10
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Par défaut macro v3
    j'ai réussi à avoir une Macro presque bonne mais j'ai quelques bugs encore.

    Les R-C-F sont remplacé par Vrai et il ne faut pas
    Et la mise en forme ne s'applique pas au bonne ligne

    Nom : macro.png
Affichages : 239
Taille : 324,6 Ko

    Qu'en penses-tu ? Que dois-je modifier ?
    Fichiers attachés Fichiers attachés

  11. #11
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Je te passe les détails et les prises de tête sur ton truc.
    J'aurais appris un truc en VBA au moins !

    Voici :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Option Explicit
     
    Sub chalou33()
    Dim ligne_max As Integer
    Dim nb_ligne As Integer
    Dim oRng As Range
     
    Application.Visible = False
    Application.Calculation = xlCalculationManual
     
    With Worksheets("Feuil1")
        ligne_max = .Columns(14).Find("*", , , , , xlPrevious).Row
        nb_ligne = 1
     
        Set oRng = .Range("N2")
     
        Do While nb_ligne < ligne_max
            Set oRng = Range(oRng, .Cells(ligne_max, 14)).Find("*", LookIn:=xlValues, LookAt:=xlWhole)
     
            oRng.Offset(1, 0).EntireRow.Insert Shift:=xlShiftDown
     
            oRng.Offset(1, -8) = oRng.Offset(0, -5)
            oRng.Offset(0, -5).Clear
     
            oRng.Offset(1, -7) = oRng.Offset(0, -4)
            oRng.Offset(0, -4).Clear
     
            oRng.Offset(1, -9) = oRng.Offset(0, -3)
            oRng.Offset(0, -3).Clear
     
            'Je sélection mes cellules
            With Range(oRng.Offset(1, -9), oRng.Offset(1, -7))
                'Avec les borders
                With .Borders
                    .LineStyle = xlContinuous
                    .ColorIndex = 0
                    .TintAndShade = 0
                    .Weight = xlMedium
                End With
                'Avec l'"interior"
                With .Interior
                    .Pattern = xlSolid
                    .PatternColorIndex = xlAutomatic
                    .TintAndShade = 0
                    .PatternTintAndShade = 0
                End With
            End With
     
            ligne_max = .Columns(14).Find("*", , , , , xlPrevious).Row
            nb_ligne = oRng.Row + 1
        Loop
     
    End With
     
    Application.Calculation = xlCalculationAutomatic
    Application.Visible = True
     
    End Sub
    Cordialement,
    Kimy

  12. #12
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Par défaut MERCI !!!!
    Merci beaucoup

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

Discussions similaires

  1. Comment faire une condition switch
    Par y-bab dans le forum IHM
    Réponses: 3
    Dernier message: 07/08/2008, 09h37
  2. Comment faire une condition en C#
    Par Calvein dans le forum ASP.NET
    Réponses: 3
    Dernier message: 02/06/2008, 10h31
  3. [VBA]Comment faire une pause
    Par Thierry'' dans le forum VBA Access
    Réponses: 14
    Dernier message: 14/04/2007, 14h42
  4. Réponses: 16
    Dernier message: 06/04/2007, 13h36
  5. [VBA]comment faire une procédure vba
    Par FRIGAUX dans le forum VBA Access
    Réponses: 4
    Dernier message: 23/03/2007, 15h59

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