Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Formulaire (Grille), Guillemets et VBA

2 réponses
Avatar
plexus
Bonjour

J'ai une feuille nomm=E9e contenant des variables auxquelles je veux que
l'utilisateur acc=E8de par le biais de la grille.
Dans l'exemple il s'agit de trajets, en A l'origine, B la destination,
C le trajet, D le kilometrage.
Certains de ces =E9l=E9ments ne doivent pas =EAtre chang=E9es et pour emp=
=E9cher
leur modification dans la grille, j'=E9cris dans la cellule : =3D"aller"
ce qui fait que dans la grille aller est gris=E9 et bien inaccessible.
Le 1=B0 probl=E8me est que j'appelle la grille par une sub si le dernier
enregistrement est enti=E8rement gris=E9, le nouvel l'est =E9galement donc
impossibilit=E9 de rentrer de nouveaux champ. Pour y rem=E9dier avant
d'appeller la grille j'=E9cris quelque chose dans la premi=E8re ligne
juste en dessous le dernier enregistrement.
Mon 2=B0 probl=E8me est que je veux formater la colonne C (trajet) comme
suit : "origine - destination" car dans un menu d=E9roulant c'est le
trajet que j'appelle et non pas l'origine et la destination. Donc pour
empecher que l'utilisateur ne remplisse ce champ il me faut le griser
et il me faut =E9crire : =3D" " en vba dans la colonne c sous la derni=E8re
entr=E9e
sauf que vba n'aime pas mon : Sheets("Variables").Range("C" & L +
1).Value =3D ["=3D" ""]

Sub Grille_trajet()
Dim c As Range
Dim L, L1, L2, L3 As Long
Dim i as long
Application.ScreenUpdating =3D False
Sheets("Variables").Unprotect Password:=3DPassword
Sheets("Variables").Visible =3D True
'recherche de la derni=E8re ligne vierge pour y placer une entr=E9e
Set c =3D Sheets("Variables").Range("A2")
L =3D c.End(xlDown).Row
'ajout entr=E9e
Sheets("Variables").Range("A" & L + 1).Value =3D "?"
Sheets("Variables").Range("C" & L + 1).Value =3D ["=3D" ""]
Sheets("Variables").Range("A2").CurrentRegion.Name =3D
"Base_de_Donn=E9es"
Sheets("Variables").ShowDataForm
'efface entr=E9e
L =3D c.End(xlDown).Row
Sheets("Variables").Range("A" & L + 1 & ":" & "C" & L +
1).ClearContents
' mise en forme trajet
L1 =3D Sheets("Variables").Range("A2").End(xlDown).Row
L3 =3D Sheets("Variables").Range("C2").End(xlDown).Row
L3 =3D L3 + 1
For i =3D L1 To 1 Step (-1)
If Sheets("Variables").Range("A" & i).Value =3D "?" Then
Sheets("Variables").Range("A" & i & ":" & "E" & i).Delete shift:=3DxlUp
Next i
For i =3D L1 To L3 Step (-1)
Sheets("Variables").Range("C" & i).Value =3D
Sheets("Variables").Range("A" & i).Value & " - " &
Sheets("Variables").Range("B" & i).Value
Next i

' Sheets("Variables").Visible =3D False
Sheets("Variables").Protect Password:=3DPassword
Application.ScreenUpdating =3D True
End Sub

Merci de votre aide et de vos conseils

2 réponses

Avatar
Garette
Bonsoir,

Prob 1
Voici differentes pistes.

J'avais touvé cette astuce dans un developpement analogue
J'insere une ligne juste en dessous de la ligne de titre et j'affiche la
grille.
Avantages :
- pas besoin de renommer la base de données. l'insertion étend la zone
- la premiere fiche vide apparait dans le formaulaire
Sub test2()
Sheets("Variables").Range("Base_de_Données"). _
Offset(1, 0).Resize(1).Insert Shift:=xlDown
ActiveSheet.ShowDataForm
End Sub

Sinon :
Pour la derniere ligne vide, normalement ce sera :
Sheets("Variables").Range("Base_de_Données").Offset(1,0)
Une fois la ligne rajoutée, pour renommer la base en intégrant la nouvelle
ligne :
With Sheets("Variables").Range("Base_de_Données")
.Resize(.Rows.Count + 1).Name = "Base_de_Données"
End With

Prob 2
Sheets("Variables").activecellRange("C" & L +1).Value = "="" """


"plexus" a écrit dans le message de news:

Bonjour

J'ai une feuille nommée contenant des variables auxquelles je veux que
l'utilisateur accède par le biais de la grille.
Dans l'exemple il s'agit de trajets, en A l'origine, B la destination,
C le trajet, D le kilometrage.
Certains de ces éléments ne doivent pas être changées et pour empécher
leur modification dans la grille, j'écris dans la cellule : ="aller"
ce qui fait que dans la grille aller est grisé et bien inaccessible.
Le 1° problème est que j'appelle la grille par une sub si le dernier
enregistrement est entièrement grisé, le nouvel l'est également donc
impossibilité de rentrer de nouveaux champ. Pour y remédier avant
d'appeller la grille j'écris quelque chose dans la première ligne
juste en dessous le dernier enregistrement.
Mon 2° problème est que je veux formater la colonne C (trajet) comme
suit : "origine - destination" car dans un menu déroulant c'est le
trajet que j'appelle et non pas l'origine et la destination. Donc pour
empecher que l'utilisateur ne remplisse ce champ il me faut le griser
et il me faut écrire : =" " en vba dans la colonne c sous la dernière
entrée
sauf que vba n'aime pas mon : Sheets("Variables").Range("C" & L +
1).Value = ["=" ""]

Sub Grille_trajet()
Dim c As Range
Dim L, L1, L2, L3 As Long
Dim i as long
Application.ScreenUpdating = False
Sheets("Variables").Unprotect Password:=Password
Sheets("Variables").Visible = True
'recherche de la dernière ligne vierge pour y placer une entrée
Set c = Sheets("Variables").Range("A2")
L = c.End(xlDown).Row
'ajout entrée
Sheets("Variables").Range("A" & L + 1).Value = "?"
Sheets("Variables").Range("C" & L + 1).Value = ["=" ""]
Sheets("Variables").Range("A2").CurrentRegion.Name "Base_de_Données"
Sheets("Variables").ShowDataForm
'efface entrée
L = c.End(xlDown).Row
Sheets("Variables").Range("A" & L + 1 & ":" & "C" & L +
1).ClearContents
' mise en forme trajet
L1 = Sheets("Variables").Range("A2").End(xlDown).Row
L3 = Sheets("Variables").Range("C2").End(xlDown).Row
L3 = L3 + 1
For i = L1 To 1 Step (-1)
If Sheets("Variables").Range("A" & i).Value = "?" Then
Sheets("Variables").Range("A" & i & ":" & "E" & i).Delete shift:=xlUp
Next i
For i = L1 To L3 Step (-1)
Sheets("Variables").Range("C" & i).Value Sheets("Variables").Range("A" & i).Value & " - " &
Sheets("Variables").Range("B" & i).Value
Next i

' Sheets("Variables").Visible = False
Sheets("Variables").Protect Password:=Password
Application.ScreenUpdating = True
End Sub

Merci de votre aide et de vos conseils
Avatar
plexus
Merci beaucoup Garette pour tes réponses et tu as étais plus rapide
que mon effacement du message pour cause de solution trouvée

Néanmoins, je vais tester ta solution 1 pour voir si je peux l'adapter
à mes besoins car si je renomme "Base_de_Données" c'est parce que
j'ai plusieurs grille / champs de données séparés par des colonnes
vides sur la feuille.

Pour le 2 en plus de mes erreurs sur le nombre de guillemets il me
fallait .Formula à la place de .Value

Merci encore pour tes réponses et quelle diligence !