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 :

Concatener sous condition [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 300
    Par défaut Concatener sous condition
    Bonjour,

    Dans toute ma colonne "B" si je saisie le code "N" je voudrai que la cellule A1 par exemple, soit concaténée avec le texte en "F1" si le code est différent de "N" "" (vide) pour saisir une valeur.

    Exemple:
    "Montexte" est en f1 par exemple

    Colonne B
    En A1,5555 en B1 "N" en D1 5555montexte
    En A2,2365 en B2 "A" en D2 (libre pour saisir le texte manuellement.

    Merci d'avance.

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour
    Mettre ce code dans le module de ta feuille (évènement Change)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Target.Count = 1 And Target.Column = 2 Then
        Application.EnableEvents = False
        If UCase(Target.Value) = "N" Then
            Range("D" & Target.Row).Value = Range("A" & Target.Row).Value & Range("F" & Target.Row).Value
        Else
            Range("D" & Target.Row).ClearContents
        End If
        Application.EnableEvents = True
    End If
    End Sub

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 300
    Par défaut
    Merci beaucoup, ça fonctionne sauf que "montexte" est uniquement dans la cellule F1 donc absolue, il n'est présent que dans cette cellule.

    Comment le renvoyer avec concatener() vers les cellules concernées ?

    Encore merci

    Il y a un deuxième souci, si je change une valeur dans la colonne A le résultat n'est pas répercuté dans la concaténation ce n'est pas logique ?

    Merci de votre aide

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Target.Count = 1 And Target.Column = 2 Then
        Application.EnableEvents = False
        If UCase(Target.Value) = "N" Then
            Range("D" & Target.Row).Value = Range("A" & Target.Row).Value & Range("F1").Value
        Else
            Range("D" & Target.Row).ClearContents
        End If
        Application.EnableEvents = True
    End If
    End Sub
    Edit:
    Reponse à la dernière question
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Target.Count = 1 And Target.Column <= 2 Then
        Application.EnableEvents = False
        If UCase(Range("B" & Target.Row).Value) = "N" Then
            Range("D" & Target.Row).Value = Range("A" & Target.Row).Value & Range("F1").Value
        Else
            Range("D" & Target.Row).ClearContents
        End If
        Application.EnableEvents = True
    End If
    End Sub

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 300
    Par défaut
    Merci beaucoup pour votre aide, c'est parfait !

    Simple question, avec le code ci-dessous peut-on renvoyer un calcul ?

    Par exemple en F2 j'ai Pour calculer la différence en jours sans que les cellules de toutes la colonne "V" par exemple soit avec la formule à l'intérieure.

    Exemple en A 01/10/2000
    VBA calcule la différence entre cette date et l'autre en "D1" puis renvoie le résultat dans la colonne V de la même ligne, ou rien si la date n'est pas saisie.

    en "D1" la date sera changé par l'utilisateur de temps en temps.

    Merci.

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour
    l'explication n'est pas claire.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 300
    Par défaut
    Je me suis mal expliqué

    Dans le même cas de figure du code que vous m'avez donnez hier, je voudrai savoir si on peut calculer la différence entre deux dates sans que la formule apparaisse dans les cellules.

    Exemple:

    Dans toute la colonne A je vais saisir des dates.
    dans la colonne B les résultats s'affichent uniquement si la date en A est présente.

    En F1 j'ai une autre date "du jour par défaut" mais qui sera modifiable pour calculer avant aujourd'hui ou demain ou aujourd'hui.

    Ce calcul sera entre la date F1 et les dates de la colonnes A
    en effet je voudrai utiliser =DateDif() pour calculer l'âge en mois de mes animaux, l'avantage si c'est possible c'est que je ne serais pas obligé de recopier la formule sur toute la colonne B, c'est VBA qui va s'en charger, si possible seul le résultat devrait apparaitre mais pas la formule autrement dit si la date n'est pas saisie la cellule de la colonne B concernée sera vide en regardant la barre de formule.

    J'espère que je me suis bien expliqué.
    Ce code s'il est possible sera dans la même feuille que le code d'hier.
    Merci d'avance.

  8. #8
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Target.Count = 1 And Target.Column = 1 Then
        Application.EnableEvents = False
        If IsDate(Target.Value) Then
            Range("B" & Target.Row).Value = DateDiff("d", Range("A" & Target.Row).Value, CDate(Range("F1").Value))
        Else
            Range("B" & Target.Row).ClearContents
        End If
        Application.EnableEvents = True
    End If
    End Sub
    Ici en Bx tu as F1 - Ax (Tu inverse les paramètres de DateDiff si tu veux Ax - F1)

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 300
    Par défaut
    ça va mieux mais en B j'obtiens une date et non un chiffre comme "27" par exemple.
    Sinon on peut renvoyer 27 jours ou 1 mois etc ?

    Merci.

  10. #10
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Quelle date tu as en B? 27/01/1900?

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 300
    Par défaut
    25/06/1910

    Mais pour le reste il semble que ce soit bon, mise à part que si je change ma date "flottante" en F1 les résultats ne s'actualisent pas.

    En F1 = 01/03/2011

    Résultats en B après saisie des dates en A.
    05/08/2000 3860
    02/07/2006 1703
    02/08/2005 2037

    Encore merci.

  12. #12
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Il fallait l'énoncer dès le départ et non en goutte à goutte. mais bon, je reprend une expression de Godzestla (qui m'a plu)
    Ce site ne fait pas du sur mesure pour client exigeant.
    Relis les rêgles du forum.
    En fait, tu prends tes 2 mains, tu retrousses des manches, et hop tu es dans la peau de quelqu'un qui cherche donc trouves.
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Range
     
    Application.EnableEvents = False
    On Error Resume Next
    Range("B:B").NumberFormat = "General"
    If Target.Count = 1 And Target.Column = 1 Then
        If IsDate(Target.Value) Then
            Range("B" & Target.Row).Value = DateDiff("d", Range("A" & Target.Row).Value, CDate(Range("F1").Value))
        Else
            Range("B" & Target.Row).ClearContents
        End If
    ElseIf Target.Address(0, 0) = "F1" Then
        If IsDate(Target.Value) Then
            For Each c In Range("A1", Range("A" & Rows.Count).End(xlUp))
                If IsDate(c.Value) Then c.Offset(0, 1).Value = DateDiff("d", c.Value, CDate(Target.Value))
            Next c
        End If
    End If
    Application.EnableEvents = True
    End Sub
    J'espère que pour ton bien, tu fais l'effort d'essayer de comprendre les pistes qu'on te file.


    Edit: Ton 25/06/1910 est dû au format date de ta cellule

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 300
    Par défaut
    Merci pour ton aide, oui je cherche à comprendre mais je ne suis professionnel en informatique, j'apprends par l'exemple car je trouve que c'est la meilleure solution.

    Je vais voir sur internet si je trouve un livre pour débuter en VBA

    Bonne soirée et merci beaucoup.


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

Discussions similaires

  1. Réponses: 10
    Dernier message: 18/02/2015, 16h48
  2. [XL-2007] Concatenation de cellules sous conditions
    Par Marco Woods dans le forum Excel
    Réponses: 4
    Dernier message: 14/02/2015, 18h24
  3. Réponses: 8
    Dernier message: 14/01/2006, 15h17
  4. Pb Ouverture de formulaire sous condition.
    Par Phl98 dans le forum Access
    Réponses: 8
    Dernier message: 03/11/2005, 22h28
  5. Create function sous condition
    Par nbl dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/05/2005, 12h00

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