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 :

Formule ligne précédente


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    test
    Inscrit en
    Janvier 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : test
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 4
    Par défaut Formule ligne précédente
    Bonjour la communauté Developpez.com


    Je voudrais vous soumettre une question


    Je travail actuellement sur l'élaboration d'un fichier EXCEL + USERFORM.


    Ce fichier comporte plusieurs colonnes dont une IMPORTANTE qui rassemble les informations avec la formule concaténer (colonne L)

    Mon userform se présente sous la forme multiples combo box + textbox... etc

    Les informations sont bien retranscrite sur ma feuille dans les bonnes colonnes sans soucis mais j'utilise sur une autre feuille l' API QR CODE
    je me sert donc de la formule inscrite en colonne L ( concaténer) pour récupérer les information concaténer et les coller sur la cellule B de la feuille QR CODE.

    Quand j'automatise les choses je bloque car mon code vba qui automatise les choses va sélectionner la dernière case non vide (et malheureusement ce n'est pas ce que je veux) car ma colonne L est remplie de de la formule concaténer du coup ca me renvois a la dernière ligne .....
    Je souhaiterais donc utiliser votre connaissance pour sois :


    Avoir une macro ou code vba qui des que je fais une entrée avec l'userform mon curseur tombe directement sur la colonne L est la dernière ligne écrite (non pas la dernière ligne non vide )

    soit :

    une macro qui me permette de ne pas (tirer vers le bas ma formule en colonne L ) mais plutôt qu'a chaque entrée grâce a l'userform ajoute une ligne avec la même formule qu’au-dessus.


    Je ne suis plus sur d’être clair j'ai essayé tellement de possibilité ...


    Merci a vous lecteur j’espère que nous trouverons une solution a ce problème qui me fais tourner en bourrique après avoir effectuer 85 % du travail

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par jeremysuzet Voir le message
    Ce fichier comporte plusieurs colonnes dont une IMPORTANTE qui rassemble les informations avec la formule concaténer (colonne L)
    La fonction CONCATENER() est devenu inutile il y a une bonne vingtaine d'années avec l'introduction de l'opérateur &.

    Que concatènes-tu ?

    Quand j'automatise les choses je bloque car mon code vba qui automatise les choses va sélectionner la dernière case non vide (et malheureusement ce n'est pas ce que je veux)
    Peux-tu présenter ce code, de préférence encadré de balises CODE (l'icone # de l'éditeur du forum).

    Avoir une macro ou code vba qui des que je fais une entrée avec l'userform mon curseur tombe directement sur la colonne L est la dernière ligne écrite (non pas la dernière ligne non vide )
    Il se peut que dans ton esprit (avec ton application sous les yeux), la différence entre "ligne non vide" et "ligne écrite" soit claire, mais je suppose que je ne suis pas le seul à ne pas voir la différence.
    Tu devrais faire une copie d'écran pour montrer cette différence.

    une macro qui me permette de ne pas (tirer vers le bas ma formule en colonne L ) mais plutôt qu'a chaque entrée grâce a l'userform ajoute une ligne avec la même formule qu’au-dessus.
    Normalement, un "tirer vers le bas" copie la formule du dessus.
    Là encore, j'ai du mal à comprendre ta demande.

  3. #3
    Candidat au Club
    Homme Profil pro
    test
    Inscrit en
    Janvier 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : test
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 4
    Par défaut [XL-2013] Formule ligne
    Bonjour Menhir ,

    je vais te faire parvenir des screenshot

    Nom : excel apres userform.JPG
Affichages : 526
Taille : 83,0 KoNom : formule.JPG
Affichages : 536
Taille : 98,9 KoNom : qr code.JPG
Affichages : 508
Taille : 36,0 KoNom : userform.JPG
Affichages : 508
Taille : 46,9 KoNom : userform2.JPG
Affichages : 520
Taille : 50,9 Ko

    Pour répondre à ta première question je concatène différentes infos qui suivent :

    NOM DE FAMILLE > PRENOM > BATIMENT > PIECE > TRACKING > TRANSPORTEUR > NOMBRE DE COLIS

    Tout ça en colonne L ( qr code )

    concernant la colonne L j'avais eu deux idées la première

    avoir toute la colonne L en formule Concaténer mais ça implique lors de mon collage avec ma macro QR CODE venir chercher la dernière cligne non vide et ça m'envoie très loin en bas
    alors que j'aurais besoin de pointer directement sur la colonne L et ligne fraîchement remplie grâce à l'userform .

    Par ex : avoir un bout de code qui me rajoute en colonne L a la suite des autres ma formule serais l'idéal

    2 eme exemple: à chqaue ajout avec l'userform avoir la formule directement implanté sans avoir a utiliser le fameux " tirer en bas " mais je ne parviens pas a trouver la maniere de procéder j'aimerais juste qu'une entrée apres l'autre ma formule se positionne



    code macro
    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
    Option Explicit
     
    Sub Macro3()
    '
    ' Macro3 Macro
    '
     
    '
        Selection.End(xlDown).Select
        Selection.copy
        Sheets("CODE QR").Select
        Range("B3").Select
        ActiveSheet.Paste
        Sheets("ici").Select
        Selection.End(xlDown).Select
    End Sub



    voila en ayant essayé de me faire comprendre

    merci a toi par avance et à la communauté

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Je pense que ce que tu souhaites faire (ajouter des données en ajoutant ta concaténation) peut être fait en une seule macro.
    Mais pour ça, il faudrait que tu fournisses le code transférant tes données de ton UF vers les cellules de la feuille.

    Petit détail : comme je le disais, la fonction CONCATENER est obsolète.
    Dans ta formule, supprime-là (ainsi que ses parenthèses) et remplace les ";" par des "&".
    Autre détail : inutile de séparer les espaces. Au lieu d'écrire &" "&" "&" "&, il est plus simple d'écrire &" "&.

  5. #5
    Candidat au Club
    Homme Profil pro
    test
    Inscrit en
    Janvier 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : test
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 4
    Par défaut formule obsolete
    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
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
     
    Option Explicit
    Dim Ws As Worksheet
     
     
     
     
     
     
     
    Private Sub TextBox18_Change()
    TextBox18 = UCase(TextBox18)
    End Sub
     
    Private Sub TextBox19_Change()
    TextBox19 = UCase(TextBox19)
     
    End Sub
     
    Private Sub TextBox4_Change()
    TextBox4 = UCase(TextBox4)
    End Sub
     
    Private Sub TextBox5_Change()
    TextBox5 = UCase(TextBox5)
    End Sub
     
    Private Sub TextBox6_Change()
    TextBox6 = UCase(TextBox6)
    End Sub
     
    Private Sub TextBox7_Change()
    TextBox7 = UCase(TextBox7)
    End Sub
     
    'Pour le formulaire
    Private Sub UserForm_Initialize()
        Dim j As Long
        Dim i As Integer
     
        ComboBox2.ColumnCount = 1 'Pour la liste d?roulante Civilit?
        ComboBox2.List() = Array("")
        Set Ws = Sheets("Clients") 'Correspond au nom de votre onglet dans le fichier Excel
        With Me.ComboBox1
            For j = 1 To Ws.Range("A" & Rows.Count).End(xlUp).Row
                .AddItem Ws.Range("A" & j)
            Next j
        End With
        For i = 1 To 7
            Me.Controls("TextBox" & i).Visible = True
        Next i
    End Sub
     
    'Pour la liste d?roulante Code client
    Private Sub ComboBox1_Change()
        Dim ligne As Long
        Dim i As Integer
     
        If Me.ComboBox1.ListIndex = -1 Then Exit Sub
        ligne = Me.ComboBox1.ListIndex + 1
        ComboBox2 = Ws.Cells(ligne, "B")
        For i = 1 To 7
            Me.Controls("TextBox" & i) = Ws.Cells(ligne, i + 2)
        Next i
    End Sub
     
    'Pour le bouton Nouveau contact
    Private Sub CommandButton1_Click()
        Dim l As Integer
     
            l = Sheets("ici").Range("a65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement ? la premi?re ligne de tableau non vide
            Range("A" & l).Value = ComboBox1
            Range("B" & l).Value = ComboBox2
            Range("C" & l).Value = TextBox1
            Range("D" & l).Value = TextBox2
            Range("E" & l).Value = TextBox3
            Range("F" & l).Value = TextBox4
            Range("G" & l).Value = TextBox5
            Range("H" & l).Value = TextBox6
            Range("I" & l).Value = TextBox7
            Range("J" & l).Value = Now
            Range("K" & l).Value = TextBox18
     
     
     
     
     
     
           Unload Me
     
    UserForm19.Show
     
     
     
     
    End Sub
     
    'Pour le bouton Modifier
    Private Sub CommandButton2_Click()
        Dim ligne As Long
        Dim i As Integer
     
        If MsgBox("Confirmez-vous la modification de ce contact ?", vbYesNo, "Demande de confirmation de modification") = vbYes Then
            If Me.ComboBox1.ListIndex = -1 Then Exit Sub
            ligne = Me.ComboBox1.ListIndex + 1
            Ws.Cells(ligne, "B") = ComboBox2
            For i = 1 To 7
                If Me.Controls("TextBox" & i).Visible = True Then
                    Ws.Cells(ligne, i + 2) = Me.Controls("TextBox" & i)
                End If
            Next i
        End If
    End Sub
     
    'Pour le bouton Quitter
    Private Sub CommandButton3_Click()
    Unload Me
     
     
     
    End Sub

    voici le code de l'userform et ses fonctions


    je trouve intelligente l'idée d'incorporer en vba ou autre ma formules pour qu'à toute les lignes ajouter par luserform la formule qui concatène les infos sois mise


    merci a toi

  6. #6
    Candidat au Club
    Homme Profil pro
    test
    Inscrit en
    Janvier 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : test
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 4
    Par défaut on avance formule userform
    Re bonjour ,


    j'ai réfléchis une bonne fois pour toute :

    Un userform fait ce qu'on lui demande alors il m'à écouté

    j'ai demander dans une colonne de me concaténé avec & les différente infos que j'avais et ca fonctionne maintenant reste plus qu'a savoir si les infos sont bien copier en valeur dans le code qr

    ton aide m'a mis sur le chemin

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Dans ton tableau, supprime toutes les lignes "vides", celles qui ne contiennent pas de données, même si elles contiennent une concaténation en L.

    Ceci créera une nouvelle ligne avant de la renseigner.
    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 CommandButton1_Click()
        Dim Dest as Range
     
        Set Dest = Sheets("ici").Cells(Rows.Count, "A").End(xlUp)
        Dest.EntireRow.Copy Dest.Offset(1, 0).EntireRow
     
        Dest.Offset(1, 0).Value = ComboBox1
        Dest.Offset(1, 1).Value = ComboBox2
        Dest.Offset(1, 2).Value = TextBox1
        Dest.Offset(1, 3).Value = TextBox2
        Dest.Offset(1, 4).Value = TextBox3
        Dest.Offset(1, 5).Value = TextBox4
        Dest.Offset(1, 6).Value = TextBox5
        Dest.Offset(1, 7).Value = TextBox6
        Dest.Offset(1, 8).Value = TextBox7
        Dest.Offset(1, 9).Value = Now
        Dest.Offset(1, 10).Value = TextBox18
     
        Unload Me
        UserForm19.Show
    End Sub

Discussions similaires

  1. [XL-2010] Formule ligne précédente filtrée (visible)
    Par cerede2000 dans le forum Excel
    Réponses: 8
    Dernier message: 15/03/2016, 08h50
  2. Réponses: 2
    Dernier message: 05/04/2007, 09h39
  3. Réponses: 5
    Dernier message: 03/04/2007, 11h08
  4. lire un enregistrement d'une ligne précédente
    Par ulysse031 dans le forum JDBC
    Réponses: 17
    Dernier message: 06/02/2007, 23h24
  5. Réponses: 3
    Dernier message: 20/12/2006, 08h15

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