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 :

[VBA-Excel]Décale colonne tant que valeur cellule ....


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 36
    Points : 23
    Points
    23
    Par défaut [VBA-Excel]Décale colonne tant que valeur cellule ....
    Bonjour!

    Je pense que c'est simple à écrire mais je n'y arrive pas.
    j'ai récupéré la valeur d'une variable (en "A1" qui s'appelle "Nom") dans le fichier "projet", feuille "1" pour l'utiliser dans un autre fichier "cdes" , à partir de "Q4".

    Je voudrais en fait faire une recherche de la valeur Nom à partir de Q4, sur la même ligne, en sautant d'une colonne tant que la valeur n'est pas trouvée. Pour l'instant la zone de recherche va de Q4 à BD4.

    Si la valeur est trouvée, alors je fais un tri sur la colonne en ne sélectionnant que les cellules non vides, puis je sélectionne les données dans les colonnes C, D, I, J et K (attention, le nombre de lignes n'est pas connu d'avance), je copie puis je colle dans un autre fichier, en l'occurence ici la feuille "1" du fichier "projet".

    Si quelqu'un peut m'aider...Merci beaucoup!

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Un peu de code nous aiderait à te répondre.

    Pour connaître ta dernière ligne, tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        DernièreLigne = Cells(65535, 1).End(xlUp).Row
    Que tu peux faire pour chaque colonne.
    Ensuite, je ne pense pas que tu puisses coller une sélection de colonnes non consécutives en une seule fois pour les copier et les coller (en VBA97, on ne peut pas)
    Tu testes.

    A+

  3. #3
    Expert éminent sénior


    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
    Points : 20 040
    Points
    20 040
    Par défaut Re: [VBA-Excel]Décale colonne tant que valeur cellule ....
    j'ai du mal à comprendre...

    Citation Envoyé par Angel79
    Je voudrais en fait faire une recherche de la valeur Nom à partir de Q4, sur la même ligne, en sautant d'une colonne tant que la valeur n'est pas trouvée. Pour l'instant la zone de recherche va de Q4 à BD4.
    tu ve rechercher la valeur contenue dans Cellule Projet - Feuille 1 - A1 , dns les Cellules Q4 ,S4, U4... (en sautant une colonne tant que la cellule n'est pas vide?


    Citation Envoyé par Angel79
    Si la valeur est trouvée, alors je fais un tri sur la colonne en ne sélectionnant que les cellules non vides, puis je sélectionne les données dans les colonnes C, D, I, J et K (attention, le nombre de lignes n'est pas connu d'avance), je copie puis je colle dans un autre fichier, en l'occurence ici la feuille "1" du fichier "projet".

    Si quelqu'un peut m'aider...Merci beaucoup!
    :

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 36
    Points : 23
    Points
    23
    Par défaut
    Oui c'est vrai, c'est pas clair.
    en fait, je veux prendre la valeur contenue dans la cellule Projet - Feuille 1 - A1 et la chercher dans cellules Q4, R4, S4, T4, ... de Commandes - Feuille 2 (en me décalant d'une cellule vers la droite) tant que la valeur de A1 ne correspond pas à Q4, R4, S4, T4.... jusqu'à BD4.

    Puis si la valeur de A1 = "la cellule" 4, alors je vais sélectionner les données qui sont dans les colonnes C, D, I, J et K, à partir de la ligne 5, pour les recopier dans un autre fichier.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 36
    Points : 23
    Points
    23
    Par défaut
    J'ai bien du code à vous montrer mais ça fonctionne mal, dans la fonction, la recherche ne se fait pas par colonne mais par je ne sais quoi je ne sais où.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function CetteCelluleEstLaBonne(ByVal NumColonne As Integer) As Boolean
        CetteCelluleEstLaBonne = True
        NumColonne = 4
        i = Numéro
        If Not (Cells(i, NumColonne)) Then
                CetteCelluleEstLaBonne = False
        End If
     
        End Function


    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
    Sub Actualiser()
     
    ActiveWorkbook.Worksheets(ActiveSheet.Index + 1).Select
    'if ActiveSheet.Index + 1 est le dernier alors retour "général", ça je n'arrive pas à le faire
     
    'prend la variable en A1 (càd le n° projet) pour
    's'en servir comme filtre dans commandes
     
    Range("A1").Select
    Numéro = ActiveCell.Value
    Windows("_Commandes.xls").Activate
    Sheets("Cdes_1").Select
    Range("Q4").Select
     
    DernièreCellule = Range("BD4")
    For i = Numéro To DernièreCellule
        If CetteCelluleEstLaBonne(i) Then
        Cells("C5").Copy
        End If
     
    Next
     
    Actualiser
     
    End Sub
    [/code]

  6. #6
    Expert éminent sénior


    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
    Points : 20 040
    Points
    20 040
    Par défaut
    tiens un peu de code .. de recherche j'ai considéré que les classeurs Cde.xls et projet.xls été ouvert....

    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
    Sub Test()
    Dim Fp As Worksheet 'Feuille ¨projet
    Dim Fcde As Worksheet 'Feuille Commande
    Dim stNom As String 'Valeur à chercher
    Dim r As Range ' Plage de recherche
    Dim c
    Set Fp = Workbooks("projet.xls").Sheets(1)
    Set Fcde = Workbooks("cde.xls").Sheets(2)
    stNom = Fp.Range("A1") 'Récupere la valeur à chercher
     
    'définit la Zone de recherche
     
    Set r = Fcde.Range("Q4:BD4")
     
    Set c = r.Find(stNom)
     
    If c Is Nothing Then
      MsgBox stNom & " ... " & Introuvable
    Else
     MsgBox stNom & " Trouvé colonne " & c.Column
    End If
     
    End Sub
    dit nous si cela t'éclaire...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 36
    Points : 23
    Points
    23
    Par défaut
    merci!
    j'essaye d'adapter cela à mon cas, parce qu'en fait, je n'ai pas besoin de msgbox ici.
    Le problème qui se pose aussi, c'es que Projet n'a pas qu'une feuille mais plusieures et je voudrais faire ça dans chaque feuille hormis la première qui est "Général".

  8. #8
    Expert éminent sénior


    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
    Points : 20 040
    Points
    20 040
    Par défaut
    pour parcourir les feuilles du classeur projet tu peu utiliser une boucle for
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ...
    Dim c
     
    Set Fcde = Workbooks("cde.xls").Sheets(2)
    For each Fp in WorjBooks("projet.xls")
     if fp.Name <> "Général" then
       stNom = Fp.Range("A1") 'Récupere la valeur à chercher 
       (...)
     
     end if
    next
    ..

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 36
    Points : 23
    Points
    23
    Par défaut


    qui peut m'aider?
    quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set c = r.Find(stNom)
     
            If c Is Nothing Then
             MsgBox stNom & " ... " & Introuvable
                Else
             Fcde.Activate
             c.Select
    et que je suis sur la feuille "1" il me met c=10 et me sélectionne la colonne contenant le chiffre 10 alors qu'au départ stNom = 1 !!

    Pourquoi y-a-t'il un décallage?

  10. #10
    Expert éminent sénior


    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
    Points : 20 040
    Points
    20 040
    Par défaut
    essai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set c = r.Find(What:=stNom,LookAt:=xlWhole)

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 36
    Points : 23
    Points
    23
    Par défaut
    Merci ça va mieux avec ce que tu m'as indiqué!

    Par contre, j'ai une autre question:

    quand j'ai une macro dans laquelle je fais un "copy", "end sub" que je reviens dan une autre macro et que je demande à un moment donné
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Cells(LigneVideNext, 1).Select
                ActiveSheet.Paste
    il ne me copie rien. Un msgbox d'erreur me dit :
    "la méthode Paste de la classe Worksheet a échoué".
    Qu'est-ce que cela signifie?

  12. #12
    Expert éminent sénior


    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
    Points : 20 040
    Points
    20 040
    Par défaut
    cela dépend des actions que tu fais entre la copy ( copie des données dans le presse papiers ) et le paste ( coller les données du presses papiers..)

    il y as plein ... d'actions qui peuvent vider le presse papier ..

Discussions similaires

  1. Réponses: 16
    Dernier message: 11/12/2013, 11h20
  2. [VBA-excel] Affecter une date à la première cellule pleine
    Par DVano dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 10/11/2006, 12h06
  3. Réponses: 2
    Dernier message: 27/09/2006, 19h41
  4. [VBA-Excel] Validation d'une fusion de cellule
    Par marsupoilu dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/07/2006, 14h26
  5. [VBA - ACCESS] tableau en tant que prametre optionel
    Par jarod_bx dans le forum Access
    Réponses: 1
    Dernier message: 30/04/2006, 11h31

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