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 :

Alimentation d'une cellule par concaténation


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Développeur Java
    Inscrit en
    Juin 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 61
    Par défaut Alimentation d'une cellule par concaténation
    Bonjour,

    Pour tester mon dev Java, j'ai besoin d'un fichier d'entrée dont la saisie sera faite par différents users. Je suis entrain de faciliter la saisie de l'utilisateur dans ce fichier. En l'occurence, je souhaite remplir toute la colonne B par concaténation des cellules en colonnes A et E.
    (plus précisément je concatène: colonneA_NumAleatoireNumAleatoireColonneE)

    J'ai essayé de faire ça en VB pour que la cellule se remplisse par double click. Ca fonctionne comme je le souhaite mais parfois tout plante et je suis obligée de fermer le .xls par CTRL+ALT+SUPPR.

    Pourriez-vous me dire ce qui ne va pas trop dans mon code svp?
    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
    'permet de remplir automatiquement la colone B idndoc par concaténation de l'idncaisse_dateDuJour_numAlea_NumPDF
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     
    Dim NumLigne, i, NbLigne As Integer
    Randomize
    NumLigne = 2 'on commence à la 2ème ligne pour ne pas écraser la ligne de titre
    NbLigne = WorksheetFunction.CountA(Range("A:A")) 'compte le nb de cellules non vides dans la 1er colonne
     
        If Not Application.Intersect(Target, Range("B2:B10000")) Is Nothing Then
            'si idncaisse n'est non vide OU refAttributaire est non vide alors
                 Do While (NumLigne <= NbLigne)
     
                    If ((IsEmpty(Cells(NumLigne, 1)) Or IsEmpty(Cells(NumLigne, 5))) And NumLigne <= NbLigne) Then
                    Else
                    ' l'idndoc généré est construit de la façon suivante: idncaisse_numAleaNumAlea_refAttrib
                        Cells(NumLigne, 2) = Cells(NumLigne, 1) & "_" & Int(Rnd * 100) & Int(Rnd * 100) & Cells(NumLigne, 5)  'concatène la 1ere et la dernière colonne
                        NumLigne = NumLigne + 1
     
                    End If
                Loop
        End If
    End Sub
    Merci pour vos remarques!

  2. #2
    Invité
    Invité(e)
    Par défaut Bonjour,
    tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (IsEmpty(Cells(NumLigne, 1)) Or IsEmpty(Cells(NumLigne, 5)
    or si IsEmpty(Cells(NumLigne, 1)=true et IsEmpty(Cells(NumLigne, 5)=false
    ta condition est remplie!
    tu ne peux pas ressaigner une valeur par null. je te suggère:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If ((Trim("" & Cells(NumLigne, 1)) <> "" Or Trim("" & Cells(NumLigne, 5)) <> "") And NumLigne <= NbLigne) Then
    Else
    ' l'idndoc généré est construit de la façon suivante: idncaisse_numAleaNumAlea_refAttrib
        Cells(NumLigne, 2) = Trim("" & Cells(NumLigne, 1)) & "_" & Int(Rnd * 100) & Int(Rnd * 100) & Trim("" & Cells(NumLigne, 5))  'concatène la 1ere et la dernière colonne
        NumLigne = NumLigne + 1
     
    End If

  3. #3
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Pourquoi tu ne le fais pas tout simplement par formule ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =si(et(A1<>"";E1<>"");A1 & "_" & ent(alea()*100) & ent(alea()*100) & E1;"")
    Sinon ton code va boucler à l'infini si l'une de tes cases intermédiaires est vide... Numligne<Nbligne mais tes cases sont vides alors on ne rajoute pas 1 et on reteste...

  4. #4
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut alimentation d'une cellule par concaténation
    Bonjour,

    Petite remarque qui ne résoudra surement rien:

    A quoi sert "And NumLigne <= NbLigne" dans le "if" puisque c'est déjà la condition du "do while" ?

    Par ailleurs, si nbligne = lignes renseignées en col A et qu'il y en a effectivement 10 non renseignées (c'est un exemple), cela implique que 10 lignes en fin de fichier ne seront pas traitées. Me trompe-je ?

    Cordialement.

  5. #5
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour,

    tiens en relisant ton équation ... revoit tes "And" ton équation comporte des éléments contradictoire ( colonne A vide ET colonne A = titre)

  6. #6
    Membre averti
    Femme Profil pro
    Développeur Java
    Inscrit en
    Juin 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 61
    Par défaut
    Bonjour,

    Merci pour vos remarques ! J'ai pu tout modifier comme il se devait et maintenant ça fonctionne bien selon tous les cas de tests possibles.


    Merci de votre aide !

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

Discussions similaires

  1. [POI] Appeler une cellule par son nom
    Par Galak extra dans le forum Documents
    Réponses: 9
    Dernier message: 17/06/2008, 14h33
  2. Réponses: 2
    Dernier message: 06/04/2007, 12h17
  3. Réponses: 2
    Dernier message: 29/03/2007, 11h47
  4. Chois d'une cellule par clic
    Par damsmut dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/07/2006, 16h07
  5. [VBA]Affectation d'une valeur à une cellule par une fonction
    Par lallougri dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 27/02/2006, 14h24

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