Userform / renseigner la base avec for.next sur plage nommée
Bonsoir à tous,
Léger problème avec un userform pour renseigner une base de données Excel.
La macro classique pour charger les données du formulaire vers Excel fonctionne bien :
Ex :
Private Sub CommandButton2_Click()
Dim derlign As Long
With Worksheets(1)
derlign = .Range("A" & Rows.Count).End(xlUp).Row + 1
'TxbNuméroaffaire ==> nom de la textbox correspondante
.Cells(derlign, 1).Value = TxbNuméroaffaire
'Cbxcivilité ==> nom de la textbox correspondante
.Cells(derlign, 2).Value = Cbxcivilité
End With
End SubMon fichier comporte beaucoup de plage nommée avec des calculs exécuté en VBA avec range("Nom").Cells(x;1).Value =; ce qui permet à l'utilisateur (seulement moi pour l'instant...) d'organiser ces colonnes comme il le souhaite. Cette première macro n'inscrit plus au bonne endroit lorsque l'on déplace les cellules concernées.
Cependant, je n'arrive pas à adapter la macro sus-mentionnée. Il ne se passe rien du tout quand je charge cette macro (que j'ai mis sur un autre commandbuttton) même pas un message d'erreur :
Private Sub CommandButton1_Click()
Dim x As Integer
Dim i As Long
i = Range("A65536").End(xlUp).Row
For x = 2 To i
'N__de_l_affaire ==> nom de la première plage nommée
Range("N__de_l_affaire").Cells(x, 1).Value = TxbNuméroaffaire
'Civilité ===>nom de la deuxième plage nommée
Range("Civilité").Cells(x, 1).Value = Cbxcivilité
Next x
End Sub Auriez-vous une piste pour m'éclairer ? Je souhaite vraiment passer par mes plages nommées mais je cale là. Toutefois, à l'impossible nul n'est tenu ; en cas d'échec, je me résoudrai à utiliser la macro classique.
Merci d'avance,
Bien cordialement;
DIARRA Jules
Bonsoir
Une supposition
La colonne A est vide
Un conseil
Effectivement, j'aurai dû joindre un fichier. Je joins un fichier test avec 4 colonnes au lieu de la cinquantaine prévue mais je suppose que, si cela fonctionne pour quatre, par analogie, on peut étendre la macro à l'ensemble.
Dans le fichier joint, il y a toujours les entêtes, les données s'intègrent à la ligne (x+1 soit ligne 2 pour la première saisie)
La colonne A comprend les données : n° de l'affaire (plage nommée : "N__de_l_affaire")
La colonne B comprend les données : Civilité (plage nommée : "Civilité")
La colonne D comprend les données : Nom (plage nommée : "Nom")
La colonne C comprend les données : Nom (plage nommée : "Prénom")
Seulement, ces colonnes pourront être déplacées à l'avenir pour faciliter l'ordre de saisie ou le formulaire pourra être réorganisé mais les informations seront toujours demandées peu important la colonne ou l'ordre de saisie dans le formulaire.
J'ai réussi à utiliser les "Range" nommés pour effectuer des calcul ou de concatener avec next...for. On peut déplacer les colonnes, les macros tournent. Je viens de tester :
Private Sub CommandButton1_Click()
Dim x As Integer
Dim i As Long
i = Range("A65536").End(xlUp).Row
For x = 2 To i
Range("N__de_l_affaire").Cells(x, 1) = TxbNuméroaffaire ' sans .Value
Next x
End SubMais elle modifie toutes les lignes non vides à l'identique avec les informations saisies dans le formulaire. Je dois préciser que je nomme la colonne entière pour m'assurer que toutes les données fassent partie d'un range nommé.
Merci Banzaï,
J'espère que mon fichier t'aideras à me comprendre.
Bonjour
Julo a écrit :Mais elle modifie toutes les lignes
Il faut supprimer la boucle
A tester
Effectivement, j'aurai du y penser.
Merci beaucoup en tout cas, Banzaï
A +
Julo