Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Je m'adresse à nos ténors préférés car je ne sais pas bien faire un code avec plusieurs "else".
Voici le code que j'ai fait :
VB:
Private Sub Label1_Click()
Sheets("Appels").Range("n1") = 2
'met 2 à cellule N
If Cells(ActiveCell.Row, 26) = "RdV" Then
ActiveCell.Offset(0, 15) = "RdV" 'ActiveCell est la cellule col "K"
'si ligne active col "Z" = "RdV" - laisse "RDV" ligne active col Z
Else
If ActiveCell.Offset(0, 15) <> "" And ActiveCell.Offset(0, 15) <> "RdV" _
And ActiveCell.Offset(0, 15) <> "n/c" And ActiveCell.Offset(0, 15) > 0 Then
' si condition ok, ajoute 1 à col "Z" ligne active
ActiveCell.Offset(0, 15).Value = ActiveCell.Offset(0, 15).Value + 1
Else
'si les 2 condtions NON Ok, met 1 à col "Z" ligne active
ActiveCell.Offset(0, 15) = 1
End If
End If
Unload Rep_Entr ' ferme UserForm ouvert
'CalendarX.Show
End Sub
Je l'ai testé et il semble bien fonctionner.
Mais je pense que le code n'est pas bon.
J'ai fait des recherches mais je ne m'y retrouve pas.
Voudriez-vous me corriger ?
@Marcel32
"Donc pour résumer, il faut qu'on corrige un code qui n'est peut-être pas bon (d'après... ton intuition !), sans savoir ce qu'il doit faire, alors qu'il fonctionne déjà !..."
Je pensais que mes commentaires dans le code étaient suffisantes pour qu'un ténor comprenne lol.
Merci Marcel pour ton code génial .... qui fonctionne bien 🙂
@soan
Effectivement, impossible de joindre ma "z'usine à gaz", car fichier trop gros.
@ Patrick defaut conceptuel!!!!!
VB:
ActiveCell.Offset(0, 15) = "RdV" 'ActiveCell est la cellule col "K"
Quel défaut puisque je suis en cellule active colonne K
K = n° de col 11 soit 11+15 = 26 et col 26 = colonne Z
oui, mais c'que patrick a voulu dire, c'est que si ta cellule active est par exemple D15, alors : 4 + 15 = 19 = colonne S ➯ S15 ; si c'est bien c'que tu voulais : parfait ! 😊 sinon : tu t'es planté sur ce coup-là ! 😭
c'est pourquoi ça peut souvent être aléatoire de faire une macro à partir de la cellule active ! faut vraiment faire très attention à toutes les conséquences possibles ! 😉
oui, mais c'que patrick a voulu dire, c'est que si ta cellule active est par exemple D15, alors : 4 + 15 = 19 = colonne S ➯ S15 ; si c'est bien c'que tu voulais : parfait ! 😊 sinon : tu t'es planté sur ce coup-là ! 😭
c'est pourquoi ça peut souvent être aléatoire de faire une macro à partir de la cellule active ! faut vraiment faire très attention à toutes les conséquences possibles ! 😉
non, car ça dit seulement : à partir de la cellule active(n'importe laquelle), prendre la cellule pour laquelle on fait un décalage de 0 ligne (donc même ligne), et 15 colonnes (donc 15 colonnes à droite).
de plus, la colonne K est la colonne n° 11 ; c'est ni0, ni15 ! 😜 même si tu avais utilisé la référence ActiveCell.Offset(0, 11) comme il s'agit d'un décalage, ça aurait signifié 11 colonnes à droite, ce qui n'est pas pareil que colonne n° 11 ! 🙂
non, car ça dit seulement : à partir de la cellule active(n'importe laquelle), prendre la cellule pour laquelle on fait un décalage de 0 ligne (donc même ligne), et 15 colonnes (donc 15 colonnes à droite).
de plus, la colonne K est la colonne n° 11 ; c'est ni0, ni15 ! 😜 même si tu avais utilisé la référence ActiveCell.Offset(0, 11) comme il s'agit d'un décalage, ça aurait signifié 11 colonnes à droite, ce qui n'est pas pareil que colonne n° 11 ! 🙂
Ha Bon : ça ne veut pas dire que je décale de 15 colonnes à droite de la cellule 0 ?
Et quand je dis colonne 0, je suis en col K quand j'exécute le code (Oouupppsss ! c'est vrai, je ne l'avais pas précisé lol). 🙂
si tu es en colonne K, et par exemple en ligne 20, alors : à partir de K20, le décalage de 0 ligne en dessous et 15 colonnes à droite mène en ... Z20 ! regarde l'Aide VBA sur Offset() pour plus d'infos ! 😉
d'ailleurs, pour la colonne Z, tu l'avais bien vu dans ton post #16 car tu avais écrit : « K = n° de col 11 soit 11+15 = 26 et col 26 = colonne Z »
rappel : si les paramètres de l'offset sont négatifs, par exempleActiveCell.Offset(-3, -5) ça signifie : à partir de la cellule active, prendre en compte la cellule qui est 3 lignes au dessus et 5 colonnes à gauche ; donc si ta cellule active est par exempleK20, ça mène en F17 ; et là, ça te fait un bon entraînement pour des styles de déplacements de chevaux aux échecs ! 😁 😄 🤣
accessoirement, tu peux aussi voir que comme les paramètres peuvent être négatifs, ça ne peut pas être une cellule dont les coordonnées seraient ligne n° -3 et colonne n° -5 vu qu'un n° de ligne minimum est 1 et qu'un n° de colonne minimum est aussi 1 ; même avec 0 ça ne marcherait pas, car il n'y a pas de ligne 0, et il n'y a pas non plus de colonne 0 ; un code VBA qui référencerait de telles cellules planterait inévitablement ! 😭
pour éviter le problème décrit dans mon post #18, et à supposer que ton décalage de 15 colonnes à droite est valable au minimum pour la colonne K, tu peux faire :
VB:
If ActiveCell.Column >= 11 Then 'colonne minimum : K
'ici, ton traitement qui utilise ActiveCell.Offset(0, 15) :
ActiveCell.Offset(0, 15) = "RdV"
End If
OU
VB:
If ActiveCell.Column > 10 Then 'colonne minimum : K
'ici, ton traitement qui utilise ActiveCell.Offset(0, 15) :
ActiveCell.Offset(0, 15) = "RdV"
End If
note que si ton traitement est valable uniquement pour la colonne K, alors c'est inutile de faire un .Offset() : autant désigner la cellule directement, donc ici Z20 si on était en K20 : [Z20] = "RdV"
ben non ! la cellule 0 n'existe tout simplement pas ! la cellule 1 est la 1ère cellule d'une feuille de calcul, donc c'est forcémentA1.
si tu es en colonne K, et par exemple en ligne 20, alors : à partir de K20, le décalage de 0 ligne en dessous et 15 colonnes à droite mène en ... Z20 ! regarde l'Aide VBA sur Offset() pour plus d'infos ! 😉
d'ailleurs, pour la colonne Z, tu l'avais bien vu dans ton post #16 car tu avais écrit : « K = n° de col 11 soit 11+15 = 26 et col 26 = colonne Z »
rappel : si les paramètres de l'offset sont négatifs, par exempleActiveCell.Offset(-3, -5) ça signifie : à partir de la cellule active, prendre en compte la cellule qui est 3 lignes au dessus et 5 colonnes à gauche ; donc si ta cellule active est par exempleK20, ça mène en F17 ; et là, ça te fait un bon entraînement pour des styles de déplacements de chevaux aux échecs ! 😁 😄 🤣
accessoirement, tu peux aussi voir que comme les paramètres peuvent être négatifs, ça ne peut pas être une cellule dont les coordonnées seraient ligne n° -3 et colonne n° -5 vu qu'un n° de ligne minimum est 1 et qu'un n° de colonne minimum est aussi 1 ; même avec 0 ça ne marcherait pas, car il n'y a pas de ligne 0, et il n'y a pas non plus de colonne 0 ; un code VBA qui référencerait de telles cellules planterait inévitablement ! 😭
pour éviter le problème décrit dans mon post #18, et à supposer que ton décalage de 15 colonnes à droite est valable au minimum pour la colonne K, tu peux faire :
VB:
If ActiveCell.Column >= 11 Then 'colonne minimum : K
'ici, ton traitement qui utilise ActiveCell.Offset(0, 15) :
ActiveCell.Offset(0, 15) = "RdV"
End If
OU
VB:
If ActiveCell.Column > 10 Then 'colonne minimum : K
'ici, ton traitement qui utilise ActiveCell.Offset(0, 15) :
ActiveCell.Offset(0, 15) = "RdV"
End If
note que si ton traitement est valable uniquement pour la colonne K, alors c'est inutile de faire un .Offset() : autant désigner la cellule directement, donc ici Z20 si on était en K20 : [Z20] = "RdV"
Après si tu connais la colonne que tu veux travailler exemple la colonne K (ou une autre)
Tu fais :
MaValeur = Range("K" & Ligne).Value ' Tu as la valeur de la cellule K & de la ligne active donc K20 dans MaValeur
Range("K" & Ligne) = 15 ' ici c'est le contraire tu mets la valeur 15 à la cellule K & de la ligne active donc K20
Ligne = ActiveCell.Row ' Maintenant j'ai le N° de la ligne active
'Si tu es sur la ligne 20 alors Ligne = 20
MaValeur = Range("K" & Ligne).Value ' Tu as la valeur de la cellule K & de la ligne active donc K20 dans MaValeur
Range("K" & Ligne) = 15 ' ici c'est le contraire tu mets la valeur 15 à la cellule K & de la ligne active donc K20
En complément de tous les message précédents entre autre de Soan sur ActiveCell
Tu peux récupérer facilement le N° de la ligne active avec :
Si tu es sur la ligne 20 alors Ligne = 20
Après si tu connais la colonne que tu veux travailler exemple la colonne K (ou une autre)
Tu fais :
Et le tout donne ceci :
VB:
Ligne = ActiveCell.Row ' Maintenant j'ai le N° de la ligne active
'Si tu es sur la ligne 20 alors Ligne = 20
MaValeur = Range("K" & Ligne).Value ' Tu as la valeur de la cellule K & de la ligne active donc K20
Range("K" & Ligne) = 15 ' ici c'est le contraire tu mets la valeur 15 à la cellule K & de la ligne active donc K20
en condensé : Cells(ActiveCell.Row, "K") = "RDV"ouCells(ActiveCell.Row, 11) = "RDV"
ça fait que ça modifie la cellule dont la ligne est celle de la cellule active, et dont la colonne est K ; cette fois, il n'y a plus d'offset, donc il n'y a pas de décalage par rapport à une référence de cellule.
note aussi que la cellule active étant forcément une cellule valide, ActiveCell.Row retourne forcément un numéro de ligne valide.
mais si tu dois stocker ce numéro de ligne active dans une variable ligne, cette variable doit forcément avoir le type Long : Dim ligne As Long ou Dim Ligne& ; car avec le type Integer(caractère de type %), y'aura un plantage si numéro ligne active > 32767 !
Non, pas du tout : ActiveCell.Offset(0,15) ne veut absolument pas dire que la cellule active est dans la colonne K.
Ça veut dire qu'on fait référence à la cellule qui est, par rapport à la cellule active, sur la même ligne, 15 colonnes à droite.
Je pense que tu n'as pas parfaitement compris le principe de "ActiveCell".
ActiveCell, c'est la cellule (on va supposer qu'il n'y en a qu'une) qui est actuellement sélectionnée dans ta feuille active.
Quand tu es sur ta feuille et que tu cliques sur une cellule, c'est alors elle la cellule active.
Quand dans une macro tu passes par une instruction Cells(ligne,colonne).Select, c'est alors cette cellule qui est active.
Donc ce que veulent dire nos camarades ci-dessus c'est que, la cellule active dépend de ce qu'a fait l'utilisateur, ou de ce qu'a fait le code, avant de passer par l'instruction utilisant ActiveCell.
On suppose ici que la cellule active est dans la colonne K parce que c'est écrit dans les commentaires du code de #1, mais vu qu'on n'a pas l'ensemble du projet rien ne nous le garanti.
D'autre part, si tu es sûr que la cellule active est dans la colonne K, pourquoi utiliser un offset ???
Plutôt que d'utiliser un décalage, de 15 colonnes vers la droite, de la colonne de la cellule active, il vaut mieux taper directement dans la colonne Z ; ainsi, dans tous les cas, tu n'affecteras qu'une cellule de la colonne Z, même si ta cellule active n'était pas vraiment dans la colonne K... 😉
Non, pas du tout : ActiveCell.Offset(0,15) ne veut absolument pas dire que la cellule active est dans la colonne K.
Ça veut dire qu'on fait référence à la cellule qui est, par rapport à la cellule active, sur la même ligne, 15 colonnes à droite.
Je pense que tu n'as pas parfaitement compris le principe de "ActiveCell".
ActiveCell, c'est la cellule (on va supposer qu'il n'y en a qu'une) qui est actuellement sélectionnée dans ta feuille active.
Quand tu es sur ta feuille et que tu cliques sur une cellule, c'est alors elle la cellule active.
Quand dans une macro tu passes par une instruction Cells(ligne,colonne).Select, c'est alors cette cellule qui est active.
Donc ce que veulent dire nos camarades ci-dessus c'est que, la cellule active dépend de ce qu'a fait l'utilisateur, ou de ce qu'a fait le code, avant de passer par l'instruction utilisant ActiveCell.
On suppose ici que la cellule active est dans la colonne K parce que c'est écrit dans les commentaires du code de #1, mais vu qu'on n'a pas l'ensemble du projet rien ne nous le garanti.
D'autre part, si tu es sûr que la cellule active est dans la colonne K, pourquoi utiliser un offset ???
Plutôt que d'utiliser un décalage, de 15 colonnes vers la droite, de la colonne de la cellule active, il vaut mieux taper directement dans la colonne Z ; ainsi, dans tous les cas, tu n'affecteras qu'une cellule de la colonne Z, même si ta cellule active n'était pas vraiment dans la colonne K... 😉
AH ! Marcel, merci d'être tjrs là 🙂
J'ai bien tout compris ce que m'ont dit nos "petits" lol je dirais plutôt "GRANDS" camarades et ce que tu me dis 🙂
"On suppose ici que la cellule active est dans la colonne K parce que c'est écrit dans les commentaires du code de #1, mais vu qu'on n'a pas l'ensemble du projet rien ne nous le garanti."
Mais si, mais si lol : Je ne peux pas mettre tout mon grand code sur le fil mais l'exécution du code m'amène sur la colonne K de la ligne active et c'est moi qui le garanti lol 🤣🤣.
Merci encore une fois Marcelius 🙂
AH ! Marcel, merci d'être tjrs là 🙂
J'ai bien tout compris ce que m'ont dit nos "petits" lol je dirais plutôt "GRANDS" camarades et ce que tu me dis 🙂
"On suppose ici que la cellule active est dans la colonne K parce que c'est écrit dans les commentaires du code de #1, mais vu qu'on n'a pas l'ensemble du projet rien ne nous le garanti."
Mais si, mais si lol : Je ne peux pas mettre tout mon grand code sur le fil mais l'exécution du code m'amène sur la colonne K de la ligne active et c'est moi qui le garanti lol 🤣🤣.
Merci encore une fois Marcelius 🙂
Mais n'oublie pas le reste : tu garantis être dans la colonne 11 et tu effectues un décalage fixe de 15 colonnes vers la droite, donc autant adresser directement la colonne 26 ; comme ça si tu n'étais pas vraiment en colonne 11, tu ne détruiras pas une cellule d'une autre colonne que la Z. 😉
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD