Utilisation de range et cells

Bonsoir

j'ai une tout petite question : comment ecrire la plage Range("F19:K19") à l'aide de l''expression équivalente avec cells(i , j) ou

i et j sont mes lignes et colonnes ?

Merci pour votre réponse

Bonsoir,

une façon :

cells(19,"F").resize(1,6)

ou

cells(19,6).resize(1,6)

eric

Bonsoir

Bonsoir eriiic

A tester

Sub test()
Dim J As Long     ' La ligne
Dim I As Integer  ' La colonne
  I = 6
  J = 19
  Range(Cells(J, I), Cells(J, I + 5)).Select
End Sub

Merci pour vos réponses ! une dernière question , peut on utiliser d'autre variables que i et j pour definir une cellule sous la

forme cells(i,j) ? je pensais à cells(k,z) cela est il possible ?


... car j'essaie d'integrer tout cela dans le code qui suit

Sub REPET()
With ActiveSheet
Dim i, k As Long    ' La ligne
Dim j, l As Integer ' La colonne

    'je saisi une coordonnée initiale : 
    i = InputBox("numero de ligne (debut) :", "message")
    j = InputBox("numero de colonne (debut) :", "message")

    'je saisi une coordonnées finale : 
    k = InputBox("numero de ligne (fin) :", "message")
    l = InputBox("numero de colonne (fin) :", "message")

   ' dans la plage constituée par la cellule initiale et la cellule finale je dois placer le mot "RH"
  ' la cellule initiale et la cellule finale se trouvent sur la meme ligne 

  Range(Cells(i, j), Cells(k, l)).Select
  Range(Cells(i, j), Cells(k, l)) = "RH"

End With

End Sub

seulement j'ai une belle erreur à la ligne :

Range(Cells(i, j), Cells(k, l)).Select

Merci pour toute correction car je n'arrive pas à résoudre ce petit soucis

Bonjour

InputBox te retourne une chaine de caractères et ligne et la colonne doivent être des nombres dans Cells(j,i)

Une solution consiste à bien typer tes variables

Tu avais oublié de typer I et J (par défaut ce sont des Variant (accepte toutes sorte de type de données - voir l'aide)

Sub REPET()
Dim i As Long, k As Long     ' La ligne
Dim j As Integer, l As Integer ' La colonne

  With ActiveSheet

    'je saisi une coordonnée initiale :
    i = InputBox("numero de ligne (debut) :", "message")
    j = InputBox("numero de colonne (debut) :", "message")

    'je saisi une coordonnées finale :
    k = InputBox("numero de ligne (fin) :", "message")
    l = InputBox("numero de colonne (fin) :", "message")

    ' dans la plage constituée par la cellule initiale et la cellule finale je dois placer le mot "RH"
    ' la cellule initiale et la cellule finale se trouvent sur la meme ligne

    'Range(Cells(i, j), Cells(k, l)).Select
    Range(Cells(i, j), Cells(k, l)) = "RH"

Bonjour tous,

Un autre conseil ?

Emploi des variables qui rappel leur fonction..

Sub REPET()
Dim LigDep As Long, LigFin As Long     ' La ligne
Dim ColDep As Integer, ColFin As Integer ' La colonne

 ' With ActiveSheet 'Pas nécessaire, arrivera toujours sur la feuille active si rien d'autre n'est stipuler.

    'je saisi une coordonnée initiale :
   LigDep  = InputBox("numero de ligne (debut) :", "message") 'pour Ligne depart (pas d'acent c'est plus sûr)
    ColDep  = InputBox("numero de colonne (debut) :", "message") 'pour colonne depart

    'je saisi une coordonnées finale :
   LigFin  = InputBox("numero de ligne (fin) :", "message") 'pour LigneFin
   ColFin  = InputBox("numero de colonne (fin) :", "message") 'Pour Colonne Fin

    Range(Cells(LigDep  ,ColDep), Cells(LigFin , ColFin  )) = "RH"
end sub

De cette façon tu peu revenir sur ton code dans un an tu ne devras pas chercher à quoi servent ces variables.

A+

Note que pour faire ce que tu montre il y a peut être plus simple, pour le code et pour l'utilisateur

Sub test()
    Application.InputBox("Saisissez la plage a traiter", "Sélection", Type:=8) = "RH"
End Sub

Merci Lermite pour cette belle solution et en effet ta proposition en fin de message et bien plus simple !


et aussi Merci à Banzai et à tout les autres

bonjour

voulant eviter d'ouvrir un nouveau sujet assez voisin de celui ci , mon probleme devient un peu plus compliqué

sur ma feuille de calcul je dispose de 3 lignes ,

en A2 j'ai le nom albert

en A3 j'ai le nom dupont

en A4 j'ai le nom felicien

verticalement de B1 à B16 j'ai des cellules qui contiennent des dates

comment puis je choisir une plage de cellules horizontales en reference au nom choisi selon un intervale de date defini entre b1 et b16 et affecter le mot RH à cette plage , j'ai fait pas mal d'essais je bloque

Merci pour vos réponses

Re,

Difficile de te répondre comme ça, les plages que tu indique ne sont pas égale ?

Poste un exemple de ton classeur.

A+

RE... voici mon fichier en te remerciant pour l'examen de ma question

632essais2.xls (16.00 Ko)

Bonjour,

verticalement de B1 à B16 j'ai des cellules qui contiennent des dates

c'est plutôt horzontalement de B2 à Q2 en l'occurence...

Je pense que c'est ça que tu veux :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim pl As Range
    Set pl = Intersect(Target, Range("B:IV"))
    If Target.Rows.Count > 1 Or Target.Row > 16 Then Exit Sub
    If Application.CountA(pl) = 0 Then
        pl = "RH"
    Else
        If MsgBox("Effacer " & pl.Address & " ?", vbOKCancel + vbQuestion, "Confirmation") = vbOK Then pl.ClearContents
    End If
End Sub

Tu sélectionnes une plage horizontale, si toutes les cellules sont vides elles sont remplies avec RH. Si certaines ne sont pas vide te propose d'effacer le contenu.

eric

67classeur2.zip (8.79 Ko)

Merci , je dirais presque , cependant j'aurais voulu faire le choix du nom et de la periode par inputbox ... enfin merci quand meme

je vais essayer de voir ce que je peux faire pour y parvenir


avec les explications que j'ai pu recevoir sur ce post j'ai pu faire le code suivant , quoi que pas tres "estethique " du tout mais qui

marche , par contre plutot que d'entrer des numeros de colonnes pour specifier ma periode j'aurai voulu saisir une periode par date

et là je sèche !

Option Explicit

Sub planning()

Dim LigDep As Long, LigFin As Long    ' La ligne
Dim ColDep As Integer, ColFin As Integer ' La colonne
 Dim damien, albert, jeanseb As Long
 Dim nom As String
 ' With ActiveSheet 'Pas nécessaire, arrivera toujours sur la feuille active si rien d'autre n'est stipuler.

    nom = InputBox("entrer un nom :", "message")
    If nom = "damien" Then

     ColDep = InputBox("numero de colonne (debut) :", "message")  'pour colonne depart
     ColFin = InputBox("numero de colonne (fin) :", "message")  'Pour Colonne d'arrivée

    Range(Cells(9, ColDep), Cells(9, ColFin)) = "RH"

    End If

    If nom = "albert" Then
    ColDep = InputBox("numero de colonne (debut) :", "message")  'pour colonne depart
     ColFin = InputBox("numero de colonne (fin) :", "message") ' pour colonne d'arrivée
    Range(Cells(10, ColDep), Cells(10, ColFin)) = "RH"
    End If

    If nom = "jeanseb" Then
    ColDep = InputBox("numero de colonne (debut) :", "message")  'pour colonne depart
     ColFin = InputBox("numero de colonne (fin) :", "message") 'pour la colonne d'arrivée
    Range(Cells(11, ColDep), Cells(11, ColFin)) = "RH"
    End If

End Sub

si vous voyer un autre moyen que de saisir les numeros de colonnes mais plutot les dates je suis preneur

Merci

je suis bete ! c'etait tout simple , il me suffisait de connaitre le decalage entre les dates du tableau et les numeros de colonnes

vu que sur mon tableau j'ai colonne = date+1

Option Explicit
Sub planning()

Dim LigDep As Long, LigFin As Long    ' La ligne
Dim ColDep As Integer, ColFin As Integer ' La colonne
 Dim damien, albert, jeanseb As Long
 Dim nom As String
 ' With ActiveSheet 'Pas nécessaire, arrivera toujours sur la feuille active si rien d'autre n'est stipuler.

    nom = InputBox("entrer un nom :", "message")

    If nom = "ALBERT" Then
    ColDep = InputBox("entrez la date de debut :", "message")  'pour colonne depart
    ColFin = InputBox("entrez la date de fin :", "message")  'Pour Colonne d'arrivée
    Range(Cells(2, ColDep + 1), Cells(2, ColFin + 1)) = "RH"

    End If

    If nom = "DUPONT" Then
    ColDep = InputBox("entrez la date de debut :", "message")  'pour colonne depart
     ColFin = InputBox("entrez la date de fin :", "message") ' pour colonne d'arrivée
    Range(Cells(3, ColDep + 1), Cells(3, ColFin + 1)) = "RH"
    End If

    If nom = "FELICIEN" Then
    ColDep = InputBox("entrez la date de debut :", "message")  'pour colonne depart
     ColFin = InputBox("entrez la date de fin :", "message") 'pour la colonne d'arrivée
    Range(Cells(4, ColDep + 1), Cells(4, ColFin + 1)) = "RH"
    End If

End Sub

je me suis ajouté une condition supplementaire qui verifie la position du nom choisi , si ce dernier est en RH alors l'ecriture

CA est n'est pas possible

Option Explicit
Sub planning()

Dim LigDep As Long, LigFin As Long    ' La ligne
Dim ColDep As Integer, ColFin As Integer ' La colonne
 Dim damien, albert, jeanseb As Long
 Dim nom As String
 Dim cells As Range
 ' With ActiveSheet 'Pas nécessaire, arrivera toujours sur la feuille active si rien d'autre n'est stipuler.

    nom = InputBox("entrer un nom :", "message")

    If nom = "ALBERT" Then
    ColDep = InputBox("entrez la date de debut :", "message")  'pour colonne depart
    ColFin = InputBox("entrez la date de fin :", "message")  'Pour Colonne d'arrivée
    '******************************************************
    For Each cells In Range(cells(2, ColDep + 1), cells(2, ColFin + 1))
    If cells <> "RH" Then
    Range(cells(2, ColDep + 1), cells(2, ColFin + 1)) = "CA"
    End If
    Next
    End If

    If nom = "DUPONT" Then
    ColDep = InputBox("entrez la date de debut :", "message")  'pour colonne depart
    ColFin = InputBox("entrez la date de fin :", "message") ' pour colonne d'arrivée
     For Each cells In Range(cells(3, ColDep + 1), cells(3, ColFin + 1))
    If cells <> "RH" Then
    Range(cells(3, ColDep + 1), cells(3, ColFin + 1)) = "CA"
    End If
    Next
    End If

    If nom = "FELICIEN" Then
    ColDep = InputBox("entrez la date de debut :", "message")  'pour colonne depart
     ColFin = InputBox("entrez la date de fin :", "message") 'pour la colonne d'arrivée
    For Each cells In Range(cells(4, ColDep + 1), cells(4, ColFin + 1))
    If cells <> "RH" Then
    Range(cells(4, ColDep + 1), cells(4, ColFin + 1)) = "CA"
    End If
    Next
    End If
end sub

seulement le code ne fonctionne pas avec ces lignes

:For Each cells In Range(cells(4, ColDep + 1), cells(4, ColFin + 1))

 For Each cells In Range(cells(3, ColDep + 1), cells(3, ColFin + 1))
For Each cells In Range(cells(2, ColDep + 1), cells(2, ColFin + 1))

j'ai le retour " variable objet ou variable de bloc with non definie " je ne vois ce qui cloche , est ce le fait de placer for devant ?

Merci

Tu t'égare là, tu split dans tout les sens...

Poste un classeur exemple comme demander et explique ce que tu veux faire exactement.

Ou plutôt tu met une feuille départ et une autre feuille comme tu voudrais que ce sois.

en effet , j'ai fais des essais sur deux classeur , c'est pas top , je poste le classeur contenant ma dernière macro et un tableau planning associé qui corresspond à mon dernier message.

Merci


Pour la macro il faut saisir le nom en majuscule dans l'inputbox et les dates sous formes de jour

68essais2.zip (8.67 Ko)

Re,

En plus simple... a tester

Une idée pour un planning.

77rocket4-v001.zip (11.98 Ko)

Merci Lermite j'ai pu tester ton fichier , et il fonctionne bien et je t'en remercie , ce que je voulais obtenir

et que si une personne est par exemple en RH ( repos ) du 6 au 8 du mois en cours et qu'elle pose des congés annuels ( CA) allant du 2 au 10 du mois en cours et bien que l'ecriture des CA n'effacent pas les RH deja en place et ce que je m'efforcais de faire dans mon précedent code

je te remercie quand meme d'avoir donné de temps à cette question


Les RH etant deja prepositionnés manuellement sur mon tableau

Comme ça ?

107rocket4-v002.zip (12.24 Ko)

Tres excactement !!! Merci infiniment ! c'est bien ca ! je vais m'attacher à comprendre ton code pour aussi

essayer de m'ameliorer , en tout cas merci pour le temps que tu a accordé à ce post , reconnaissant aussi moi meme ne pas avoir

été suffisament clair au début

Rechercher des sujets similaires à "utilisation range"