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 :

Traitement conditionné par la valeur d'une cellule


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut Traitement conditionné par la valeur d'une cellule
    Bonjour, je cherche à remplacer des nombres stockés sous forme de texte par ces mêmes nombres stockés sous forme de nombre et ceci de façon conditionnées par la valeur d'une cellule.

    Les nombres en question se trouvent dans la plage G2:DU1000 et l'action doit être appliquée uniquement dans les lignes pour lesquelles DV="FAUX" (donné par le résultat d'une formule.

    Le code avec lequel je travaille:

    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
    Dim rg As Range, rg2 As Range, sh As Worksheet, t()
        Dim i&, j&
     
        Set sh = Sheets("RECUP")
        Set rg = sh.Range(sh.Range("G" & Application.Rows.Count).End(xlUp), sh.Range("DU" & Application.Rows.Count).End(xlUp))
        PremLig = sh.Range("A2", sh.Range("A2").End(xlDown)).Rows.Count + 1
        'Range("A65536").End(xlUp)
        'Set rg2 = sh.Range(sh.Range("DV2").End(xlDown), sh.Range("DV2").End(xlDown))
        DerLig2 = sh.Range("A2", sh.Range("A2").End(xlDown).Offset(1, 0)).Rows.Count + 1
         MsgBox DerLig2
     
        t = rg
            For i = PremLig To DerLig2
     
     
                For j = 7 To 125
     
                 Cells(i, j) = Val(Cells(i, j))
                Next j
            Next i
        rg = t
    fin:
        Set rg = Nothing
        Set sh = Nothing
     
    MsgBox "FIN"
     
    End Sub
    Pour l'instant, il applique parfaitement l'action mais à partir de la dernière cellule de la colonne A contenant une valeur.

    La formule dans DV:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(NBCAR(A2)=0;"";ESTNUM(G2:DU2))
    Le traitement est à appliquer si la cellule DV="FAUX" (je n'arrive jamais à faire comprendre à Excel que le résultat "" d'une cellule, dans mon esprit, revient à une cellule vide....)

    Quelqu'un voit quelque chose?

    Avec:

    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
    Dim rg As Range, rg2 As Range, cel As Range, sh As Worksheet, t()
        Dim i&, j&
     
        Set sh = Sheets("RECUP")
        Set rg = sh.Range(sh.Range("G" & Application.Rows.Count).End(xlUp), sh.Range("DU" & Application.Rows.Count).End(xlUp))
     
    With Sheets("RECUP").Range("DV2:DV1000")
     
    PremLig = Range("DV2:DV1000").Find("FAUX", lookat:=xlWhole).Row
     
     
     
     MsgBox PremLig
     
     
     
        Set rg2 = sh.Range(sh.Range("DV2").End(xlDown), sh.Range("DV2").End(xlDown))
        DerLig2 = sh.Range("A2", sh.Range("A2").End(xlDown).Offset(1, 0)).Rows.Count + 1
     
     
        t = rg
     
     
            For i = PremLig To DerLig2
     
     
                For j = 7 To 125
     
     
     
                 Cells(i, j) = Val(Cells(i, j))
     
                Next j
            Next i
        rg = t
     
     
     
     
    fin:
        Set rg = Nothing
        Set sh = Nothing
     
    MsgBox "FIN"
     End With
    End Sub
    Sempiternel retour: Variable objet ou Bloc With non défini

    Je m'arrache les cheveux

    Ca avance:

    Avec:

    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
    Dim PremLig As Range, rg As Range, rg2 As Range, cel As Range, sh As Worksheet, t()
        Dim i&, j&
     
        Set sh = Sheets("RECUP")
        Set rg = sh.Range(sh.Range("G" & Application.Rows.Count).End(xlUp), sh.Range("DU" & Application.Rows.Count).End(xlUp))
     
    With Sheets("RECUP").Range("DV2:DV1000")
     
    Set cel = Range("DV2:DV1000").Find("FAUX", lookat:=xlWhole)
    If cel Is Nothing Then
    MsgBox "code pas trouvé"
    Exit Sub
     
    PremLig = cel.Row
     
     MsgBox PremLig
     
     
     
        Set rg2 = sh.Range(sh.Range("DV2").End(xlDown), sh.Range("DV2").End(xlDown))
        DerLig2 = sh.Range("A2", sh.Range("A2").End(xlDown).Offset(1, 0)).Rows.Count + 1
     
     
        t = rg
     
     
            For i = PremLig To DerLig2
     
     
                For j = 7 To 125
     
     
     
                 Cells(i, j) = Val(Cells(i, j))
     
                Next j
            Next i
        rg = t
     
     
     
     
    fin:
        Set rg = Nothing
        Set sh = Nothing
     End If
    MsgBox "FIN"
     End With
     
    End Sub
    Retour:

    "code pas trouvé"

    Donc VBA ingore mes "FAUX"

    Je ne vois absolument pas pourquoi????

    Et pourtant quand je mets:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Cells(i, 126).Value
    J'ai bien un faux qui s'affiche

    Avec:

    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
    Sub COPYPASTESEL()
     
     
        Dim rg As Range, rg2 As Range, cel As Range, sh As Worksheet, t()
        Dim i&, j&
     
        Set sh = Sheets("RECUP")
        Set rg = sh.Range(sh.Range("G" & Application.Rows.Count).End(xlUp), sh.Range("DU" & Application.Rows.Count).End(xlUp))
     
    With Sheets("RECUP").Range("DV2:DV1000")
     
    Cells(2, 126).Select
     
    Set cel = Cells.Find(What:="FAUX", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
    If cel Is Nothing Then
    MsgBox "code pas trouvé"
    Exit Sub
    Else
    PremLig = cel.Row
     
     MsgBox PremLig
     
     
     
     
     
            For i = PremLig To DerLig2
     
     
                For j = 7 To 125
     
     
     
                 Cells(i, j) = Val(Cells(i, j))
     
                Next j
            Next i
     
     
     
     
    fin:
        Set rg = Nothing
        Set sh = Nothing
     End If
    MsgBox "FIN"
     End With
     
    End Sub
    Le code commence à s'appliquer à DV2 et le traitement s'effectue sur toute les lignes sans tenir compte des "FAUX"


    Rien ne sort de la brume pour vous?????

    Il n'existe vraiment aucune solution pour qu'un code me renvoie le numéro de ligne d'une cellule dans laquelle FAUX s'incsrit suite à une formule =si(A2<>"";"FAUX";"")?

  2. #2
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Bon j'ai pas tout compris mais si tu supprimes la colonne DV qui sert à rien vu que tu veux ta solution en macro voilà ce que je te propose
    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
    Sub Trans_Ligne()
        Dim Derlign As Long
        Dim Lign As Long
        Dim Col As Integer
        Dim NomF As String
     
        NomF = "Feuil1"
     
        Derlign = ThisWorkbook.Worksheets(NomF).UsedRange.Rows.Count
        For Lign = 2 To Derlign
            If Cells(Lign, 1).Value <> "" Then
                For Col = 7 To 125
                    If Not IsNumeric(Cells(Lign, Col).Value) Or Cells(Lign, Col).Value = "" Then
                        Cells(Lign, Col).Value = Cells(Lign, Col).Value
                    Else
                        Cells(Lign, Col).NumberFormat = "General"
                        Cells(Lign, Col).Value = CSng(Cells(Lign, Col).Value)
                    End If
                Next
            End If
        Next
    End Sub
    je viens de tester (par rapport à ce que j'ai compris et cela marche

    c'est à dire si cellule(A...) est vide ne traite pas la ligne sinon on traite

    Dis moi si j'ai bien compris et si cela te va

    A+

    PS: j'ai modifier mon post parce que l'oubli d'un mot change le sens de ma phrase

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    En adaptant un peu, j'arrive à:

    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
    Sub COPYPASTESEL()
    ActiveWorkbook.Save
    MsgBox "FIN REMONTEE DEBUT CALCUL"
     
     
     
     
        Dim PremLig As Long
        Dim Derlign As Long
        Dim Lign As Long
        Dim Col As Integer
        Dim NomF As String
     
        NomF = "RECUP"
     
     
        With Sheets("RECUP").Range("DV2:DV1000")
    Cells(2, 126).Select
     
    y = 2
     
    While y <= 1000
     
     
     
     
    Set cel = Cells.Find(What:="FAUX", After:=ActiveCell, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
     
    If cel = "VRAI" Then
     
    Cells(y + 1, 126).Select
    Set cel = Cells.Find(What:="FAUX", After:=ActiveCell, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
     
     
    If cel = "FAUX" Then
     
     
    Cells(y + 2, 7).Select
     
    PremLig = y + 2
     
     
     
     
     
        Derlign = Range("A2", Range("A2").End(xlDown).Offset(1, 0)).Rows.Count + 1
     
     
     
        'Derlign = ThisWorkbook.Worksheets(NomF).UsedRange.Rows.Count
        For Lign = PremLig To Derlign
            If Cells(Lign, 1).Value <> "" Then
                For Col = 7 To 125
                    If Not IsNumeric(Cells(Lign, Col).Value) Or Cells(Lign, Col).Value = "" Then
                        Cells(Lign, Col).Value = Cells(Lign, Col).Value
                    Else
                        Cells(Lign, Col).NumberFormat = "General"
                        Cells(Lign, Col).Value = CSng(Cells(Lign, Col).Value)
                    End If
                Next
            End If
        Next
     
     End If
     End If
     
     y = y + 1
     
     Wend
    MsgBox "FIN"
     
     End With
    End Sub

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    RESOLU PAR:

    Igloobel


    MERCI A LUI!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/02/2014, 15h52
  2. Réponses: 5
    Dernier message: 08/06/2011, 15h13
  3. MAJ dans une table conditionnée par la valeur d'un de ses champs
    Par NicolasTT dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 24/03/2011, 15h31
  4. [XL-2007] [FORM] remplacer la valeur d'une cellule par une autre
    Par coldavires dans le forum Excel
    Réponses: 7
    Dernier message: 21/01/2010, 22h34
  5. Remplacement d'une valeur fixe par la valeur d'une cellule
    Par zeralium dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 15/04/2008, 09h20

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