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 :

plage de selection


Sujet :

Macros et VBA Excel

  1. #1
    Membre très actif Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Par défaut plage de selection
    Salut a tous,

    Alors voila, je développe un ptit projet dans lequel je créé des plage de selection comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim plageToutLeschamps As Range
    Set plageToutLeschamps = Feuil5.Range("B1:B" & indexLigne)
    plageToutLeschamps.Name = "laListeDeToutLesChamps"
    Elles sont au nombre de 4 (mais c'est pas important).

    Dans mon code je voudrais pouvoir faire qqc comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each Cell in plageToutLesChamps
        --------
    Next
    Le probleme c'est que le compilateur attend des choses apres "plageToutLesChamps", je ne dois donc pas avoir la bonne sytaxe ... quelqu'un pour m'aider svp ?

  2. #2
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Perso je fait simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    dim c as range, plage as range
    set plage=range("A1","A67")
    for each c in plage
    ...
    next c
    Si il te demande quelque chose essai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each Cell in plageToutLesChamps.Range
    ...
    Next Cell

  3. #3
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Bonjour,
    tu as déclaré cell en range?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dim cel as range 'je préfère ne mettre qu'un seul l pour ne pas confondre avec cells
    Dim plageToutLeschamps As Range
    Set plageToutLeschamps = Feuil5.Range("B1:B" & indexLigne)
     
    for each cel in plageToutLeschamps 
    ...
    next cel
    Edit bonjour diude on c'est croisé

  4. #4
    Membre très actif Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Par défaut
    il me met "objet requis" en surlignant la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for each cel in plageToutLeschamps
    ma variable cel est bien déclaré en Range, ma plage egalement.

  5. #5
    Membre très actif Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Par défaut
    j'ai trouvé mon soucis, je déclarrais mes variable range dans un module a coté et j'appelai un fonction qui intialisai le tout. en mettant direct dans le code ca fonctionne.

  6. #6
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Citation Envoyé par Nako_lito Voir le message
    je déclarrais mes variable range dans un module a coté .
    Vba est un peu basique comme langage il ne va pas voir "a coté"
    pense au . Et met toi en mode explicite cela t'évitera ce genre de bêtise
    (un tuto si tu ne connais pas comment le faire en automatique)

  7. #7
    Membre très actif Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Par défaut
    merci

  8. #8
    Membre très actif Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Par défaut
    Je reviens sur cette fonctionnalité qui permet de limiter l'espace de travail a une selection.

    Je vais essayer d'expliquer le plus clairement possible

    Ma feuille se contruit comme suit:

    NomRq __ ChampRq __ indexChamp

    J'ai une plage de travail "A1:A" & indexLigne (je prend donc tout les "NomRq").

    Je voudrais que pour toute les cases dans cette selection, il teste si NomRq = combobox.text. Si c'est le cas, il efface la ligne entiere avec la fonction .Delete Shift:=xlUp

    J'ai ecris ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set plageDeTravail = Feuil1.Range("D2:D" & derniereLigne)
                For Each cel In plageDeTravail
                    If cel.Value = ComboBoxListe.Text Then
                        cel.EntireRow.Copy
                        i = cel.Row
                    End If
                Next
    Il trouve la premiere case qui correspond, mais ne supprime que la premiere ligne. ensuite la valeur de cel passe a cel.Value = <Objet requis>, cela voudrais t'il dire qu'il faut redéfinir la plage a chaque fois qu'il trouve et qu'il efface ?

  9. #9
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Une journée nuageuse rien de tel pour programmer. Cela évite d'envier ceux qui vont à la plage, bon bref
    Dans ce cas une boucle for sur un indice est plus pratique tu as une bonne maitrise du sens de parcoure et pas de problème de plage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i = derniereLigne to 2 step -1
    if cells(i,1)=ComboBoxListe.Text then
    rows(i).delete
    end if
    next i

  10. #10
    Membre très actif Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Par défaut
    je n'ai pas préciser et c'est en voyant le code que tu a mis, que je me suis rendu compte que c'est quand meme super important :p :

    sur une premiere feuille j'ai une liste de rq avec des informations diverses et variées, sur une seconde feuille j'ai ces nom de requete mais avec leur champs, ce qui fait qu'une requete est renseigné dans deux feuille, une fois pour les infos generale (ce qu'elle fait, par qui, pourquoi) et une autre fois pour renseigner les champs.

    C'est vrai que la plage aujourd'hui, c'est pas le pied, mieux vaut etre devant son pc et programmer ^^

  11. #11
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Et sur ta deuxième feuille il y a une correspondance entre les lignes?

  12. #12
    Membre très actif Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Par défaut
    C'est a dire ? tu veux savoir si la rq1 est en ligne x sur les deux feuille ? La reponse est non, je te met un petit morceaux d'exemple

    Feuille 1
    Type/ Domaine/ Source des données/ Référence technique/ Définition/ Objet d'origine/ Critére(s) Développeur/ Edition/ Editeur/ Date création/ Date MAJ
    une requete par ligne.
    GA / rq1 / fait ca / l'objet / tout les criteres / le développeur type de rq / outils de dev 24/07/2009 24/07/2009


    Feuille 2
    RQ/ CHAMPS/ INDEX
    rq1 / Champ1/ 1
    rq1 / Champ2/ 2
    rq1 / Champ3/ 3
    rq2 / Champ1/ 1
    rq2 / Champ2/ 2
    rq3 / Champ1/ 1
    rq3 / Champ2/ 2
    rq3 / Champ3/ 3
    rq3 / Champ4/ 4
    rq3 / Champ5/ 5

  13. #13
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    regarde ceci à adapter (et corriger les erreurs de frappe)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    dim c as range, i as long, derniereLigne2 as long, derniereLigne as long
     
    for i = derniereLigne to 2 step -1
    if cells(i,1)=ComboBoxListe.Text then
       derniereLigne2=feuil2.Range("A1").End(xlDown).Row
       set c=feuil2.range("A1:A" & derniereLigne2).find(cells(i,1))
       if not c is nothing then c.entirerow.delete
       rows(i).delete
    end if
    next i

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

Discussions similaires

  1. Copie de plage sans .Select
    Par linkcr15 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/05/2012, 15h46
  2. Retrouver la plage des selections sur les feuilles
    Par mennix dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/04/2009, 20h40
  3. [VBA] syntaxe selection de plage
    Par fulgaro dans le forum Access
    Réponses: 4
    Dernier message: 27/10/2006, 16h32
  4. [VBA-E]Selection plage de cellules variable
    Par julien5 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/05/2006, 15h51
  5. [VBA-E] selection plage + filtre auto
    Par noug dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/05/2006, 16h57

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