VBA : Emplacement relatif de selection

Schom

XLDnaute Nouveau
Bonsoir,

J'ai besoin de votre aide pour avancer dans mon projet. Je détaille pour être sûr d'être précis, mais ce n'est pas compliqué à visualiser.


- Soit une cellule active. (Pour l'exemple, plaçons là en A10, mais elle pourrait tout aussi bien être en A30)

- Soit 3 variables identifiées comme suit : Var1, Var2 et Var3.

- Soit une zone de tableau à remplir dont la première colonne est H, la première ligne est la même que celle de la cellule active, et la dernière, précisément 15 lignes plus bas (dans l'exemple, de la ligne 10 à la ligne 25)


Je souhaite qu'il trouve la première ligne disponible (non remplie) dans la zone du tableau pour y inscrire, dans la première colonne, Var1.

Var2 et Var3 devront se trouver sur la même ligne que Var1 dans des colonnes différentes (pas forcement contigüe, mais Var2 sera toujours dans la même colonne, Var3 également)


Dans l'exemple, si le tableau est vide, Var1 sera en H10, Var2 sera en L10 (par exemple) et Var3 en M10.
Si les cellules H10, H11 et H12 sont pleines, il inscrira Var1 en H13. Var2 et Var3 seront respectivement en L13 et M13 (et ce, même si L12 et M12 sont vides)


J'ai trouvé cette formule qui me permet de tester une ligne aprés l'autre, et y inscrire ma variable (je ne sais pas si ça influe, mais cette formule est placée dans un UserFom) :

Range("H65663").End(xlUp).Offset(1, 0).Value = Var1

J'ai essayer beaucoup de choses (avec ActiveCell et OffSet), mais je n'arrive pas à lui dire de commencer son teste dans la zone relative à la cellule active (la première ligne du tableau (la zone) étant la ligne de la cellule active).


Je dois bien avouer que je nage misérablement :rolleyes:

Merci par avance de votre lecture et de votre aide :)
 
Dernière édition:

Excel-lent

XLDnaute Barbatruc
Re : VBA : Emplacement relatif de selection

Bonsoir Schom,


Qu'elle est ton niveau en VBA? Besoin d'une explication détaillé?

En attendant, voici une explication basic.

Schom à dit:
Soit une cellule active

Code:
ActiveCell = ...

Schom à dit:
première ligne est la même que celle de la cellule active, et la dernière, précisément 15 lignes plus bas (dans l'exemple, de la ligne 10 à la ligne 25)

Code:
PremièreLigne = ActiveCell.Row
QuinzeLigneEnDessousLigneActive = ActiveCell.Row + 15


Schom à dit:
Je souhaite qu'il trouve la première ligne disponible (non remplie) dans la zone du tableau

Code:
    Range("F15").End(xlUp).Row     'Se déplace vers le haut
    Range("F15").End(xlToLeft).Row   'Se déplace vers la gauche
    Range("F15").End(xlToRight).Row   'Se déplace vers le droite
    Range("F15").End(xlDown).Row     'Se déplace vers le bas

Dans les cas ci-dessus, Excel part de la cellule F15, se déplace vers ... pour aller jusqu'à la prochaine cellule pleine/vide (dépend de ce que contient F15! Vide? Pleine?).

Remplacer F15 par la cellule de ton choix.

Tu peux remplacer Range("F15") par Cells(15,6)

Schom à dit:
Je souhaite qu'il trouve la première ligne disponible (non remplie) dans la zone du tableau pour y inscrire, dans la première colonne, Var1

Code:
Cells(Range("F15").End(xlDown).Row, 1) = Var1

Schom à dit:
Var2 et Var3 devront se trouver sur la même ligne que Var1 dans des colonnes différentes (pas forcement contigüe, mais Var2 sera toujours dans la même colonne, Var3 également)

Code:
Cells(Range("F15").End(xlDown).Row, [COLOR="Blue"][B]1[/B][/COLOR]) = Var1

1 à remplacer par le numéro de ta colonne ou par une variable contenant le numéro de la colonne voulu.

Bref, avec ça, tu devrais réussir à faire ta macro.

Si besoin de plus d'information, soit plus précis, joint nous un petit fichier ;)

PS. : préférant les Range("...") ou Cells(...,...), j'ai utilisé ceux-ci. Mais si tu préfère, tu peux surement faire la même chose avec Offset(..., ...).

Bonne fin de soirée
 
Dernière édition:

Schom

XLDnaute Nouveau
Re : VBA : Emplacement relatif de selection

Bonjour,

trop de la balle :). Merci infiniment pour ces éclaircissements fort utiles.

Du coup, j'ai identifié la ligne de la cellule active en "L". J'ai fait pété cette formule, qui me met en H de la ligne L, la Var1 :

Cells(L, 8).End(xlUp).Offset(1, 0).Value = Var1

Ca ne résoud malheureusement pas tout. Pour être plus précis, j'ai mis en pièce jointe le fichier concerné.

Encore merci pour le temps passé à expliqué :)
 

Pièces jointes

  • Tableau Etat Stagiaire Alpha1.zip
    24 KB · Affichages: 54

bqtr

XLDnaute Accro
Re : VBA : Emplacement relatif de selection

Bonjour Excel-lent, Schom,

Si je comprends bien ton problème voici comment identifier la ligne vide disponible

Code:
Private Sub boutonValider_Click()

Dim L As Long, Numlign As Long
L = ActiveCell.Row

 If Cells(L, 8) = "" Then
      Numlign = L
 Else
      Numlign = Range("H" & L).End(xlDown).Row + 1
 End If
      
MsgBox Numlign

End Sub
Une fois que tu as le n° de ligne tu remplis tes colonnes comme ceci pour la colonne H : Cells(Numlign,8), pour la colonne I cells(Numlign,9) .../...

Cela suppose que la colonne H sera toujours remplie à chaque enregistrement.

A+
 
Dernière édition:

Schom

XLDnaute Nouveau
Re : VBA : Emplacement relatif de selection

:) Bonjour et merci à toi de ton interet

Voila une approche qu'elle est interessante !!

J'y suis presque. Mais il me donne du fil à retordre le bougre !! :p

Soit les lignes 10, 11, 12 et 13 de la colonne H (la fameuse qui doit être remplie).
Il trouve nickel la ligne 10, celle en regard de la cellule sélectionnée (merci, merci, merci et encore merci pour la formule !). Par contre, l'inscription de la ligne suivante (H11), il fait un bug. Ce qui est d'autant plus étonnant, puisque si je remplie à la main cette cellule H11, et que je relance le formulaire, là, il marche au poil, me trouve la ligne 12, puis la 13, etc.

??? Pourtant, la formule semble au poil, et je ne vois pas ce qui diffère....

Ci-joint, le fichier mise à jour.

PS : je sais que ça sert pas à grand chose, mais désolé de ne pas réussir à résoudre ce genre de petits problèmes seul :(. Mais si ça peut faire avancer le schmil, ça me fait beaucoup evoluer.
 

Pièces jointes

  • Tableau Etat Stagiaire Alpha2.zip
    24.3 KB · Affichages: 52
  • Tableau Etat Stagiaire Alpha2.zip
    24.3 KB · Affichages: 58
  • Tableau Etat Stagiaire Alpha2.zip
    24.3 KB · Affichages: 52

bqtr

XLDnaute Accro
Re : VBA : Emplacement relatif de selection

Re,

Oupsss :eek:
Effectivement, quand on utilise End(xlDown) à partir d'une cellule et que le reste de la colonne est vide l'instruction renvoie le n° de la dernière ligne de la feuille. Donc il faut rajouter un test comme ceci.

Code:
If Cells(L, 8) = "" Then
   Numlign = L
Else
   Numlign = Range("H" & L).End(xlDown).Row + 1
   [B]If Numlign = 65537 Then Numlign = Range("H65536").End(xlUp).Row + 1[/B]
End If

Cells(Numlign, 8).Value = txtNomEntreprise
Cette fois ci j'ai testé et c'est bon.

A+

Edit : Pour Excel 2007 ça ne fonctionnera pas, le n° de la dernière ligne de la feuille
n'est pas 65536 mais 1 048 576
 
Dernière édition:

Schom

XLDnaute Nouveau
Re : VBA : Emplacement relatif de selection

YEEEEEAAAAAHHHHHhhhhhh !!! :)

Bonsoir !

Balouse ! pas d'autres mots, il fallait la trouver celle là !

Nan, sincère, toi et d'autres, vous faîtes un sacré taf de partage de vos connaissances, et c'est vraiment bien !

A toi et à Excel-Lent, merci encore, et respect...


Je ne doute pas que je vais encore bloquer sur certains aspects de mon projet, mais pour cette requete, grâce à vous, sujet clos pour moi :)
 
Dernière édition:

Schom

XLDnaute Nouveau
Re : VBA : Emplacement relatif de selection

Bon, ben pas si clos que ça finalement :eek:

Donc, Salut !

Je m'adresse un petit peu à bqtr, pour la formule qu'il a eu la gentillesse de me renseigner.
Ou je me mélange les pédales, ou il y a un souci que je croyais résolu.

Si le tableau à remplir est le dernier, tout va bien.
Si le tableau n'est pas le dernier et qu'il faut remplir la seconde ligne (ce qui arrivera souvent), là, ça déconne. Il me remplie la seconde ligne du tableau suivant (???) (De plus, il écrase cette ligne si elle est déjà remplie)

J'ai donc creusé cette formule :

If Cells(L, 8) = "" Then
Numlign = L
Else
Numlign = Range("H" & L).End(xlDown).Row + 1
If Numlign = 65537 Then Numlign = Range("H65536").End(xlUp).Row + 1
End If

Mais je vois pas. Comme dirait l'autre, je bloque grave :confused:

Merci de m'avoir lu :)
 

Pièces jointes

  • Tableau Etat Stagiaire Alpha2.zip
    26.3 KB · Affichages: 51
  • Tableau Etat Stagiaire Alpha2.zip
    26.3 KB · Affichages: 51
  • Tableau Etat Stagiaire Alpha2.zip
    26.3 KB · Affichages: 58

skoobi

XLDnaute Barbatruc
Re : VBA : Emplacement relatif de selection

Bonjour le fil,

Schom, la solution de bqtr marche à condition que, comme il l'a dit:
"le reste de la colonne est vide", ce qui n'est pas ton cas vu que tu as plusieurs tableaux séparés par des lignes vides.
Actuellement, si le tableau contient qu'une seule donnée et bien la prochaine cellule qui est trouvée est celle du tableau suivant...
Voici l'adaptation à faire: ajouter une condition supplémentaire vérifiant si la 2eme ligne (L+1)est vide:
Code:
    If Cells(L, 8) = "" Then
        Numlign = L
    ElseIf Cells(L + 1, 8) = "" Then
        Numlign = L + 1
    Else: Numlign = Range("H" & L).End(xlDown).Row + 1
    End If
Je te conseille d'exécuter le code en pas à pas pour bien comprendre ce qui se passe.
Pour ce qui est de .End(Xl...), tu peux reproduire cela avec le clavier:
End: touche Fin
XlDown: flèche bas du clavier
sachant que les autres possibilitées sont xlup, xltoleft, xltoright...

Voili voilou.
 
Dernière édition:

bqtr

XLDnaute Accro
Re : VBA : Emplacement relatif de selection

Bonsoir,

Pffffff, décidément :mad:,

End ne renvoie jamais la cellule appelante donc et comme le dit skoobi, End va aller chercher la première cellule non vide rencontrée (la première du tableau suivant ou à défaut la dernière ligne de la feuille).
Il faut donc bien tester les deux premières lignes pour que tout fonctionne correctement.

En espérant faire mieux la prochaine fois :)

Bonne soirée.
 

Schom

XLDnaute Nouveau
Re : VBA : Emplacement relatif de selection

Bonjoir

C'est une bonne réponse collective de nos amis bqtr et Skoobi ! :p

bqtr, ne soit pas trop dur avec toi. Sinon, imagine comment je devrais être avec moi même.....me jeter à la poubelle. Vu mon nival, c'est ce que je mériterais ! :D

Quoiqu'il en soit, j'apprécie au plus haut point vos explications qui valent toutes les solutions du monde.
pour le pas pas, je savais pas qu'on pouvait (si c'est bien d'un mode dont tu parles). M'en vais creuser ça :)


Jamais 203, mais re sujet clos pour moi...
 

Discussions similaires

Statistiques des forums

Discussions
312 685
Messages
2 090 945
Membres
104 705
dernier inscrit
Mike72