Macro pour trouver un valeur faire un offset et écrire dans
Bonsoir,
Ne maîtrisant pas encore très bien VBA, je souhaiterais créer une macro avec userform qui ferait:
1) A l'exécution: demande d'entrer un N° de lot ( fait un certain nombre de vérification mais pas de problème pour moi).
2) Cherche l'adresse de la cellule de ce N° de lot dans la colonne C3: à dernière cellules de la colonne C contenant une valeur. Et la, je ne sais pas faire; Il n'y jamais de doublon pour le numéro de lot.
3) Avec l'adresse trouvé fait un offset de 29 colonnes, sélectionner la cellule, ouvrir une boite de saisie (l'utilisateur écrit le texte) et écrire le texte dans la cellule.
4) Faire un offset de 43 colonnes depuis l'adresse d'origine, formater la cellule puis ouvrir un userform pour saisie dans la cellule.
L'userform doit:
demander une" quantité" de 1 à X
En face de la quantité un "volume"
Avoir plusieurs ligne de saisie car il peut y avoir jusqu'à 4 volumes différents.
L'unserform doit écrire dans la cellule quelque chose comme: X1 quantité * Y1 volume mL, X2 quantité * Y2 volume mL… .
Là ou j'ai vraiment de gros problèmes c'est pour l'userform, la recherche de la cellule contenant le N° de lot recherché et l'offset.
Si quelqu'un pouvait ne donner un coup de main, merci d'avance.
Salut le forum
Un petit coup de F1 dans l'aide sur la méthode : Find
Cet exemple montre comment rechercher toutes les cellules de la plage A1:A500
dans la feuille de calcul Worksheet 1 contenant la valeur 2 et écrire 29 cellules à droite.
With Worksheets(1).Range("a1:a500")
Set c = .Find(2, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Offset(, 29) = 5
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End WithTu fais des essais, si problème revient avec un fichier.
Petite vidéo explicative : Comment joindre un fichier
Mytå
Merci Myla.
Je regarde ça et je te tiens informé.
Bonne journée.
Bonjour,
Après plusieur essai j'ai un bout de code qui mache pas trop mal. J'ai juste un gros problème pour créer un userforme.
Voici un lien avec un exemple de fichier:
Sinon ici mon code:
Public Sub test()
Dim numéroLot As Integer
Dim celluletrouvee As Range
Dim ligne As Integer
Dim col As Integer
Dim commentaire As String
Dim quantite1, quantite2, quantite3, quantite4 As String
Dim volume1, volume2, volume3, volume4 As String
numéroLot = InputBox("entrez votre N° de lot")
Set celluletrouvee = Range("A1:A10000").Find(numéroLot, lookat:=xlWhole)
If celluletrouvee Is Nothing Then
'si lot pas trouvé doit aller à fin
GoTo fin
Else
ligne = celluletrouvee.Row
col = celluletrouvee.Column
commentaire = InputBox("entrez votre texte")
Cells(ligne, col).Offset(0, 3).Clear
Cells(ligne, col).Offset(0, 3).Select
ActiveCell.Value = commentaire
End If
fin:
MsgBox ("le N° de lot n'existe pas")
'l'userform doit commencé à agir ici
'on doit saisir dans l'userform
quantite1 = TextBox1
quantite2 = textbox2
quantite3 = textbox3
quantite4 = textbox4
volume1 = textbox5
volume2 = textbox6
volume3 = textbox7
volume4 = textbox8
'on ecrit le résultat dans la cellule à l'offset (0,5)
Cells(ligne, col).Offset(0, 5).Clear
Cells(ligne, col).Offset(0, 5).Select
'n'utiliser que les variables contenant une valeur. ignorer les autres.
ActiveCell.Value = quantite1 & "*" & volume1 & "ml " 'etc avec les autre volume et quantité
End SubSi quelqu'un peut n'aider à faire l'userform et jeter un oeil sur le code.
Merci d'avance
Bonjour
J'ai tout placé dans un userform
Si cela te convient il faut indiquer ce que tu fais des informations obtenues dans l'userform
l'userform à de la gueule.
Voici les quelques points que je voudrais modifier:
Dans la partie "ComboBox1" ne serait il pas possible de taper un N° de lot plutôt que de le choisir par le menue déroulant?
Puis rechercher ce N° dans la colonne :C:C, faire un offset de 3 colonnes, formater la cellule, ouvrir un inputbox pour saisie d'un message et écrire la saisie dans la cellule
Avec les saisies de textbox (pour la saisie des volumes et des différentes quantités), serait possible (en final) de concaténer les différentes entrées style (2 * 20 ml, 3*40 ml...) puis écrire le résultat dans la cellule du lot trouvé mais avec un offset de 5.
si je ne suis pas claire, je ne refais;
Merci d'avance.
Bonjour
luck82 a écrit :Dans la partie "ComboBox1" ne serait il pas possible de taper un N° de lot plutôt que de le choisir par le menue déroulant?
As-tu essayé ?
luck82 a écrit :Puis rechercher ce N° dans la colonne :C:C, faire un offset de 3 colonnes, formater la cellule, ouvrir un inputbox pour saisie d'un message et écrire la saisie dans la cellule
Pourquoi chercher j'ai la ligne directement
Offset de 3 colonnes (au début c'était 29 colonnes)
Pourquoi un inputbox : Le TextBox9 est fait pour ça et en plus il récupère l'ancien texte
luck82 a écrit :Avec les saisies de textbox (pour la saisie des volumes et des différentes quantités), serait possible (en final) de concaténer les différentes entrées style (2 * 20 ml, 3*40 ml...) puis écrire le résultat dans la cellule du lot trouvé mais avec un offset de 5.
Dans le fichier marques exactement le résultat souhaité
Qu'entends tu par concaténer les différentes entrées (où surtout ?)
Maintenant c'est offset 5 et avant c'était Offset 43
Au lieu de marquer les offsets marques les colonnes en clair
bonsoir,
Autant pour moi, mais quand je vois un choix par liste j'ai toujours l'impression que l'on a pas le choix d'une saisie manuelle.
sinon la macro-userform marche bien et pour les offset pas de problème c'est moi qui faisais des essais avec d'autre classeur... d'où un mélange.
pour le résultat souhaité, c'est en fait le détail de la saisie faite dans l'userform et non pas le résultat mathématique. c'est à dire si l'utilisateur saisi: quantité = 2 volume = 20 le résultat doit être "2*20 mL" et non pas 40 et ainsi de suite pour les autres lignes de l'userform.
c'est à dire si il y a deux volumes différents dans le style:
quantité = 2 volume = 20
quantité = 3 volume = 40
le résultat dans la cellule devra être: "2*20 mL + 3*40 mL" en toute lettre.
Merci Banzai64.
Ca marche parfaitement voir même plus. C'est excatement le résultat que je souhaitais.
Juste une petit question: est il possible de sortir de l'userform une fois la touche "Validé" activée. Mais bon, je pense que je vais trouvé.
Sinon l'aurai peut être d'autres questions mais ça c'est une autre histoire.
Merci encore.
Bonjour
A la fin de la macroPrivate Sub CommandButton1_Click() rajoutes
Unload MeBonjour,
Je cherche à faire un "copier/coller" d'une colonne à partir d'un fichier fermé.
la colonne concernée commence de "B2:B5972" et je veux coller ses valeurs dans une autre colonne d'une autre classeur mais à partir de "F15:F5985" décaler de 13 cellules.
le code fonctionne sauf que il me fait le décalage de 13 cellules
quelqu'un peut m'aider svp
code utilisé
Sub ImporterDonneesSansOuvrir()
'Déclaration variable chemin et nom en texte
Dim Cheminsource As String, Fichiersource As String
'Définition contenu variable
Cheminsource = ThisWorkbook.Path & "\" 'C:\Users\waard\Desktop\test planification\"
Fichiersource = "Fichier A.xls" '."test.xlsm"
'Création d'une plage de remontée de données à partir du fichier source fermé sinon bug, de la feuille 1 et de la plage cellule A1>F10
ThisWorkbook.Names.Add "plage", _
RefersTo:="='" & Cheminsource & "[" & Fichiersource & "]Feuil1'!$b$2:$b$5985"
'De la feuille 1 du fichier source
With Worksheets("Feuil1")
Worksheets("Feuil1").Range("f15:f5985").Value = "=plage"
End With
End Sub