Selection de cellule après un while.

[Résolu]
Signaler
Messages postés
16
Date d'inscription
mercredi 3 mai 2006
Statut
Membre
Dernière intervention
19 juin 2006
-
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
-
Bonjour à tous !

je suis en train d'apprendre le Vb en même temps que la réalisation d'un projet et j'avoue me faire rattraper par le temps.
Mon problème est le suivant:

D'une part, je doit en fonction du choix d'un patient dans une combobox, parcourir sur une autre feuille une colonne où tous les noms y sont repetoriés.
Ensuite une fois le nom trouvé dans la colonne, je doit (en utilisant un collage spécial) copier dans un planning annuel toutes les horaires effectués dans le mois et affichés en ligne (2 colonnes et 4 lignes plus bas que le nom du patient).

Mon code:

Private Sub ComboBox1_DropButtonclick()

Dim I As Integer, j As Integer
Dim nom As String

nom = ComboBox1.Value
ComboBox1.Clear
I = 4

While Not IsEmpty(Sheets(1).Cells(I, 2).Value)
    ComboBox1.AddItem (Sheets(1).Cells(I, 2).Value)
    I = I + 1
Wend

ComboBox1.Value = nom

j = 7
While  Janvier.Cells(j, 2) = nom
          j = j + 1
Wend

Range(Cells(j + 4, 4), Cells(j + 5, 34)).Select
    Selection.Copy
   Annuel.Range("B8:C38").PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
         Application.CutCopyMode = False

End Sub

Bon je pense que c'est du gros racolage d'une part et surtout (dumoins je l'espère pas) rempli d'anneries...
Je n'ai pas d'erreur apparente mais le problème doit deja venir du fait que le 'j' de ma selection doit être 7 et non la valeur prise avec mon incrémenntation, et mon problème reside justement ici :/
Je ne sais pas si j'ai été suffisament clair, en tout cas je vous remercie de l'intention que vous pourrez me porter.

Bye.

10 réponses

Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
4
Salut,
Tiens testes ceci j'ai pas testé, mais ça devrais le faire
 Private Sub CommandButton2_Click()

  Private Sub ComboBox1_DropButtonclick()

    Dim Myrange As Range

    Dim I As Integer, j As Integer

    Dim nom As String

    nom = ComboBox1.Value

    ComboBox1.Clear

    I = 4

    While Not IsEmpty(Sheets(1).Cells(I, 2).Value)

      ComboBox1.AddItem (Sheets(1).Cells(I, 2).Value)

      I = I + 1

    Wend

    ComboBox1.Value = nom

    Set Myrange = ActiveSheet.Columns(2).Find(nom, LookIn:=xlValues)

    Myrange.Offset(4, 2).Resize(2, 31).Select

    Selection.Copy

    Annuel.Range("B8:C38").PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _

        False, Transpose:=True

    Application.CutCopyMode = False

  End Sub

Cordialement, Jean-Paul  
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Bonjour,
Si j'ai bien compris tu veux que j soit toujours égal à 7 alors pourquoi tu l'incrémente.
Je comprends pas bien ton probleme.

 Drikce 06
Messages postés
16
Date d'inscription
mercredi 3 mai 2006
Statut
Membre
Dernière intervention
19 juin 2006

En fait, je parcours ma colonne '2' en vérifiant à chaque ligne si la valeur de la cellule est égale au nom selectionné dans ma combobox.
Et j'incrémente jusqu'à trouver la valeur égale (il la trouvera forcément, les valeurs de ma combobox et celles de la colonne sont liées). Et ensuite, c'est ici que je coince, selon la ligne 'j' correspondant au nom trouvé, je copie les cellules se trouvant 2 colonnes à droites et 4 lignes plus bas.

Par exemple, si le nom est trouvé en ligne 7, la macro me copie les cellules ("D11:AH12").
Si cette fois ci, le nom est trouvé en ligne 13, la macro me copie les cellules ("C17:AH18").

Ps: Effectivement mon incrémentation avec un pas de 1 n'est pas explicite, mes noms sur la colonne se trouve tous les 6 lignes ( une incrémentation 'j = j+6' aurai d'ailleurs fait l'affaire).

Voila, j'espere avoir éclairci un peu la chose :°
Messages postés
16
Date d'inscription
mercredi 3 mai 2006
Statut
Membre
Dernière intervention
19 juin 2006

Bonjour valtrase, et merci de ta réponse.

Après avoir testé ta méthode, j'ai eu un petit problème sur cette ligne:




Myrange.Offset(
4
,
2
).Resize(
2
,
31
).Select

> Variable objet ou viariable de bloc With non définie.

J'ai donc tenté de remanier un peu l'initialisation de 'MyRange' et je tombe le plus souvent sur une message d'erreur concernant le Select de l'objet Range.
Ce qui est bizarre c'est qu'il définit à priori bien le 'MyRange'.
Je continue à faire des petits tests pour trouver l'origine, mais en tout cas, merci beaucoup pour ce code bien lisible et sans doute plus approprié.

Bye.
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
4
Salut,
Y'a pas de raison .....
envoi moi ton code que j'y jette un coup d'oeuil

Cordialement, Jean-Paul  
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
Messages postés
16
Date d'inscription
mercredi 3 mai 2006
Statut
Membre
Dernière intervention
19 juin 2006

Bonjour à tous, et salut valtrase.

Mon code est absolument identique au tiens concernant la recherche et le collage.
Petite précision sur laquelle j'aurais peut être du m'arrêter, la combobox dans la quelle on choisit le nom se trouve sur la feuille 'Annuel', là ou on colle les horaires.
Et la macro va donc chercher dans les feuilles correspondant au mois ces horaires.

valtrase si l'erreur persiste, désires-tu que je t'envoie tout mon code? mon appli? ou simple la feuille 'Annuel'.

Merci en tout cas pour l'interet, bye :)
Messages postés
16
Date d'inscription
mercredi 3 mai 2006
Statut
Membre
Dernière intervention
19 juin 2006

Re bonjour, je me permet juste d'ajouter un nouveau post.
Le problème se situe tout simplement sur :

Set Myrange = Sheets(3).Columns(2).Find(nom, LookIn:=xlValues) 'ou remplacer Sheets(3) par Janvier
    Myrange.Offset(4, 2).Resize(2, 31).Select

il n'arrive pas à selectionner les cellules correspondant à la feuille n°3.
si je procède de cette façon,

Janvier.Select
Set MyRange = Activesheet.Columns(2).Find(nom, LookIn:=xlValues)
Myrange.Offset(4, 2).Resize(2, 31).Select

il arrive bien à identifier les cellules concernées et les coller, seulement j'aimerai ne pas passer par un Select. En supposant, que l'opération doit se faire pour chaque mois, cela risque de devenir un peu lourd à la longue (de voir l'écran spamer des feuilles différentes toutes les minutes :°).

Merci de vos réponses.
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
4
Re,
Pour sélectionner une feuille ou alors copier à partir d'une feuille tu fait
Tu peux donner soit un index de feuille soit les nommer noublie pas les guillemets. 
Sheets("Janvier").Activate ou
Sheets("Janvier").Range("A1").Value = Sheets("Toto").Range("A10").value
tu peu aussi utiliser le nom d'une plage:
ex: Set Maplage = Sheeets("Janvier").Range("A1:A10")
MaPlage.Value = Range(Sheets("Toto").Range("A1:A10).value

Concernant ton code si ça plante encore fait un .Activate dans ton code juste avant le Set MyRange =........

n'a de valeur que s'il est partagé
Messages postés
16
Date d'inscription
mercredi 3 mai 2006
Statut
Membre
Dernière intervention
19 juin 2006

Re, encore Merci valtrase :)

Un dernier problème se pose... Malgré le 'DropButtonClick', la recherche ainsi que le collage s'opère dès que je clique sur la combobox et non une fois l'employé selectionné dans celle-ci. Conclusion, je ne peux pas selectionner d'autres employés, l'opération s'effectuant à chaque fois sur celui déjà present dans la comboBox :/
Avec un 'Click', ce me fait évidement tourner le prgramme en boucle ainsi qu'avec un 'Change' ou 'SelectionChange'.

Merci .
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
4
Re,
Tu as aussi le double clic maintenant si tu te prends trop la tête rajoute un bouton et modifie un peu ton code.

Cordialement, Jean-Paul  
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé