XL 2013 test si cellules complétées

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,

J'essaie de trouver le code "qui va bien" pour l'action ci-dessous
Dans le fichier test joint, j'ai :
- une plage de cellules (G3 à G30) avec des cellules vides et non vides,
- j'ai de I3 à K3 saisi dans chaque cellule "non"

l'action
copie de I3:K3
sur I4 jusqu'à la ligne la dernière ligne contenant des cellules non vides de B à G
ici par exemple : I4 jusqu'à K30

C'est trop costaud pour moi et malgré toutes mes recherches et tentatives, je n'ai pas trouvé.

Si quelqu'un avait le bon code, ça me rendrait un grand service LOL
Je joins le fichier test.

Avec mes remerciements,
Je vous souhaite à toutes et à tous un super dimanche,
Amicalement,
arthour973,
 

Pièces jointes

  • Test copie jusqu'à dernière non vide.xlsm
    10.2 KB · Affichages: 32
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour Roland,
Bonjour Lone,
Le Forum,

Roland, c'est ça cette fois :) ..... comment ça "je ne suis pas facile à comprendre" LOL ;)
C'était pourtant clair dès le début ....... pour moi LOL.
Roland, tu vas devenir le super "compreneur" des problèmes mal expliqués LOL.

Merci Roland, c'est super comme toujours ;)
Bonne journée à vous 2 et à toutes et à tous,
Amicalement,
arthour973
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,

Je reviens sur ce fil pour terminer le code de course que j'ai réussi "à presque finaliser" grâce à Roland_M, Staple1600, vgendron et Lone-wolf que je remercie vraiment car c'était un vrai souci pour moi.

Vous le verrez dans le fichier joint, ça marche "presque" du tonnerre ;)
Ce que fait le code :
- Toutes les cellules des plages suivantes doivent être complétées à la saisie avant de pouvoir passer à une autre ligne ou avant de lancer l'exécution d'un code :
G7 à Jusqu'à dernière cellule de G non vides,
I7 à Jusqu'à dernière cellule de T non vides,
Z7 à Jusqu'à dernière cellule de Z non vides,

En cliquant dans les cellules de la feuille, le code vérifie s'il n'y a pas des cellules vides dans les plages et qui ne devraient pas l'être.
S'il y en a, le code remonte la ligne concernée en 1ère ligne et met en évidence les cellules vides.

Mais voilà, il reste une dernière chose que je n'arrive pas à résoudre.
Quand je créé une nouvelle ligne de saisie, toutes les cellules des plages sont vides et le code sélectionne donc toutes les cellules et ne me laisse pas la possibilité de remplir mes cellules. (quand je clique, il re-sélectionne indéfiniment)


Pour que je puisse saisir, il faudrait que le code me ramène à la 1ère cellule vide pour que je puisse la compléter et ainsi de suite.... MAIS IL FAUT QU'IL M'EMPECHE DE SELECTIONNER UNE CELLULE DANS UNE AUTRE LIGNE SI LES CELLULES DE LA LIGNE NE SONT PAS REMPLIES.

J'ai bien tenté un "ActiveCell.Select" mais ça se met à tourner en boucle et malgré mes recherches, je n'ai pas trouvé le code "qui va bien".

Auriez-vous la solution ?
Avec mes remerciements, je joins le fichier test,
Bonne journée à toutes et à tous,
Amicalement,
arthour973,
 

Pièces jointes

  • Test bloque déplacement_lionel _Roland.xlsm
    78.6 KB · Affichages: 18
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Hello à toutes et à tous ;)

Je croyais en avoir fini avec ce sujet ..... he ben non LOL.

Je reviens sur ce fil un dernier souci (enfin j'espère)

ce que fait le code :
1 - Création d'une nouvelle ligne clic sur "Nvlle ligne" = copie la ligne 6 masquée à la ligne suivant la dernière ligne non vide
2 - Oblige à rester sur la ligne si toutes les cellules en jaune de la ligne ne sont pas renseignées,
3 - à chaque clic, n'importe où dans la feuille, le code vérifie si la ligne est complète.
Si manques, sélection des cellules vides et renvoi à la 1ère cellule vide de la ligne avec remontée de la ligne en 1ère ligne.

Et grâce à vous, ça marche :) enfin, tant que je n'ajoute pas de ligne

Mais voilà ....... :mad:
Quand je clique sur "Nvlle ligne" pour ajouter une ligne, ça ne marche plus ça bloque là :
"Selection.SpecialCells(xlCellTypeBlanks).Select"
et ça sélectionne toute la plage complète des cellules non vides


Voici le code de la feuille :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
[i3] = "=COUNTA(R[4]C[-2]:R[99997]C)-(COUNTA(R[4]C[-8]:R[99997]C[-8])*3)"
    [i4] = "=COUNTA(R[3]C[2]:R[99996]C[11])-(COUNTA(R[3]C[-8]:R[99996]C[-8])*10)"

If [i3] = 0 And [i4] = 0 Then Exit Sub
If [i3] <> 0 Then Rang$ = Range([g7], Cells(Rows.Count, "i").End(xlUp)).Address: GoTo suite
If [i3] = 0 And [i4] <> 0 Then Rang$ = Range([k7], Cells(Rows.Count, "t").End(xlUp)).Address: GoTo suite
Exit Sub
suite: '<
Application.ScreenUpdating = False: Application.EnableEvents = False
Range(Rang$).Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Application.ScreenUpdating = True
ActiveWindow.ScrollRow = Selection.Row
Application.EnableEvents = True
End Sub

Je n'arrive pas à trouver pkoi ???

Je joins le fichier test.
Auriez-vous la solution ?
Avec mes remerciements et particulièrement à Roland_M
Je vous souhaite un beau WE :)
Amicalement,
arthour973,
 

Pièces jointes

  • Test bloque déplacement_bon.xlsm
    62.2 KB · Affichages: 13
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re


Alors j'ai voulu mettre le nez dans cette histoire de Nouvelle Ligne
J'ai tenté la chose suivante (juste pour tester la chose)
Et là je vois que Montesquieu avait raison ;)
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Flg As Boolean
[i3] = 0 'ici juste pour le test
[i4] = 4 'ici juste pour le test
Flg = ([i3] = 0 And [i4] <> 0)
Application.EnableEvents = False
Application.Goto Cells(Rows.Count, IIf(Flg, "I", "T")).End(3)(2)
Application.EnableEvents = True
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

J'ai persévéré mais je crois bien que je suis égaré en route
Donc du bien vers le mieux, je suis tombé dans le pire.
La céphalée arrive à grands pas désormais
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Flg As Boolean
[i3] = 0 'ici juste pour le test
[i4] = 4 'ici juste pour le test
Flg = ([i3] = 0 And [i4] <> 0)
Application.EnableEvents = False
x = Cells(Rows.Count, IIf(Flg, "I", "T")).End(3)(2).Row
Cells(x - 6, IIf(Flg, "G", "K")).Resize(x, IIf(Flg, 9, 9)).SpecialCells(12).Select
Application.EnableEvents = True
End Sub
 

Discussions similaires