Tester la colonne ou se trouve le bouton
Bonjour à tous,
Voici une macro que j'ai créé avec l'aide d'une personne sur un forum.
L'objectif : Quand l'ordinateur détecte un chiffre autre que 0 et autre qu'un texte dans une colonne , la ligne contenant ce chiffre est copiée sur une autre feuille du classeur.
Pour l'instant, cette macro fonctionne parfaitement, mais je dois toujours spécifier la colonne où la vérification doit se faire dans la macro. Et c'est laborieux quand 50 colonnes doivent être testées.
Ce que je voudrais : C'est que l'ordinateur fasse le "check" dans la colonne ou se trouve le bouton (et que je ne doive pas la spécifier dans la macro). Puis que les lignes qui contiennent autre chose que 0 ou du texte soient copiées dans une autre feuille (à partir de la ligne 12) .
Voici la macro en question :
Sub trihiver1()
'mot de passe
Dim Pass As String
Pass = InputBox("Mot de passe requis", "Imprimer le bon de commande", "Saisir le mot de passe ici")
If Pass <> "print" Then
Exit Sub
Else
Sheets("Bon de commande").Select
With ActiveSheet.PageSetup
.CenterHeader = "&""Arial,Gras""&10Commandes Hiver Semaine 1"
.RightHeader = "&""Arial,Gras""&10Date: " & Format(Date, "d mmm yyyy")
End With
Columns("A:AZ").Hidden = False
Range("A4:B4").FormulaR1C1 = "'HIVER - Semaine 1"
Rows("12:1900").Clear
Range("A12").Select
Dim F_S As Worksheet 'Feuille source
Dim F_D As Worksheet 'Feuille Destination
Dim Lig_S As Long 'Ligne source
Dim Lig_D As Long 'Ligne destination
'MEI **********************************************
'Définition des feuilles
Set F_S = Sheets("Commandes") 'feuille source = onglet(Rex)
Set F_D = Sheets("Bon de commande") 'feuille destination = onglet(perimee)
'définition des lignes
'Lig_D = F_D.Range("D1900").End(xlUp).Row + 1
'Ligne destination est la première de D vide
Lig_D = 12
'Programme *****************************************
For Lig_S = 12 To F_S.Range("D1900").End(xlUp).Row
'Pour Ligne source = dernière non vide en G jusqu'à la ligne 1
'en passant à la ligne précédente par décrémentation (-1)
'Quand la valeur est inférieure à 1, on passe à laligne suivant Next Lig_S
If IsNumeric(F_S.Range("D" & Lig_S)) Then
'évite les erreurs si tu as un titres
If Int(F_S.Range("D" & Lig_S)) > 0 Then
'D testé contient une date inférieure à aujourd'hui
F_S.Rows(Lig_S).Copy
F_D.Rows(Lig_D).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
F_D.Rows(Lig_D).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
'on copie la ligne source sur la ligne destination
Lig_D = Lig_D + 1
'on passe à la ligne destination suivante
End If
End If
Next Lig_S
'Retour à l'instruction For Lig_S....
Columns("E:AU").Hidden = True
Columns("C:C").Hidden = True
MsgBox ("Fin de transfert")
'on avertit que c'est fini
Reponse = MsgBox("Voules-vous imprimer?", 36, "Demande d'impression")
If Reponse = 6 Then ActiveSheet.PrintOut Copies:=1
End If
End Sub
Merci d'avance pour votre aide !
Bonjour,
Le pb est que ton bouton est un objet et que tu peux le déplacer dans toute ta feuille
Le bouton dont tu parles se trouve dans quelle colonne ?
Tu parles aussi de "bouton à spécifier dans ta macro" ??? Je ne vois rien à ce sujet dans le code. Peux tu expliquer.
J'aimerais mieux voir ton fichier de manière à mieux cerner ta demande.
A te relire
Dan
En fait il y aurait plusieurs boutons qui ne seraient pas plus large que la colomne dans laquelle ils se trouveraient. Ces boutons auraient la taille d'une cellule et seraient imaginons au nombre de 15 ou 20. Ils ne sont pas sensés bouger de place.
Ce que je voulais dire, c'est que je dois à chaque fois spécifier dans la macro la lettre de la colonne qui doit être testée. Et ce que j'aurai voulu, c'est que la macro détermine automatiquement la colonne qui doit être testée en fonction de la colonne où se trouve le bouton.
Merci d'avance pour ton aide.
re,
Pourquoi ne pas mettre un seul bouton qui déclenche une macro qui va te demander quelle colonne tu veux tester.
J'ai un doute sur cette proposition car en te lisant, il se peut que c'est ce que tu veux éviter.
D'où une autre solution qui serait d'utiliser un double click en ligne 1 de la colonne pour contrôler la colonne en question.
Le but étant d'éviter de mettre des boutons partout sur ta feuille.
A te relire
Dan
Bonjour Dan,
Ta première proposition , mettre un seul bouton qui demande quelle colonne doit être testée me semble pas mal.
Tu pourrais faire cela ?
Merci d'avance,
DV.
re,
Dans ton exemple de macro, c'est sur la ligne D que tu effectues le contrôle ?
A te lire
Dan
Oui, c'est la colonne D qui est testée.
Bonjour,
essaye ceci :
1. En début de ta macro --> Dim col As String
2. Avant la définition des lignes --> col = Application.InputBox("Entrer la référence lettre de la colonne à tester")
3. Pour inclure la colonne à tester, utilise "col" à la place de ta colonne. Ici à la place de "D"
Exemple :
A la place de
Lig_D = F_D.Range("D1900").End(xlUp).Row + 1mets
Lig_D = Range(col & "1900").End(xlUp).Row + 1Amicalement
Dan
Bonjour Dan,
Merci, ça fonctionne nickel !!!.
J'ai encore une petite question. Comme tu peux le voir en bas de la macro, la ligne complète est copiée sur une autre page mais seule une partie de la ligne m'intéresse. Si par exemple je teste la colonne H, la ou les lignes contenant des infos sont copiées sur la page "Bon de commande". Sur cette page je ne veux garder que les colonnes A,B et cacher toutes les colonnes avant la colonne testée (dans l'exemple C à G) et après la colonne testée jusqu'au la colonne "AU" (donc ici de I à AT).
Je ne sais pas comment indiquer cela dans le code... pourrais tu m'aider ?
Merci,
DV