Bonsoir
A nouveau soucis avec un fichier en VBA
Au niveau "traçage" des variables c'est correcte SAUF que le résultat est erroné
Pour tester > Sub dans le module1 : entrez un "VR xx" et normalement j'efface les cellules en dessous
Exemple : j'entre VR03 , dites moi si vous effacez bien E3:E10 ???
Le hic chez moi : avec un Lg =3 et col=5 ça efface 30 au lieu de VPOY en jaune ??????? on est en Lg=4
idem pour autres exemples !
Donc je demande le test chez vous , sachant que ce bout de fichier ( ci joint en copier/coller) fonctionnait normalement dans le fichier entier ce matin avant ajout de code ???
Bon sinon, c'est le deuxième problème que je t'avais signalé en #6 du 1er fil de discussion : tu as un décalage à cause du With.
Met A1 au lieu de A2 dans ton With et ça devrait rentrer dans l'ordre.
Je prends un peu les devants : le troisième problème ce sont les VR des cellules "Destination".
Private Sub BtnEffacer()
Dim vr As String, ry As Range
vr = InputBox("rayon")
If Trim(vr) = "" Then Exit Sub
Set ry = Worksheets("Entrée").Range("A2:W2,A12:W12").Find(vr, LookIn:=xlValues, lookat:=xlWhole)
If Not ry Is Nothing Then ry.Offset(1).Resize(8).ClearContents
End Sub
J'avais aussi proposé le principe de n'effectuer la recherche que sur les lignes de titre, mais ça ne lui convenait pas.
Il faut dire qu'il y a beaucoup plus de plages VR en réalité : jusqu'à 140 je crois.
Merci !! ce que je voulais savoir sur ce Pb que je n'ai JAMAIS rencontré en 20 ans !!! est POURQUOI
- en traçant les variables vba cela est correct ?
- Le résultat est faux !!!
Il doit y avoir une explication rationnelle ?? Luc !! ( nouveau dans ce sujet après Marcel) mon fichier marche chez toi ou non ???? de Marcel: Il y a un pb de liaison à l'ouverture de ton fichier.
Moi il me demande de mettre des liaisons à Jour ?????????? faut que KROSOFT arrête de Fumer !!!!
normalement des Pb de ce genre je résous seul !! mais vu que mon Excel donne des siennes en VBA depuis une semaine , ne répond pas , se ferme tout seul , erreur VBA07 ....
Je pense tout désinstaller et refaire voire migrer 2016 ou ....??
La conclusion que j'attend ::est que vous lanciez mon fichier ensuite > Qu'EST CE QUE MON FICHIER ACTUEL DONNE CHEZ VOUS !!!
Moi il fonctionnait ce matin et là fait n'importe quoi ?? Ne pas se focaliser sur mon code !! car j'ai d'autres fichiers IDEM !!!!!!!!!!
Merci !! ce que je voulais savoir sur ce Pb que je n'ai JAMAIS rencontré en 20 ans !!! est POURQUOI
- en traçant les variables vba cela est correct ?
- Le résultat est faux !!!
Il doit y avoir une explication rationnelle ??
A mon avis il n'y a pas d'erreur et tout est normal : la plage du With sert de référence puisque tu utilises .Range ou .Cells. Et comme la plage du With ne commence pas en A1 comme une feuille, du coup ça décale l'adressage par rapport aux adresses des cellules dans la page (ça fait un offset).
Si tes Range ou Cells se référaient à la feuille et non à la plage du With, tu tomberais au bon endroit.
Tu peux essayer de remplacer .Range par simplement Range.
Oui ça va mieux à l'efface
J'ai jamais utilisé cette structure avec plage définie et donc en mettant A1 c'est ok !!
mais chez moi la copie ne se fait plus ??
Pourrais tu me retourner MON fichier qui tourne chez toi et que je compare ici ?
Je viens de trouver que ma Variable LocaF déclarée Public ( pour l'appel de la sub Ray_libre ) ne l'est pas ? donc exit sub ensuite !!!
Le With Worksheets("Entrée").Range("A2:W40") fait que si tu pointes des références après le with, ces références sont prises à partir de la plage du With.
Voir ce code qui renvoie les adresses absolues suivant qu'elles sont pointées ou pas.
VB:
Sub test()
With Worksheets("Entrée").Range("A2:W40")
MsgBox .Cells(1, 1).Address 'renvoie $a$2
MsgBox Cells(1, 1).Address 'renvoie $a$1
MsgBox .Range("a2").Address 'renvoie $a$3
MsgBox Range("a2").Address 'renvoie $A$2
End With
End Sub
Ce comportement est le comportement normal de VBA avec l'emploi du with.
Si on n'y prête pas une grande attention, on peut vite se "faire avoir".
C'est pour ça que mes codes évitent souvent ce type d'écriture sauf pour des entités entières: feuille, colonnes entières, lignes entières où les références pointées ou non sont identiques.
Ton code initial fonctionne si tu enlèves les 'points' devant les cellules à effacer puisque tes numéros de lignes et de colonnes sont des numéros de lignes et colonnes absolus et non relatifs à la plage du with.
lg et col tels que tu les définis sont relatifs à la cellules A1 de la feuille. Ry.row et Ry.column sont les numéros de ligne et colonne de Ry par rapport à la feuille (et non la plage)
Si tu laisses le point, VBA va considérer .cells() comme le range de la plage définie par le with (plage qui débute en absolue à la cellule A2).
Si on ôte le point, VBA va considérer le cells() à partir de la plage de la feuille entière (plage qui débute en absolue à la cellule A1 de la feuille)
Je vous salue également mapomme
Tu as raison mapomme, c'est sur des .Cells et non sur des .Range (comme je l'ai écrit (de mémoire) , en #7) qu'il faut enlever le point.
de Marcel: Il y a un pb de liaison à l'ouverture de ton fichier.
Moi il me demande de mettre des liaisons à Jour ?????????? faut que KROSOFT arrête de Fumer !!!!
C'est le carré avec un triangle vers le bas, que l'on voit normalement quand un tableau est filtré.
Et il y en avait un considéré, comme une image, en cellule A1. Mais je ne le vois plus dans ton dernier fichier.
En revanche, tu as plus de 120 zones de texte dans la feuille "Entrée" de ton dernier fichier...
Tu as aussi un problème avec la variable Col qui n'est pas global, donc au retour de la macro Ray_libre, la variable Col n'a pas la bonne valleur (elle a toujours la valeur qu'elle avait avant l'appel de la macro Ray_libre).