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 !
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
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
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
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 ?
Tres excactement !!! Merci infiniment ! c'est bien ca !
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