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

Excel Discussion :

macro VBA Excel - un code à évoluer [XL-2007]


Sujet :

Excel

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 243
    Par défaut macro VBA Excel - un code à évoluer
    Bonjour,

    j'ai un code qui copier des colonnes de la feuille 1 vers la feuille2 sous condition:

    Je vous l'adapter à mon fichier excel et je ne sais pas comment :

    - la colonne ou se trouve "oui" (If LCase(datas(lig, 16)) = "oui") est "BB"
    - L'identifiant des lignes de la feuille1 se trouve a la colonne BD
    - L'identifiant des lignes de la feuille1 se trouve a la colonne A
    - les colonnes à copier de la feuille1 sont : K, L, M et N vers les colonnes H, I, J, K de la feuille2


    Sub maj()
    Dim derlig As Long, lig As Long, col As Long, datas As Variant
    Dim sh1 As Worksheet, sh2 As Worksheet, c As Range
    Dim cpt1 As Long, cpt2 As Long, inconnu As Long, msg As String
    Set sh1 = Sheets("Feuil1")
    Set sh2 = Sheets("Feuil2")

    'recup datas
    With sh1
    derlig = .Cells(Rows.Count, "A").End(xlUp).Row
    datas = .[A2].Resize(derlig - 1, 16)
    End With

    ' traitement
    Application.ScreenUpdating = False
    For lig = 1 To UBound(datas)
    If LCase(datas(lig, 16)) = "oui" Then
    cpt1 = cpt1 + 1
    Set c = sh2.[A:A].Find(datas(lig, 1), LookIn:=xlValues, Lookat:=xlWhole)
    If c Is Nothing Then
    inconnu = inconnu + 1
    Else
    sh2.Cells(c.Row, 8) = datas(lig, 11)
    sh2.Cells(c.Row, 9) = datas(lig, 12)
    sh2.Cells(c.Row, 10) = datas(lig, 13)
    sh2.Cells(c.Row, 11) = datas(lig, 14)
    sh2.Cells(c.Row, 14) = Now
    End If
    Else
    cpt2 = cpt2 + 1
    End If
    Next lig
    msg = "Oui : " & vbTab & cpt1 & vbLf
    msg = msg & "Autres : " & vbTab & cpt2 & vbLf & vbLf
    msg = msg & "Références 'Oui' non trouvées : " & inconnu
    MsgBox msg
    End Sub

    Merci de votre aide.

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    que dire ?
    1 - apprends à mettre des balises sur ton code, tu le sélectionnes et cliques sur "#"
    2 - quand tu écris
    la colonne ou se trouve "oui" (If LCase(datas(lig, 16)) = "oui") est "BB"
    d'après ton code ça ne serait pas 16 mais 54 ou je ne comprends rien (ce qui est possible)
    3 - donc à revoir cette partie certainement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ....
    sh2.Cells(c.Row, 8) = datas(lig, 11)
    sh2.Cells(c.Row, 9) = datas(lig, 12)
    sh2.Cells(c.Row, 10) = datas(lig, 13)
    sh2.Cells(c.Row, 11) = datas(lig, 14)
    sh2.Cells(c.Row, 14) = Now
    ....
    4 - j'ai une idée mais envoies un fichier bidon car au vu de tes explications.........

    bon courage
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut
    bonjour,

    l'index des colonnes se trouve dans cette partie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sh2.Cells(c.Row, 8) = datas(lig, 11)
    sh2.Cells(c.Row, 9) = datas(lig, 12)
    le chiffre représente la colonne, on peut aussi mettre à la place "A" par exemple ici on a:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sh2.Cells(c.Row, 8) = datas(lig, 11)
    sh2.Cells(c.Row, 9) = datas(lig, 12)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sh2.Cells(c.Row, "H") = datas(lig, "K")
    sh2.Cells(c.Row, "I") = datas(lig, "L")
    Il suffit d'adapter selon vos nouvelles colonnes.

    dans le code ci dessus, sh2 a été définit comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set sh2 = Sheets("Feuil2")
    du coup le code dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sh2.Cells(c.Row, "H") = datas(lig, "K") 'la celulle de la feuille 2 en ligne c.row (variant selon la valeur de C trouvée dans le find) en colonne H (= colonne 8) est égal la la valeur de la feuille datas en ligne "lig" (variant) colonne K (= colonne 11)
    donc par exemple le numéro de la colonne de cette partie du code va changer:

    la colonne ou se trouve "oui" (If LCase(datas(lig, 16)) = "oui") est "BB"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     (If LCase(datas(lig, "BB")) = "oui") 'ou numéro de colonne BB

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 243
    Par défaut
    Citation Envoyé par casefayere Voir le message
    Bonjour,
    que dire ?
    1 - apprends à mettre des balises sur ton code, tu le sélectionnes et cliques sur "#"
    2 - quand tu écris d'après ton code ça ne serait pas 16 mais 54 ou je ne comprends rien (ce qui est possible)
    3 - donc à revoir cette partie certainement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ....
    sh2.Cells(c.Row, 8) = datas(lig, 11)
    sh2.Cells(c.Row, 9) = datas(lig, 12)
    sh2.Cells(c.Row, 10) = datas(lig, 13)
    sh2.Cells(c.Row, 11) = datas(lig, 14)
    sh2.Cells(c.Row, 14) = Now
    ....
    4 - j'ai une idée mais envoies un fichier bidon car au vu de tes explications.........

    bon courage

    Merci pour ta réponse,

    ci-joint un exemple du fichier excel.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 243
    Par défaut
    Citation Envoyé par bboy-eazy Voir le message
    bonjour,

    l'index des colonnes se trouve dans cette partie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sh2.Cells(c.Row, 8) = datas(lig, 11)
    sh2.Cells(c.Row, 9) = datas(lig, 12)
    le chiffre représente la colonne, on peut aussi mettre à la place "A" par exemple ici on a:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sh2.Cells(c.Row, 8) = datas(lig, 11)
    sh2.Cells(c.Row, 9) = datas(lig, 12)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sh2.Cells(c.Row, "H") = datas(lig, "K")
    sh2.Cells(c.Row, "I") = datas(lig, "L")
    Il suffit d'adapter selon vos nouvelles colonnes.

    dans le code ci dessus, sh2 a été définit comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set sh2 = Sheets("Feuil2")
    du coup le code dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sh2.Cells(c.Row, "H") = datas(lig, "K") 'la celulle de la feuille 2 en ligne c.row (variant selon la valeur de C trouvée dans le find) en colonne H (= colonne 8) est égal la la valeur de la feuille datas en ligne "lig" (variant) colonne K (= colonne 11)
    donc par exemple le numéro de la colonne de cette partie du code va changer:

    la colonne ou se trouve "oui" (If LCase(datas(lig, 16)) = "oui") est "BB"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     (If LCase(datas(lig, "BB")) = "oui") 'ou numéro de colonne BB

    Merci pour ta réponse,

    quand je mis par exp : If LCase(datas(lig, 16)) = "oui" ou If LCase(datas(lig, 16)) = 54 ), il ne me ramène rien.

    sinon cette partie de code sert à quoi :

    With sh1
    derlig = .Cells(Rows.Count, "A").End(xlUp).Row
    datas = .[A2].Resize(derlig - 1, 20)
    End With

    Je te remercie d'avance .

  6. #6
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With sh1 'sur la feuille1
    derlig = .Cells(Rows.Count, "A").End(xlUp).Row ' donne une valeur à derlig comme étant le n° de la dernière ligne en feuill1 sur la colonne A
    datas = .[A2].Resize(derlig - 1, 20) 'permet de redimensionner la plage A2 d'une ligne en moins et de 20 colonne en plus je crois mais je maitrise pas très bien Resize
    End With

    sinon c'est normal car c'est pas au = qu'il faut mettre 54 mais à la place du numéro de colonne car n° 54 est égal à la colonne BB

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If LCase(datas(lig, 16)) = "oui" ou If LCase(datas(lig, 16)) = 54 )
    est faux il faut mettre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If LCase(datas(lig, 54)) = "oui"

  7. #7
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Je viens de revenir,

    Merci bboy-eazy
    quand je mis par exp : If LCase(datas(lig, 16)) = "oui" ou If LCase(datas(lig, 16)) = 54 ), il ne me ramène rien.
    j'ai l'impression qu'il y a du boulot pour t'expliquer, dès que je peux, je regarde ton fichier
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 243
    Par défaut
    Citation Envoyé par bboy-eazy Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With sh1 'sur la feuille1
    derlig = .Cells(Rows.Count, "A").End(xlUp).Row ' donne une valeur à derlig comme étant le n° de la dernière ligne en feuill1 sur la colonne A
    datas = .[A2].Resize(derlig - 1, 20) 'permet de redimensionner la plage A2 d'une ligne en moins et de 20 colonne en plus je crois mais je maitrise pas très bien Resize
    End With

    sinon c'est normal car c'est pas au = qu'il faut mettre 54 mais à la place du numéro de colonne car n° 54 est égal à la colonne BB

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If LCase(datas(lig, 16)) = "oui" ou If LCase(datas(lig, 16)) = 54 )
    est faux il faut mettre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If LCase(datas(lig, 54)) = "oui"


    Merci pour ta réponse,


    J'ai mis le fichier excel en haut, est ce que tu peux jeter un coup d'oeil stp ?

    Merci d'avance

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 243
    Par défaut
    Citation Envoyé par bboy-eazy Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With sh1 'sur la feuille1
    derlig = .Cells(Rows.Count, "A").End(xlUp).Row ' donne une valeur à derlig comme étant le n° de la dernière ligne en feuill1 sur la colonne A
    datas = .[A2].Resize(derlig - 1, 20) 'permet de redimensionner la plage A2 d'une ligne en moins et de 20 colonne en plus je crois mais je maitrise pas très bien Resize
    End With

    sinon c'est normal car c'est pas au = qu'il faut mettre 54 mais à la place du numéro de colonne car n° 54 est égal à la colonne BB

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If LCase(datas(lig, 16)) = "oui" ou If LCase(datas(lig, 16)) = 54 )
    est faux il faut mettre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If LCase(datas(lig, 54)) = "oui"




    et ce bout de code :

    Set c = sh2.[A:A].Find(datas(lig, 1), LookIn:=xlValues, Lookat:=xlWhole)

    il fait quoi ?

    Merci

  10. #10
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut
    il définit C (nombre) comme étant la valeur trouvé de datas(lig, 1) ! c'est un find enfait qui cherche une occurence de la valeur de datas(lig, 1)

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

Discussions similaires

  1. [VBA-E]Probleme macro VBA excel 2000 2003
    Par skichatchat dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/04/2007, 21h16
  2. incompatibilité macros VBA excel 2000 et 2003
    Par hiline6 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/04/2007, 12h20
  3. Macro VBA Excel : Comparaison des deux 1ères colonnes de 2 fichiers Excel
    Par techneric dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/01/2007, 10h00
  4. Auto install macro vba excel
    Par zootman dans le forum Installation, Déploiement et Sécurité
    Réponses: 6
    Dernier message: 14/06/2006, 21h30
  5. [VBA-E] macro VBA excel suppression graphiques
    Par totoza dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/05/2006, 08h45

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