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 :

Recopie de colonne onglet différent sans cellules vides [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Recopie de colonne onglet différent sans cellules vides
    Bonjour à tous,

    D'une base de données sur un onglet, je souhaite en recopier une colonne entière sur un deuxième onglet mais sans les cellules vides que pourrait contenir la colonne de la base de données.

    Problème simple mais pour le moment je n'ai pas trouvé de solution.

    Merci de m'aider !

  2. #2
    Membre à l'essai
    Homme Profil pro
    Mécatronicien
    Inscrit en
    Mars 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Mécatronicien

    Informations forums :
    Inscription : Mars 2015
    Messages : 20
    Points : 16
    Points
    16
    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
    Dim i As Long 'ligne i variable
    Dim ligneA As String ' numéro
    Dim ligneB As Variant  'nom 
    For i = 1 To 100
      If Not IsEmpty(Range("B" & i + 1).value) Then
         Let LigneB = Range("B" & i + 1).value
         If Not IsEmpty(Range("A" & i + 1).value) Then
            Let LigneA= Range("A" & i + 1).value
            End If
         End If
    Debug.print ligneA ; ligneB
    Next i
    Je l'utilise actuellement pour un projet mais normalement je le Print sur un format txt.
    Normalement tu peux voir le résultat dans la case exécution, pour savoir si c'est ça que tu veux.

    A la prochaine,

    gabi974

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 940
    Points : 28 938
    Points
    28 938
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En VBA La méthode AdvancedFilter en utilisant un critère calculé avec comme formule (si la colonne à copier est la première)
    Sans VBA, même critère et utiliser le filtre avancé d'excel

    Tutoriel à lire éventuellement Les filtres avancés ou élaborés dans Excel

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Merci pour votre réponse,

    mais si je n'ai pas réussi à le faire c'est que je ne suis pas très doué. J'ai besoin de savoir quels sont les informations à insérer dans ce code pour que les informations de la colonne x de l'onglet X se recopie dans la colonne y de l'onglet Y.

    merci beaucoup

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 940
    Points : 28 938
    Points
    28 938
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il est inutile de s'autoflageller.
    Avec les explications que je t'ai données, le tutoriel à lire, l'enregistreur de macros est ton meilleur ami.
    Si tu ne t'en sors pas ensuite, reviens avec le bout de code et on t'aidera volontiers.


    Hâtez-vous lentement, et sans perdre courage,
    Vingt fois sur le métier remettez votre ouvrage,
    Polissez-le sans cesse, et le repolissez,
    Ajoutez quelquefois, et souvent effacez.

    Nicolas Boileau

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Merci,

    J'ai commencé à triturer votre fichier et le mien après avoir lu et expérimenté le tutoriel, le point positif c'est que maintenant je sais faire des tris élaborés mais je n'en fais pas ce que je voudrais.
    Le problème avec le tri élaboré c'est la difficulté à lui dire d'envoyer l'exportation sur une autre feuille ...
    Je tape ma macro sur la feuille de destination, mais si je lui demande en modifiant "range" d'aller chercher les infos sur la feuille d'à côté il ne veut pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Export()
      Range("'Données1'!A1:G16").AdvancedFilter _
             Action:=xlFilterCopy, _
             CriteriaRange:=Range("I1:I3"), _
             CopyToRange:=Range("I15:M15"), _
             Unique:=False
    End Sub
    Voilà ou j'en suis

    A moins que ce ne soit le contraire qu'il fasse faire. Entrer le code sur la feuille des données et lui demander d'exporter CopyToRange:=Range("'Tableauexport'!I15:M15").

    Non ?

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 940
    Points : 28 938
    Points
    28 938
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme expliqué dans le tutoriel, lorsque l'on utilise le Filtre avancé d'excel manuellement pour faire une copie vers une autre feuille que celle où se trouve les données, il y a un bug et pour pallier ce problème, il faut partir de la feuille où doit venir la copie (Importer);
    Par contre la méthode AdvancedFilter elle n'a pas de problème. Sa syntaxe est RangeData.AdvancedFilter xlFilterAction, Criteria, RangeCopy

    Donc pour ton cas, voici un petit exemple (La plage L1:L2) est la zone des critères avec en L1 comme étiquette _fn_ et en L2, la formule =NBCAR(A2)>0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Test_A()
     Dim rngSource As Range, rngCriteria As Range, rngTarget As Range
     With ThisWorkbook
      With Worksheets("bd")
       Set rngSource = .Range("A:A"): Set rngCriteria = .Range("L1:L2")
      End With
      Set rngTarget = .Worksheets("Export").Range("A1")
     End With
     rngTarget.Clear
     rngSource.AdvancedFilter xlFilterCopy, rngCriteria, rngTarget
     Set rngSource = Nothing: Set rngCriteria = Nothing: Set rngTarget = Nothing
    End Sub

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut heu
    sinon en pure vba et utilisation de variables tableaux
    une fonction avec injection d'arguments afin de la paramétrer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test1()
    Copie_Colonne_TO Sheets(1), Sheets(2), 1, 6
    End Sub
     
    Function Copie_Colonne_TO(sheet1, sheet2, col_a_copier, col_destination)
    Dim tablo, tablo2
    With sheet1
    tablo = .Range("A1:A" & .Cells(Rows.Count, 1).End(xlUp).Row)
    For i = 1 To UBound(tablo)
    If tablo(i, 1) <> "" Then e = e + 1: tablo2(e, 1) = tablo(i, 1)
    Next
    sheet2.Cells(1, col_destination).Resize(UBound(tablo2), 1) = tablo2
    End Function

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Bonjour Patrick, bonjour Philippe,

    restons lucides, je n'ai pas un niveau suffisant en code et sur excel pour comprendre vraiment les solutions que vous me proposez, je pense que ça nécessite de connaitre un minimum de choses.
    En gros vous me parlez un petit peu chinois !

    Mais je suis coriace, alors persévérez si vous en avez le temps ! Peut-on fonctionner autrement ? En s'échangeant des fichiers par exemple ?

    Merci

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 940
    Points : 28 938
    Points
    28 938
    Billets dans le blog
    53
    Par défaut
    Bonjour Florian,
    Le tutoriel traitant des filtres avancés d'excel que tu as lu est accompagné d'un classeur en téléchargement ce qui t'a permis il me semble et d'après ce que tu as écrit de mieux appréhender le sujet.
    Le code que j'ai publié plus haut, ne nécessite pas de classeur et de plus il est accompagné de commentaires.
    Il s'agit d'avoir la première colonne avec quelques cellules vides et de modifier le cas échéant le nom des deux feuilles (celle des données sources que j'ai nommée bd et la feuille cible que j'ai nommée Export). Placer en cellule L1 de la feuille source la valeur _fn_ et en cellule L2 la formule
    La première ligne de la liste de données de la feuille bd doit bien entendu avoir les étiquettes de colonnes

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Merci Philippe,

    Je pense avoir réussi, mais je voudrais remplacer la condition "cellule non vide" (=NBCAR(A2)>0) par une valeur fixe ou un texte.
    Dois-je y écrire ="MONTEXTE" ?

    Merci

  12. #12
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 940
    Points : 28 938
    Points
    28 938
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si tu veux que les lignes dont la cellule de la colonne A contient la valeur alphanumérique "Developpez" soient exportées
    Si tu veux la même condition mais que tu crains et tu as raison d'ailleurs que les données soient mal encodée (par exemple casse différente et un ou plusieurs caractères espacé avant et après), la formule sera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SUPPRESPACE(MINUSCULE(A2))="developpez"
    Tu peux imaginer toutes les formules que tu souhaites, du moment que cette formule renvoie VRAI ou FAUX.
    Si la valeur est VRAI, la ligne est exportée.
    Il faut bien entendu connaître les formules d'excel

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    J'y ai rentré =EXACT("montexte";A2) mais il n'a pas l'air de comprendre et m'exporte un peu n'importe quoi

  14. #14
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 940
    Points : 28 938
    Points
    28 938
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Et bien pourtant, cela fonctionne parfaitement.
    Il faut vérifier s'il n'y a pas une autre valeur que montexte dans la cellule, si la casse est correcte et s'il n'y a pas de caractères espacés.
    Auquel cas, il faut placer cette formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =EXACT("montexte";SUPPRESPACE(MINUSCULE(A2)))
    As-tu bien une étiquette de colonnes de la zone de critères qui est d'orthographe différentes de celles des étiquettes de colonnes de la zone Data ?

    Et si tu veux que le texte cherché soit présente dans la cellule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NON(ESTERR(CHERCHE("montexte";A2)))

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Alors,

    Un critère ça fonctionne en effet. Deux macros pour deux critères également. Mais si je veux étendre mon exportation des données à deux critères pour deux colonnes ? comment dois-je procéder ?

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Ah non ça marche !!!!

    MERCI beaucoup pour votre patience ! Bon weekend

  17. #17
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 940
    Points : 28 938
    Points
    28 938
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ah non ça marche !!!!
    Super
    Mais si je veux étendre mon exportation des données à deux critères pour deux colonnes ? comment dois-je procéder ?
    Je suppose que tu as utilisé les formules ET ou OU ?

  18. #18
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Alors non, j'ai modifié la plage de données et la plage de critère en m'inspirant de ce que vous disiez dans votre aide. Que la position du critère calculé influait sur la valeur logique de la combinaison de deux critères.

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

Discussions similaires

  1. Créer une liste de cellules sans cellule vide
    Par MathildeRossi dans le forum Excel
    Réponses: 6
    Dernier message: 09/12/2014, 10h25
  2. [XL-2003] recopie automatique ligne au dessus si cellule vide
    Par jeandani2012 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/08/2012, 14h09
  3. [XL-2003] Calcul de la moyenne sans cellule vide
    Par yfchauer dans le forum Excel
    Réponses: 8
    Dernier message: 14/08/2012, 22h13
  4. [XL-2003] Classement décroissant des risques (sans cellule vide)
    Par AtomX dans le forum Excel
    Réponses: 4
    Dernier message: 26/01/2010, 11h56
  5. combobox sans doublon (colonne de reference avec cellule vide)
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/04/2008, 17h08

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